我在使用代码库很大的远程GDB会话调试C++应用程序时遇到问题,因此它包含(当使用"-O2"," - g"," - DNDEBUG"标志编译时)带有调试信息的大文件(1.1 Gb) ).
不幸的是,我不能在调试期间使用部分符号表,因为调试器一直跳过应用程序的一部分,我无法在那里设置断点并在调试时查看代码.
作为此问题的解决方案,我在连接到目标后执行以下命令:
symbol-file -readnow [path-to-file-with-debugging-info]
Run Code Online (Sandbox Code Playgroud)
这会扩展完整的符号表.但在这种情况下,GDB只是耗尽内存,达到13 Gb甚至更多RAM(而我的机器上只有16 Gb可用).此问题已在GDB Wiki中列出并已知.
我的问题是在这种情况下如何处理GDB,当我需要完整的符号表时,但是GDB需要大量的内存才能扩展它?
提前致谢!
由于处理大调试文件是 GDB 的弱点,因此在这种情况下,最佳方法是减小 *.dbg 文件的大小,并使用调试符号,而不是针对所有应用程序模块,而仅针对那些实际发生调试的模块。
在这种情况下,使用 ~150 mb *.dbg 文件并使用 DS-5 调试器,我只需要 2.5 Gb RAM,这是可以接受的。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |