c – 如何调试在发布版本中优化的变量

前端之家收集整理的这篇文章主要介绍了c – 如何调试在发布版本中优化的变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用VS2010.我的调试版本工作正常,但我的发行版本仍然崩溃.所以在发布版本模式中我右键单击项目选择Debug然后选择启动新实例.在这一点上,我看到了一个我已经声明过的数组
int ma[4]= { 1,2,8,4};

永远不会被初始化.关于可能发生的事情的任何建议.

解决方法

在Release中构建时,编译器会对您的代码执行许多优化.许多优化包括用可能和正确的方法替换带有硬编码值的变量.例如,如果你有类似的东西:
int n = 42;
cout << "The answer is: " << n;

当优化器完成它时,它通常看起来更像:

cout << "The answer is: " <<  42;

…并且变量n完全从程序中删除.如果您单步执行此程序的发行版并尝试检查n的值,您可能会看到非常奇怪的值,或者调试器可能会报告n根本不存在.

还有许多其他优化可以应用,这使得调试优化程序非常困难.在数组初始化之后放置一个断点可能会产生非常误导的信息,如果数组被删除,或者它的初始化被移动到其他地方.

另一个常见的优化是消除未使用的变量,例如:

int a = ma[0];

如果程序中没有实际使用a的代码,编译器将看到a不需要,并对其进行优化,使其不再存在.

为了查看ma已初始化的值,最简单的可靠方法是使用所谓的sprintf调试:

cout << "ma values: ";
copy (ma,ma+4,ostream_iterator <int> (cout,","));

看看实际上到底是什么.

原文链接:https://www.f2er.com/c/119400.html

猜你在找的C&C++相关文章