【发布时间】:2014-12-09 13:46:36
【问题描述】:
我最近注意到在 Windows 中运行 gdb 内的程序会使其速度变慢,我想知道为什么。
这是一个例子:
- 纯C++03项目,使用mingw32编译(gcc 4.8.1,32位)。
- 它与 libstdc++ 和 libgcc 静态链接,没有使用其他库。
- 这是一个 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 做了什么让它运行如此缓慢。我对调试器的工作原理有一些基本了解,但我不知道它在这里做什么,而且这次谷歌搜索对我没有帮助。
【问题讨论】:
-
一些额外信息:我刚刚用 gprof 分析了应用程序,有和没有 gdb,结果非常相似,额外的时间似乎不存在。我也用-pg编译过gdb,但目前还没有发现什么奇怪的东西。
-
出于好奇,您是否尝试过使用不同的 Windows 调试器(如 ollydbg、VS 集成调试器、windbg 等)运行它?它们的运行时性能与 mingw-gdb 相比如何?