c++ - 调试代码的运行时间比发布代码长几个数量级

标签 c++ visual-studio debugging optimization serialization

我有大量代码在 Visual Studio 的 Debug模式下运行大约需要 5 分钟,在 Release模式下运行大约需要 10 秒。

当我必须在程序末尾调试代码时,这会成为一个巨大的问题,我必须等待太久才能让程序到达断点。

我尝试了序列化,并在调试代码之前使用 boost::serialize 序列化了所有变量,但事实证明反序列化所有这些变量仍然需要一两分钟。

那么是什么给了?我知道在 Debug模式下运行代码时会禁用许多优化和内联内容,但令我印象深刻的是,在 Debug模式下运行代码的时间要长将近 2 个数量级。是否有任何 hack 或程序员用来绕过这个等待时间的东西?我知道有很多程序的计算强度比我的高得多,但我非常怀疑他们会等待 5 分钟只是为了让他们的调试代码到达断点。

最佳答案

I have a large bit of code that takes about 5 minutes to run in debug mode of Visual Studio, and about 10 seconds to run in release mode.

这很正常。

So what gives? I'm aware that many optimizations and inline stuff is disabled when running code in debug mode,

这还不是全部。除了那个 msvc 插入 MANY 完整性检查,尤其是当涉及到 STL 容器时。例如,它会就不兼容的迭代器、std::map 中损坏的排序比较器以及许多其他类似问题向您发出警告。我认为它还能在某种程度上检测到内存损坏、缓冲区溢出、std::vector 的超出范围访问等。这可能很有用,但开销很大。将某个分析器放在上面,您的 10 秒也可能需要 30 分钟才能完成。这也将是正常的。

Are there any hacks or something programmers use to bypass this wait time?

除了使用它代替 #1 excuse ...
您可以在 mingw 上构建代码的调试版本——它不会插入(这种)健全性检查。
您还可以调查源 STL 库并查看哪些宏启用了所有这些功能。它很有可能被禁用。也很有可能在 msdn 的某处记录了所述宏。
您可以尝试为 Debug模式找到替代的 STL 实现。 您还可以使用调试信息构建 Release模式并调试它。

关于c++ - 调试代码的运行时间比发布代码长几个数量级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659447/

相关文章:

c++ - unordered_map 迭代器会改变吗?

c++ - 用于分析故障转储的 WinDbg 在本地 pc 上不起作用

visual-studio - Visual Studio : Break on variable change?

visual-studio - 在 Visual Studio 中自动生成 DLL .DEF 文件?

javascript - 即使代码正在执行,Firebug 也不会命中断点

python - 在函数 : cannot list zipped objects? 中调试

c++ - 大型嵌套 vector 的高效内存分配

c++ - vector 和原始类型初始化

visual-studio - Resharper 单元测试运行器明显慢于 NUnit 控制台

php - PHP解析/语法错误;以及如何解决它们