我多次使用优化代码(有时甚至涉及矢量化循环),其中包含错误等。如何调试这样的代码?我正在寻找任何类型的工具或技术。我使用以下(可能是过时的)工具,所以我希望升级。
我使用以下内容:
由于
答案 0 :(得分:19)
调试优化程序总是比较困难,但总有办法。一些额外的提示:
答案 1 :(得分:7)
调试发布版本时,可以放入__asm nops;作为断点的占位符(int 3)。这很好,因为您可以保证断点位置而不会弄乱编译器优化或编写printf / cout语句。
答案 2 :(得分:1)
当然,调试非优化版本总是更容易。如果做不到这一点,反汇编代码会很有帮助。我使用过的其他技术包括通过强制打印或记录中间结果,或者将关键变量更改为“volatile”来部分去优化代码,这样我至少可以查看中的值。调试器。
答案 3 :(得分:0)
你可以称之为优化代码的优化代码是为了削减循环(这会使调试变得困难),但实际上并没有真正优化。 Here is an example of what I mean.
我会关闭编译器优化,自己调试和调整,然后如果代码中有热点实际上是编译器看到的代码(不在外部库中),则重新启用编译器优化。 (我将热点定义为经常找到PC的代码的一部分。这会自动豁免包含函数调用的循环,因为它们会偷走PC。)