Docker环境运行ctest时如何获取core dump文件排查偶发段错误
关于ctest段错误生成core dump的说明
ctest本身不存在内置参数用于触发core dump生成,也不会在测试进程触发段错误时自动生成core dump文件。core dump的生成逻辑由操作系统内核配置、进程资源限制、运行环境参数决定,与ctest工具无关。
配置Docker环境生成core dump的步骤
- 第一步:启动容器时放开core文件大小限制,可选配置core文件存储规则
启动容器时添加--ulimit core=-1参数取消core文件大小上限,若需要自定义core文件存储路径和命名规则,可在容器内执行命令修改内核参数:# 允许生成无大小限制的core文件 ulimit -c unlimited # 配置core文件存储到/tmp目录,命名格式为core_程序名_进程ID_时间戳,避免并行测试时文件覆盖 echo "/tmp/core_%e_%p_%t" > /proc/sys/kernel/core_pattern - 第二步:确保测试二进制编译时保留调试符号
编译测试代码时添加-g参数保留符号表,使用CMake构建时可指定构建类型为Debug或RelWithDebInfo:cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo - 第三步:直接执行原有ctest命令即可
上述配置完成后,你原有的ctest命令无需修改,测试触发段错误时会自动在配置的路径下生成对应core文件:ctest -R MyTest -j 10 -VV --stop-on-failure --output-on-failure --repeat-until-fail 1000
验证配置有效性
你可以先通过手动构造段错误程序验证core生成逻辑是否正常:
// 测试代码test.c int main() { // 主动触发段错误 *(int *)0 = 0; return 0; }
编译运行:
gcc -g test.c -o test ./test
执行后检查/tmp目录下是否生成对应core文件,确认配置正常后再执行ctest测试即可。
内容的提问来源于stack exchange,提问作者aekber
相关产品推荐
相关产品推荐

