c++ - 为什么 gdb 在 Windows 中这么慢?

标签 c++ windows gdb mingw

我最近注意到在 Windows 中的 gdb 中运行一个程序会使它变慢很多,我想知道为什么。

这是一个例子:

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

关于c++ - 为什么 gdb 在 Windows 中这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380443/

相关文章:

linux - GDB:lx-symbols 未定义命令

c - 如何处理gdb中的 `__int128`?

c++ - QList<float*> 类型的 NULL 返回值

c++ - 这个递归函数什么时候出现for循环递增?

windows - 无法在 Windows 下将 gvim 与病原体一起使用

windows - 使用 Ansible 在 Windows 上执行 .exe

GDB检查数据显示格式从连续8字节到4字节

c++ - OpenCV:错误 C3861: 'finite':找不到标识符

C++ Stringstream 给变量赋了错误的值?

windows - 将 FFTW 链接到 Matlab Mex 文件