You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:00:04