2015-04-07 138 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

感谢您的提示,但不幸的是,我必须倾向于使用常见的构建环境,并且不允许使用其他链接器/编译器/等。 –