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

bazel test运行测试时缺失SEGFAULT错误提示的问题咨询

Bazel测试触发SEGFAULT无报错提示的解决方案

该问题根源是Bazel默认测试沙箱会拦截系统向终端输出的进程崩溃信号日志,同时自研测试框架没有主动捕获并打印SIGSEGV信号,导致段错误信息既没有输出到终端也没有写入测试日志。你可以按以下顺序排查配置:

  • 首先尝试关闭测试沙箱,启用信号透传:
    添加参数--spawn_strategy=local --sandbox_debug,禁用沙箱隔离后系统产生的段错误提示会直接透传到测试输出中,同时沙箱调试参数会打印测试进程的退出信号值(段错误对应信号值11,退出码139)。
  • 使用系统工具捕获崩溃信息:
    执行测试时添加参数--run_under="catchsegv",catchsegv工具会主动监控测试进程,触发段错误时直接打印崩溃栈、内存地址等信息到标准错误流,Bazel会将该内容纳入测试日志与输出。如果需要更详细的栈信息,也可以替换为--run_under="gdb -q --ex run --ex bt --ex quit",崩溃时自动打印调用栈。
  • 增加测试执行包装脚本主动上报信号:
    给你的自研测试套增加shell包装层,执行测试二进制后判断退出码:如果退出码为139主动打印*测试触发SEGFAULT段错误*到标准错误流,Bazel的测试日志捕获逻辑会自动拾取该内容。
  • 关闭输出缓冲避免内容丢失:
    部分场景下段错误触发时输出缓冲区内容未刷入磁盘,会导致日志丢失,可添加参数--run_under="stdbuf -i0 -o0 -e0"强制关闭标准输入输出的缓冲,确保所有内容都能写入日志。
  • 补充测试输出参数:
    除你已经使用的参数外,额外添加--test_summary=detailed,该参数会在测试总结中打印所有异常测试的退出信号值与退出码,你可以直接从总结中看到对应测试是否触发139退出码的段错误。

内容的提问来源于stack exchange,提问作者TacoVox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:03