如何配置Visual Studio 2015调试选项以显示全部或大部分变量值
解决Visual Studio 2015调试时变量无法查看值的问题
刚好碰到过类似的情况,大概率确实是编译器优化把变量的调试信息给“优化没了”,按下面的步骤调整设置就能解决:
关闭编译器优化
右键你的项目 → 选择「属性」→ 展开「配置属性」→ 点击「C/C++」→ 找到「优化」选项,把它改成禁用(/Od)。不管是Debug还是Release模式,只要开启了优化,编译器就可能合并、甚至删除一些它认为“冗余”的变量,导致调试时看不到值,禁用优化就能保留所有变量的原始信息。确保生成完整的调试符号
同样在项目属性里:- 「C/C++」→「常规」,把「调试信息格式」设置为
程序数据库(/Zi)(如果需要支持编辑后继续调试,就选程序数据库用于编辑并继续(/ZI)); - 切换到「链接器」→「调试」,把「生成调试信息」设为
是(/DEBUG)。
这两步能让编译器生成足够的调试符号文件,VS才能识别并显示变量的值。
- 「C/C++」→「常规」,把「调试信息格式」设置为
针对Release模式的额外调整
如果你是在Release模式下调试(不建议长期这么做,但临时排查问题需要的话),除了上面的设置,还要检查:- 「C/C++」→「代码生成」,把「基本运行时检查」设为
默认或者两者(/RTC1); - 「C/C++」→「优化」里的「内联函数扩展」改成
禁用(/Ob0),避免内联函数里的变量被优化掉。
- 「C/C++」→「代码生成」,把「基本运行时检查」设为
临时应急方案
如果个别顽固变量还是看不到,你可以给变量加个volatile关键字(比如volatile int my_counter;),强制编译器不对这个变量做任何优化。不过这只是临时手段,别在正式代码里大面积用,会影响性能。另外,有时候清理项目(菜单「生成」→「清理解决方案」)再重新编译,也能解决缓存调试信息导致的异常。
内容的提问来源于stack exchange,提问作者jojo_Aero_smith_the_dummy




