在一个调试会话期间使用GDB进行调试时,它会随着时间的推移变得越来越慢即使是最简单的操作,例如步进和步入也可能需要几十秒甚至几分钟. 我正在调试一个相当大的项目(Chromium浏览器
我正在调试一个相当大的项目(Chromium浏览器).我能想到的唯一原因是gdb随着时间的推移越来越慢,因为它加载的符号越来越多,使用它们需要更长的时间.但是,Chromium将整个代码编译成一个巨大的可执行文件,其中包含应该在一开始就加载的所有符号.因此,在调试期间,符号数据库不会增长.此外,为什么需要查找符号只是为了执行步骤或步入操作?
在测试时我尝试使用带有前端的gdb(Eclipse,QtCreator,Emacs)并从命令行确认这不是IDE问题.两个用例都表现出相同的问题,但似乎它开始在IDE中出现得更早(可能是因为IDE还为监视视图,调用堆栈,线程列表等加载符号).
为什么GDB变慢?它是我的计算机中的设计缺陷,错误还是某些特定问题?是否有更快的GDB免费替代方案?
Why is GDB getting slower?
这是一个错误.尝试更新版本的GDB(最好是当前的CVS快照).如果问题仍然存在,请使用repro说明将其报告给GDB bugzilla.
all symbols which should be loaded in the very beginning.
GDB在启动时加载部分符号(psymbols),并且“按需”读取更多内容,因此预计会有一些增长.
why would one need to look up symbols just to perform step over or step into
为了跨越或进入,GDB可能需要当前翻译单元(TU)的行表.如果您的“步入”操作将您带到新的TU,则必须加载新的行表.
不过,它不应该在接近或接下来的几分钟内将GDB带到任何地方.