gpt4 book ai didi

c++ - 调试优化的 C/C++ 程序的有效方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 22:34:43 26 4
gpt4 key购买 nike

很多时候我使用优化的代码(有时甚至涉及矢量化循环),其中包含错误等。如何调试这样的代码?我正在寻找任何类型的工具或技术。我使用以下(可能已过时)工具,因此我正在寻求升级。

我使用以下:

  • 由于使用了ddd,所以看不到代码,我使用gdb+ dissambler 命令查看生成的代码;我无法真正使用它来逐步完成程序。
  • ndisasm

谢谢

最佳答案

调试优化程序总是很困难,但总有办法。一些额外的提示:

  • 进行调试构建,看看您是否在调试构建中遇到相同的错误。如果非必要,调试优化版本是没有意义的。
  • 如果在支持它的平台上使用 valgrind。您看到的错误可能更难理解,但及早发现问题通常会简化调试。
  • printf 调试是原始的,但如果您遇到仅在优化构建中出现的复杂问题,有时它是最简单的方法。
  • 如果您怀疑存在时序问题(尤其是在多线程程序中),请滚动您自己的 assert 版本,如果违反条件则中止或打印,并在几个选定的地方使用它,以排除可能的问题。<
  • 看看你是否可以在不使用 -fomit-frame-pointers 的情况下重现问题,因为这使得代码很难调试,并且启用了 -O2 或 -O3。这可能会为您提供足够的信息来找出问题的原因。
  • 隔离部分代码,构建测试套件,然后查看是否可以识别任何失败的测试用例。调试一个函数比调试整个程序要容易得多。
  • 尝试使用 -fno-X 选项一一关闭优化。这可能会帮助您找到常见问题,例如严格的别名问题。
  • 开启更多编译器警告。如果某些问题(例如严格的别名问题)在不同优化级别之间造成行为差异,则可能会生成编译器警告。

关于c++ - 调试优化的 C/C++ 程序的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com