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