GDB如何处理大(> 1 Gb)调试文件?

时间:2015-04-07 11:48:03

标签: c++ debugging gdb

我在使用代码库很大的远程GDB会话调试C ++应用程序时遇到问题,因此它包含(当使用“-O2”,“ - g”,“ - DNDEBUG”标志编译时)带有调试信息的大文件(1.1 Gb)。

不幸的是,我不能在调试期间使用部分符号表,因为调试器总是跳过应用程序的一部分,我无法在那里设置断点并在调试时看到代码。

作为此问题的解决方案,我在连接到目标后执行以下命令:

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

这会扩展完整的符号表。但在这种情况下,GDB只是耗尽内存,达到13 Gb甚至更多RAM(而我的机器上只有16 Gb可用)。此问题已列在GDB Wiki已知。

我的问题是在这种情况下如何处理GDB,当我需要完整的符号表时,但GDB需要大量内存才能扩展它?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试使用带有--compress-debug-sections=zlib选项的黄金链接器。这将减少调试信息的大小。自7.0版以来,gdb可以读取压缩的调试信息。

答案 1 :(得分:0)

由于处理大调试文件是GDB的弱点,在这种情况下的最佳方法是减少* .dbg文件的大小,有助于调试符号不是针对所有应用程序模块,而是仅针对那些实际调试的地方。

在这种情况下,使用~150 mb * .dbg文件并使用DS-5调试器,我只需要2.5 Gb RAM,这是可以接受的。