【发布时间】:2015-04-07 11:48:02
【问题描述】:
我在使用代码库很大的远程 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 需要大量内存才能扩展它?
提前致谢!
【问题讨论】:
-
部分符号表是 gdb 优化。如果它们不起作用,那么这是您应该提交的 gdb 错误。普通用户永远不需要
-readnow——它更像是一个 gdb 开发人员选项和/或错误解决方法。