2011-12-13 168 views
4

在一次调试期间使用GDB进行调试时,随着时间的推移变得越来越慢。即使是最简单的操作,如跨越和踩入,可能需要几十秒,有时甚至几分钟。随着时间的推移,GDB变得​​越来越慢

我正在调试一个相当大的项目(Chromium浏览器)。我能想到的唯一原因是gdb随着时间的推移变得越来越慢,因为它加载越来越多的符号,并且花费更长的时间来处理它们。然而,Chromium将整个代码编译成一个巨大的可执行文件,其中包含应该在开始时加载的所有符号。因此符号数据库在调试期间不会增长。此外,为什么只需要查找符号来执行步骤或步骤操作?

虽然测试我已经尝试使用gdb与前端(Eclipse,QtCreator,Emacs)并从命令行来确认这不是一个IDE问题。这两个用例都演示了相同的问题,但是它好像在IDE中开始出现得更早(可能是因为IDE还为watch view,调用堆栈,线程列表等加载了符号)。

为什么GDB变慢?这是设计缺陷,错误还是我电脑中的某个特定问题? GDB有没有免费的替代方案可以更快地工作?

+0

听起来像是我的内存泄漏 – ZMorek

+0

@ZMorek:在GDB或在铬? –

回答

3

为什么GDB变慢?

这是一个错误。尝试更新版本的GDB(最好是当前的CVS快照)。如果问题仍然存在,请使用repro指令将其报告给GDB bugzilla

应该在最开始加载的所有符号。

GDB在启动时加载部分符号(psymbols),并读取更多“按需”,因此预计会有一些增长。

为什么一个需要仰视的符号只是在执行步骤或步入

为了跨过或进入GDB将可能需要为当前转换单元线表(TU) 。如果您的“步入”操作将您带到新的TU,那么将不得不加载新的行表。

不过,它应该不是把GDB带到任何地方几分钟到stepnext

+0

我在Linux上完全停止了开发,但我的同事说最新版本要快得多,所以我会将其标记为正确答案。 –

相关问题