启用核心转储是否需要-g for gcc
Does enabling core dump require -g for gcc?
为了能够在运行中的程序异常退出时从中创建核心转储,是否需要在编译期间为gcc指定调试选项-g?
不,您的程序将很好地进行核心转储。然而,它将缺少调试符号,这意味着将很难将核心转储与原始代码相匹配。
不,这是两件不同的事情。然而,启用调试信息可能是个好主意,因为它会使核心转储更有用。
如果您遇到可执行文件已发送给客户的情况,或者由于其他原因不想发送调试信息,那么您想做的事情仍然是使用-g标志构建,然后从可执行文件中剥离调试信息并发送。
这样,您最终会得到两个可执行文件,一个没有您提供的调试信息,另一个有您存档的调试信息。这将使您能够在程序崩溃时分析核心转储。您只需将未剥离的可执行文件提供给调试器,而不是实际使用的(剥离的)可执行文件。
如果构建过程是确定性的,另一种选择就是归档源代码(例如使用修订控制系统)。然后,您应该能够通过重建(现在使用-g标志)来创建调试信息。虽然这不是一个好主意,因为有很多原因导致构建系统不具有确定性——认为这是一个从忘记-g标志的情况中恢复的机会。
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- GCC 优化了基于固定范围的 for 循环,就好像它具有更长的可变长度一样
- iostream GCC错误,转换为boost::filesystem::iostream for Windows
- 找不到 gcc 编译错误 cv.h for Opencv
- CComPtr replacement for gcc?
- 为什么我在构建 avin2/SensorKinect for android、NDK、gcc 时出现无法识别的选项"--dynamic-linker"错误
- 基于范围的 for 语句中的 GCC 错误
- 在哪里可以获得英特尔的 Tbb for gcc on Windows
- 启用核心转储是否需要-g for gcc
- 交叉编译libcurl for arm-linux-gnueabi-gcc
- 使用映射类型会产生GCC错误:预期的未限定id在' for '之前
- 如何使用gcc在windows for linux上进行跨平台编译
- 在这个For循环中发生了什么GCC优化
- 为什么我会"No manual entry for gcc"
- 使用 AT&T 内联汇编器 for GCC
- 忽略 GCC "error: braces around scalar initializer for type"错误。发出警告