c++ - 调试使用调试标志运行的代码和使用 opt 标志运行的段错误

标签 c++ debugging

我有一段 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/

相关文章:

C++作业帮(画个木棍房子包括/\)

c++ - 调试网络应用程序和测试同步性?

bash -x 引入奇怪的引号

javascript - Node.js:如何远程调试?

debugging - 为什么 64 位 gdb 在 ARM 32 代码中永远不会到达断点?

c++ - 使用用户定义的文字实现 km/h 和 m/s

c++ - 使用 bool 非类型参数实例化类模板时出错

c++ - 如何在 C++ 中将 unordered_map 作为函数参数传递?

在 Visual Studio 2015 中停止调试 session 后,MySQL 连接保持打开状态

python - Kdevelop 与 Python/C++ : no output in debug mode