【问题标题】:GDB is getting slower over timeGDB 随着时间的推移变得越来越慢
【发布时间】:2011-12-13 03:32:13
【问题描述】:

在一个调试会话期间使用 GDB 进行调试时,它会随着时间的推移变得越来越慢。即使是最简单的操作(例如跨步和跨步)也可能需要几十秒,有时甚至是几分钟。

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

在测试时,我尝试将 gdb 与前端(Eclipse、QtCreator、Emacs)一起使用,并从命令行确认这不是 IDE 问题。两个用例都展示了同样的问题,但是它似乎在 IDE 中开始出现得更快(可能是因为 IDE 还加载了监视视图、调用堆栈、线程列表等的符号)。

为什么 GDB 变慢了?它是我的计算机中的设计缺陷、错误还是某些特定问题?有没有比 GDB 更快的免费替代品?

【问题讨论】:

  • 对我来说听起来像是内存泄漏
  • @ZMorek:在 GDB 中还是在 Chromium 中?

标签: performance debugging google-chrome gdb chromium


【解决方案1】:

为什么 GDB 变慢了?

这是一个错误。尝试更新版本的 GDB(最好是当前的 CVS 快照)。如果问题仍然存在,请向GDB bugzilla 报告,并附上重现说明。

一开始就应该加载的所有符号。

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

为什么需要查找符号只是为了执行跨步或跨步

为了跨步或进入,GDB 可能需要当前翻译单元 (TU) 的行表。如果您的“步入”操作将您带到一个新的 TU,则必须加载新的行表。

不过,不应将 GDB 带到 stepnext 的任何近几分钟。

【讨论】:

  • 我已经完全停止了在Linux上的开发,但是我的同事说最新版本要快得多,所以我将其标记为正确答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多