我必须调试一个c ++项目,但是因为一个依赖项不能在调试模式下编译而且到目前为止我还没能解决这个问题,所以我想尝试在发布模式下调试项目。
目前应用程序由于空指针而崩溃,但我没有导致错误的代码。由于在发布模式中显然忽略了断点,我想知道找出错误的最佳方法是什么。
答案 0 :(得分:61)
在VS中,右键单击您的项目,选择“属性”。
单击“C / C ++”节点。将调试信息格式设置为C7兼容(/ Z7)或程序数据库(/ Zi)。
展开“链接器”,然后单击“常规”节点。将启用增量链接设置为否(/ INCREMENTAL:NO)。
选择“调试”节点。将生成调试信息设置为是(/ DEBUG)。
选择“优化”节点。将参考设置为是(/ OPT:REF)。
如果指定了/ OPT:REF,则/ OPT:默认情况下ICF处于启用状态。
直接从微软的文档中删除:
我一直这样做,几乎从不在调试模式下调试。如您所知,发布版本中发生的许多错误可能不会在调试版本中发生(几乎可以肯定是调用UB引起的错误)。
此外,我正在开展一个项目,该项目使用大量图像处理并对大图像执行大量压缩/解压缩。使用慢速调试构建是不切实际的。
答案 1 :(得分:6)
您无法始终只更改项目设置并重新编译 有时您有一个要调试的已发布版本,或者客户端发送的转储文件。
在发布中使用优化编译C ++项目时,调试器有时不会显示正确的对象信息。
局部变量通常是第一个去的,很多时候,这个对象的信息会丢失给调试器。
原因是编译器使用可用的硬件寄存器来保存信息,并使用优化来避免分配局部变量。
我建议在这里找到遗漏的信息:
<强> Debugging Release Projects in C++ - Finding the Lost Object Information 强>