繁体   English   中英

为什么Windows中的gdb这么慢?

[英]Why is gdb so slow in Windows?

我最近注意到,在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中未优化的版本花费的时间相同)。
  • 使用mingw32项目中的gdb 7.5和7.6进行了测试,并由我编译了gdb 7.8(所有这些都没有python支持)。
  • 我通常在GNU / Linux机器上进行开发,在那儿我看不到使用gdb或不使用gdb的速度差异。

我想知道gdb在做什么,这使它运行得如此缓慢。 我对调试器的工作原理有一些基本的了解,但是我无法弄清调试器在做什么,并且这次搜索对我没有帮助。

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

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

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

配置时间选项是--disable-nls 我可能只是误解了真正的原因是什么,但是无论如何您还是值得一试。

那时我的错误报告在这里 ,尽管结论是我弄错了。 如果您可以对此提供进一步的了解,那就太好了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM