我在使用代码库很大的远程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需要大量内存才能扩展它?
提前致谢!
答案 0 :(得分:1)
您可以尝试使用带有--compress-debug-sections=zlib
选项的黄金链接器。这将减少调试信息的大小。自7.0版以来,gdb可以读取压缩的调试信息。
答案 1 :(得分:0)
由于处理大调试文件是GDB的弱点,在这种情况下的最佳方法是减少* .dbg文件的大小,有助于调试符号不是针对所有应用程序模块,而是仅针对那些实际调试的地方。
在这种情况下,使用~150 mb * .dbg文件并使用DS-5调试器,我只需要2.5 Gb RAM,这是可以接受的。