当前位置: 首页 > article >正文

解决bazel构建的项目段错误时coredump调试问题

最近在熟悉使用bazel构建项目,遇到了一个**段错误 (核心已转储)**的问题,下面记录一下踩到的坑以及解决的办法

问题复现

首先复现一个简单的coredump问题
tmp.cpp

#include <iostream>

int main(int argc, char **argv)
{
    std::cout << "下面产生一个coredump" << std::endl;
    int *ptr = nullptr;
    *ptr = 42; // 显式触发段错误
    return 0;
}

BUILD

cc_binary(
    name = "tmp",
    srcs = ["tmp.cpp"],
    copts = ["-g", "-O0"], 
)

使用下面命令build
bazel build //:tmp
然后运行
./bazel-bin/tmp
这个时候可以使用coredumpctl查看生成的core文件
Fri 2025-01-10 20:16:25 CST 829214 1001 1001 11 present /balabalabala/c82bbfb733a09027e8977ae30cc9c859/execroot/__main__/bazel-out/k8-fastbuild/bin/tmp
使用gdb打开
coredumpctl gdb 829214
在gdb返回的信息中有No debugging symbols found in ...,说明并没有调试信息,但是我们在BUILD文件中设置了-g,原因在于调试符号会在构建完成后被移除

解决方案

在项目根目录下新建一个.bazelrc文件添加下面配置

build --copt=-g         # 启用调试符号
build --copt=-O0
build --strip=never     # 禁用剥离

然后再

bazel clean
bazel build //:tmp
./bazel-bin/tmp
coredumpctl gdb 829789

就能看到下面调试信息啦:

[New LWP 829789]
Core was generated by `./bazel-bin/tmp'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055d108ff6973 in main (argc=1, argv=0x7fffe437bdf8) at tmp.cpp:7
7           *ptr = 42; // 显式触发段错误

http://www.kler.cn/a/488857.html

相关文章:

  • 使用vue-pdf预览pdf和解决pdf电子签章显示问题
  • MATLAB语言的循环实现
  • Postman接口测试05|实战项目笔记
  • <rust>在rust中,实现32位浮点数与16进制之间的转换
  • 【华为OD-E卷 - 篮球比赛 100分(python、java、c++、js、c)】
  • vue3+ts+element-plus 对话框el-dialog设置圆角
  • RabbitMQ基本介绍及简单上手
  • 中国科学院|PPTAgent:超越文本到幻灯片的演示文稿生成与评估
  • 三化六防是什么
  • 现代企业架构白皮书(可以在线阅读完整PDF文件)
  • 基于 GEE Sentinel-1 数据集提取水体
  • MySQL_单行函数和多行函数
  • 【MySQL】ON与WHERE的区别(临时表)
  • [tesseract]Deserialize header failed: FIRC.lstmf
  • 【力扣热题100】—— Day20.多数元素
  • 【网络协议】动态路由协议
  • 深入探索AI核心模型:CNN、RNN、GAN与Transformer
  • 【Leetcode-移动零】利用将非零元素移动至数组前解决移动零问题(剪枝优化)
  • TypeScript语言的网络编程
  • Linux第一个系统程序---进度条
  • 详细分析 Git 分支重命名与同步操作
  • Harmony OS开发-ArkUI框架速成八之交叉轴和自适应
  • 【Qt】控件概述和QWidget核心属性1(enabled、geometry、windowTitle、windowIcon、QRC机制)
  • 全文搜索-搜索权限,非侵入文档同步,权限同步 ,扩展字段
  • 深度解析如何使用Linux中的git操作
  • Python 教程 - 基本语句