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