很多时候我使用优化的代码(有时甚至涉及矢量化循环),其中包含错误等。如何调试这样的代码?我正在寻找任何类型的工具或技术。我使用以下(可能已过时)工具,因此我正在寻求升级。
我使用以下内容:
- 由于使用 ddd,您看不到代码,因此我使用 gdb+ dissambler 命令并查看生成的代码;我无法真正使用它来逐步完成程序。
- 无意识
谢谢
很多时候我使用优化的代码(有时甚至涉及矢量化循环),其中包含错误等。如何调试这样的代码?我正在寻找任何类型的工具或技术。我使用以下(可能已过时)工具,因此我正在寻求升级。
我使用以下内容:
谢谢
调试优化程序总是很困难,但总有办法。一些额外的提示:
在调试发布版本时,您可以输入 __asm nops; 作为断点的占位符(int 3)。这很好,因为您可以保证断点位置而不会弄乱编译器优化或编写 printf/cout 语句。
当然,调试非优化版本总是更容易。如果做不到这一点,反汇编代码可能会有所帮助。我使用的其他技术包括通过强制打印或记录中间结果来部分反优化代码,或者将关键变量更改为“易失性”,这样我至少可以在调试器中查看该值。
有可能你所说的优化代码被打乱以减少周期(这使得调试变得困难),但实际上并不是非常优化。这是我的意思的一个例子。
我会关闭编译器优化,自己调试和调整它,然后如果代码的热点实际上在编译器看到的代码中(而不是在外部库中),则重新打开编译器优化。(我将热点定义为经常发现 PC 的代码的一部分。它会自动排除包含函数调用的循环,因为它们会偷走 PC。)