调试release版本程序dump时出现的代码定位不准确问题

在调试release程序crash dump时,因为编译器优化了代码,所以会造成崩溃位置定位不准确的问题,这个问题让人很恼火。
搜索了很久关于这方面的问题,最终无果。

自己进行尝试,最终得出解决方案:
若希望崩溃时代码定位准确,则需要取消掉编译器代码优化,在VisualStudio 2008中的方法如下:

工程上右键 -> 属性 -> C/C++ -> 优化 -> 第一项【优化】,改为:【禁用/Od】

如果希望恢复编译器的代码优化,则将该项改为需要的优化方式即可,其默认选项为【最大化速度/O2】


修改后,故意创使程序崩溃,得dumpFile,打开调试,代码定位准确,问题解决。


注:虽然准确定位了代码,但我对该选项的修改会造成什么效率损失仍不明确。个人估计应该是去掉了一些不会被执行或者无意义的代码。从而提升速度,但release版本与debug版本的差异还有很多,例如debug版本有栈溢出保护(典型表现为如果局部变量/缓冲区溢出,会立即崩溃)等,所以,该选项选为【禁用】后,应当也不会全部损失掉release版本的速度优势。

你可能感兴趣的:(优化,Crash,编译器)