如何在发布模式下进行调试

How to debug in release mode?

本文关键字:调试 模式 布模式      更新时间:2023-10-16

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

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

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

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

  2. 展开"链接器",然后单击"常规"节点。将"启用增量链接"设置为"否"(/增量:否)。

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

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

如果指定了/OPT:REF,则默认情况下/OPT:ICF 处于打开状态。

这是直接从Microsoft的文档中撕下来的:

  • 如何:调试发布版本
  • OPT优化

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

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

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

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

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

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

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

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