C++ 如何在发布模式下调试?

C++ 如何在发布模式下调试?,c++,visual-studio-2010,debugging,visual-c++,release-mode,C++,Visual Studio 2010,Debugging,Visual C++,Release Mode,我必须调试一个C++项目,但是由于一个依赖项在调试模式下没有编译,到目前为止我还没有解决这个问题,所以我想尝试在发布模式下调试这个项目。p> 目前,应用程序由于空指针而崩溃,但我没有导致错误的代码。由于在发布模式中断点显然被忽略,我想知道找到错误的最佳方法是什么 在VS中,右键单击项目,选择“属性” 单击C/C++节点。将调试信息格式设置为C7兼容(/Z7)或程序数据库(/Zi) 展开链接器并单击常规节点。将“启用增量链接”设置为“否”(/Incremental:No) 选择调试节点。将“生成调

我必须调试一个C++项目,但是由于一个依赖项在调试模式下没有编译,到目前为止我还没有解决这个问题,所以我想尝试在发布模式下调试这个项目。p>
目前,应用程序由于空指针而崩溃,但我没有导致错误的代码。由于在发布模式中断点显然被忽略,我想知道找到错误的最佳方法是什么

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

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

  • 展开链接器并单击常规节点。将“启用增量链接”设置为“否”(/Incremental:No)

  • 选择调试节点。将“生成调试信息”设置为“是”(/Debug)

  • 选择优化节点。将引用设置为Yes(/OPT:REF)

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

  • 这是直接从Microsoft文档中删除的:

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


    此外,我还参与了一个项目,该项目使用大量的图像处理,并对大型图像执行大量的压缩/解压缩。使用缓慢的调试版本根本不切实际。

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

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

    局部变量通常是第一个进入的,并且很多时候,该对象的信息会丢失给调试器

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

    我建议在此处查找缺少的信息:


    谢谢,问题解决了!我不太了解所有这些设置的效果,所以最好只在调试时使用它们,并在编写实际版本时再次删除它们?@Pedro:是的,可能最好将它们还原,并保留发布时的默认值。我通常会为此配置创建一个新的构建类型,即“release w/symbols”。这就是说,去研究这些开关的实际功能并没有什么坏处。@EdS。这(事实上是它对英特尔visual fortran的改编)让我大开眼界!(我通过从发布版复制创建了一个新的配置,并更改了需要更改的内容。)我理解为什么F10不能线性执行代码(我猜还有一些其他优化),但我不理解的是为什么有些行会被传递多次,类似于声明/初始化等,因为这些行在发布版本中不存在。它们已经被优化了。@Eds:谢谢。嗯,这肯定管用。我在发布模式下意外崩溃。我的许多函数超出了16KB的堆栈限制,我怀疑这可能是原因(警告C6262)。但在进行任何自我优化之前,我在发行版中使用/OPT:REF修改了构建属性,它就这样运行了。我想移除C6262也很重要@如果您可以访问代码和IDE,Ed的答案非常好。Yochai的答案值得一读。