如何在发布模式下调试?

Ped*_*dro 32 c++ debugging visual-studio-2010 release-mode visual-c++

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

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

Ed *_* S. 66

在VS中,右键单击您的项目,选择"属性".

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

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

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

  4. 选择"优化"节点.将参考设置为是(/ OPT:REF).

    if/OPT:指定了REF,/ OPT:默认情况下ICF处于打开状态.

这是直接从微软的文档中删除的:

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

此外,我正在研究一个使用大量图像处理并对大图像执行大量压缩/解压缩的项目.使用慢速调试构建简直是不切实际的.

  • @Pedro:是的,最好还原它们并保留释放ON的默认值.我通常会为此配置创建一个新的构建类型,即"释放符号".也就是说,研究这些开关实际上做了什么并不会有害. (5认同)

Yoc*_*mer 6

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

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

局部变量通常是第一个去的,很多时候,这个对象的信息会丢失给调试器.

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

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

用C++调试发布项目 - 查找丢失的对象信息