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