2012-06-28 37 views
28

我必须调试一个C++项目,但因为一个依赖项不能在调试模式下编译,而且我目前还无法解决这个问题,所以我想尝试在发布模式下调试项目。如何在发布模式下进行调试?

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

回答

52

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

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

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

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

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

    如果指定了/ OPT:REF,/ OPT:默认情况下ICF开启。

这是直接从微软的文档撕开:

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

此外,我在一个项目上工作,该项目使用大量图像处理,并执行大量图像的压缩/解压。使用缓慢的调试版本是不切实际的。

+0

谢谢问题解决了!对于所有这些设置的效果我都不太了解,所以最好只使用它们进行调试,并在编译实际发行版时再次将其删除? – Pedro

+5

@Pedro:是的,可能最好将它们还原,并保留ON的默认值。我通常为这个配置创建一个新的构建类型,即“释放w /符号”。也就是说,研究这些交换机实际做的事情并不会带来什么坏处。 –

4

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

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

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

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

我建议的方式在这里找到丢失的信息:

Debugging Release Projects in C++ - Finding the Lost Object Information

+0

@如果你有权访问代码和IDE,那么答案很好。 Yochai的回答值得一读。 –

相关问题