如何在发布模式下调试?

问题描述 投票:0回答:2

我必须调试一个 c++ 项目,但由于一个依赖项无法在调试模式下编译,而且到目前为止我还无法解决该问题,我想尝试在发布模式下调试该项目。

目前应用程序由于空指针而崩溃,但我没有导致错误的代码。由于断点在发布模式下显然被忽略了,我想知道找到错误的最佳方法是什么。

c++ visual-studio-2010 debugging visual-c++ release-mode
2个回答
78
投票

在 VS 中,右键单击您的项目,选择“属性”。

  1. 单击 C/C++ 节点。将调试信息格式设置为 C7 兼容 (/Z7) 或程序数据库 (/Zi)。

  2. 展开链接器并单击常规节点。将启用增量链接设置为否 (/INCREMENTAL:NO)。

  3. 选择调试节点。将生成调试信息设置为是 (/DEBUG)。

  4. 选择优化节点。将引用设置为是 (/OPT:REF)。

如果 /OPT:REF 被指定,/OPT:ICF 默认开启。

直接从微软的文档中截取:

我一直这样做,几乎再也不会在调试模式下调试了。如您所知,发布版本中出现的许多错误可能不会出现在调试版本中(几乎可以肯定是调用 UB 引起的错误)。

此外,我从事的项目使用大量图像处理并对大图像执行大量压缩/解压缩。使用缓慢的调试构建是不切实际的。


7
投票

您不能总是只更改项目设置并重新编译。
有时你有一个你想要调试的发布版本,或者一个客户端发送的转储文件。

在优化版本中编译 C++ 项目时,调试器有时不会显示正确的对象信息。

局部变量通常最先消失,很多时候,这个对象的信息丢失给调试器。

原因是编译器使用可用的硬件寄存器来保存信息,并使用优化来避免局部变量的分配。

我在这里建议了一种查找缺失信息的方法:

C++调试发布项目——寻找丢失的对象信息

© www.soinside.com 2019 - 2024. All rights reserved.