2015-04-07 129 views
6

我有一個問題,使用遠程GDB會話調試C++應用程序,代碼庫很大,因此它包含(編譯時使用「-O2」,「-g」,「-DNDEBUG」標誌)帶有調試信息的大文件1.1 Gb)。GDB如何處理大(> 1 Gb)調試文件?

不幸的是,我不能只在調試過程中使用的部分符號表,因爲所有的時間調試程序跳過應用程序的一部分,我不能在那裏設置斷點,看看代碼,而調試。

對於這個問題的解決方案,我執行以下命令我必須連接到目標之後:

symbol-file -readnow [path-to-file-with-debugging-info] 

這擴大完整符號表。但在這種情況下,GDB只是耗盡內存達到13 Gb甚至更多的內存(而我的機器上只有16 Gb可用)。已知此問題已在GDB Wiki中列出。

我的問題是如何處理GDB在這種情況下,當我需要完整符號表,但GDB需要的內存量ENORM爲了擴大呢?

在此先感謝!

+0

部分符號表是gdb優化。如果他們不工作,那麼這是一個你應該提交的gdb錯誤。普通用戶不應該需要「-readnow」 - 它更像是gdb開發人員選項和/或bug解決方法。 –

回答

0

由於處理大的調試文件是GDB的弱點,因此在這種情況下,最佳方式是通過調試符號不是針對所有應用程序模塊來減小* .dbg文件的大小,但僅適用於那些調試將會實際上發生。

在這種情況下用約150 MB * .DBG文件,並使用DS-5調試器的我只需要2.5千兆RAM這是可接受的。

1

你可以嘗試使用金連接器與--compress-debug-sections=zlib選項。這將減少調試信息的大小。自7.0版以來,gdb可以讀取壓縮的調試信息。

+0

感謝您的提示,但不幸的是,我必須傾向於使用常見的構建環境,並且不允許使用其他鏈接器/編譯器/等。 –