当前位置:  开发笔记 > 编程语言 > 正文

优化是否会影响使用其PDB调试VC++应用程序的能力?

如何解决《优化是否会影响使用其PDB调试VC++应用程序的能力?》经验,为你挑选了1个好方法。

为了能够正确调试发布版本,需要一个PDB文件.当编译器使用不同类型的优化(FPO,PGO,内部函数,内联等)时,PDB文件是否会变得不太可用?如果是这样,优化效果是否严重或仅仅导致相邻的代码行混淆?

(我正在使用VC2005,并且总是选择可调试性而非优化性能 - 但问题是一般的)



1> Michael..:

是的,优化的代码可调试性较差.不仅缺少一些信息,一些信息也会产生误导.

我认为最大的问题是局部变量.编译器可以使用相同的堆栈地址或在整个函数中注册多个变量.正如其他海报所提到的,有时甚至会弄清楚"这个"指针是什么可能需要一些时间.调试优化代码时,您可能会看到当前行在单步执行时跳转,因为编译器重新组织了生成的代码.如果你使用PGO,这种跳跃可能会变得更糟.

如果您有PDB,FPO不应该过多地影响可调试性,因为PDB包含为FPO帧展开堆栈所需的所有信息.使用需要在没有符号的情况下获取堆栈跟踪的工具时,FPO可能会出现问题.对于许多项目而言,如今FPO的性能优势并不超过对可诊断性的影响; 因此,MS决定不使用FPO优化构建Windows Vista(http://blogs.msdn.com/larryosterman/archive/2007/03/12/fpo.aspx).

我更喜欢调试未优化的代码,但这并不总是可行的 - 一些问题只能用优化的代码重新编写,客户崩溃转储来自已发布的版本,并且有时无法部署调试私有代码.通常在调试优化代码时,我使用反汇编视图 - dissasembly永远不会说谎.

这一切都适用于windbg,因为我使用它进行所有本机代码调试.Visual Studio的调试器可能会更好地处理其中一些情况.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有