为什么Windows中的gdb这么慢?

时间:2014-12-09 13:46:36

标签: c++ windows gdb mingw

我最近注意到在windows中运行gdb中的程序会让它慢很多,我想知道原因。

以下是一个例子:

  • 这是一个纯粹的C ++ 03项目,使用mingw32编译(gcc 4.8.1,32位)。
  • 它与libstdc ++和libgcc静态链接,不使用其他lib。
  • 这是一个cpu和内存密集型非并行进程(网格版操作,涉及数据结构的大量新闻和删除以及查询)。
  • 问题不在于启动时间,整个过程非常缓慢。
  • 调试版本(-O0 -g2)在gdb之外的8秒内运行,但在gdb内的140秒内运行。
  • 从命令行测试,只需启动gdb并输入“run”(未定义断点)。
  • 我还测试了一个发布版本(已经过优化,没有调试信息),而且在gdb中它仍然慢得多(3秒对140秒;是的,它需要与gdb中未优化版本相同的时间)。 / LI>
  • 使用mingw32项目中的gdb 7.5和7.6进行测试,并使用我编译的gdb 7.8(所有这些都没有python支持)。
  • 我通常在GNU / Linux机器上开发,在那里我无法注意到使用或运行gdb之间的速度差异。

我想知道gdb正在做什么让它运行得如此之慢。我对调试器的工作方式有一些基本的了解,但是我无法弄清楚它在这里做了什么,谷歌这次没有帮助我。

2 个答案:

答案 0 :(得分:3)

我终于找到了问题,感谢大狼请我测试其他调试器。 Ollydbg与gdb的时间相同,因此它不是gdb问题,而是Windows问题。这个提示改变了我的搜索条件,然后我发现这篇文章*很好地解释了这个问题并提供了一个非常简单的解决方案:将环境变量_NO_DEBUG_HEAP定义为1.这将禁用特殊堆系统窗口提供的使用和c ++程序使用。

*这里是链接:http://preshing.com/20110717/the-windows-heap-is-slow-when-launched-from-the-debugger/

答案 1 :(得分:0)

我曾经遇到过gdb非常慢的问题,我记得禁用nls(本地语言支持,即所有消息的翻译)可以解决这个问题。

配置时间选项为--disable-nls。我可能错误地认为是什么是真正的原因,但无论如何它都值得一试。

我当时的错误报告是here,虽然得出的结论是我错了。如果您能够进一步了解这一点,那就太棒了!