我有一段 C++ 代码会出现带有优化标志的段错误,但当我使用调试标志运行它时却不会。这使我无法使用调试器。除了大量的 cout 语句之外,还有其他方法/指南吗?
我在 *nix 平台上使用 intel-12.1 编译器,我很确定这是一个内存问题,我需要用 valgrind 解决这个问题。唯一让我困惑的是为什么它在 Debug模式下不显示。
最佳答案
Valgrind 是基于 Unix 系统的有用工具,用于对 Release模式可执行文件进行故障排除(gflags 和 WinDebug 对 Windows 很有用。)
我还建议不要放弃调试器 - 您可以在调试器中运行非调试可执行文件,并且仍然可以获得有关段错误的有用信息。通常,您还可以添加某种级别的调试信息,即使启用了优化,也可以为您提供更多上下文。您还可以检查英特尔编译器可能提供的任何 Debug模式堆检查工具,因为这些工具在调试版本中可能无法检测到(由于不同的内存管理)。
另请注意,通常有多个级别的优化可用于“ Release模式”。您可以尝试退回到不太积极的优化级别,看看错误是否仍然出现。
您还可以查看英特尔编译器网站,查看是否有任何关于优化您正在使用的编译器版本的错误修正/错误报告。
如果这些都没有帮助,您可以尝试使用备用编译器(除非您使用的是英特尔特定的编译器)来查看问题是否与编译器相关。
最后,正如 klm123 指出的那样,注释掉 block 是定位问题的好方法。
关于c++ - 调试使用调试标志运行的代码和使用 opt 标志运行的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606568/