Visual studio VisualStudio C++;如何使debuginfo在releasemode下可靠
我有个小问题。我的应用程序在调试模式下运行没有问题,但在发布模式下崩溃。我无法追踪这个问题,因为在发布模式下,所有的Debuginfo看起来都是胡说八道。然而,有时在其他项目中,调试输出在发布模式下也是有效的。我必须更改哪些项目设置,以使调试输出在版本中有效Visual studio VisualStudio C++;如何使debuginfo在releasemode下可靠,visual-studio,debugging,visual-c++,release,Visual Studio,Debugging,Visual C++,Release,我有个小问题。我的应用程序在调试模式下运行没有问题,但在发布模式下崩溃。我无法追踪这个问题,因为在发布模式下,所有的Debuginfo看起来都是胡说八道。然而,有时在其他项目中,调试输出在发布模式下也是有效的。我必须更改哪些项目设置,以使调试输出在版本中有效 谢谢 很可能,您正在使用未初始化的变量 在项目设置中,设置 配置属性>C/C++>常规>调试信息格式 到程序数据库 然后,设定 配置属性>链接器>调试>生成调试信息 至Yes 旧的“跟踪调试”方法可以帮助您大致了解问题所在。然后再次阅读这部
谢谢 很可能,您正在使用未初始化的变量 在项目设置中,设置
配置属性>C/C++>常规>调试信息格式
到程序数据库
然后,设定
配置属性>链接器>调试>生成调试信息
至Yes
旧的“跟踪调试”方法可以帮助您大致了解问题所在。然后再次阅读这部分代码并追踪未初始化的变量。即使在发布模式下,根据默认设置,“生成调试信息”也应设置为“是”。问题是,当您在发布模式下运行时,编译器会优化代码,这使得调试器很难显示正确的变量值(例如,它可能会选择将一些变量保留在寄存器中等)
关于这一点没有什么需要做的,您可以始终使用
#pragma optimize(“,off)
/#pragma optimize(“,on)
在全局或特定函数周围关闭优化,但这本质上意味着您再次在调试模式下运行,崩溃可能会消失
如果您对阅读汇编代码感到满意,您可以切换到反汇编模式,并通过一点调查找到正确的变量值。您好,谢谢!这些设置已经设置好了。我还设置了/ASSEMBLYDEBUG-但调试输出仍然无效,无法重建项目以确保pdb同步?我当然设置了-但仍然相同。我可以跟踪传递的函数属性,但对于所有局部变量,我得到的CXX017符号“variablename”不是found@Mat这是因为在发布模式下,VC选择将其保存在一个寄存器中,请参阅我的答案。好吧,这里的一切都是正确的。然而,我不认为关闭优化功能有助于解决崩溃的真正原因?@Gregory不,你是对的,它可能不会帮助你找到崩溃。这只是一个如何使显示的变量可靠的示例,但正如我所写,崩溃可能会消失。崩溃可能会消失,而不是它的原因:)