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

Clickhouse基于breakpad生成minidump文件,方便问题定位

背景

        breakpad能够在程序崩溃的时候自动生成一个mini的core文件,能够帮助进行问题定位,但是clickhouse对于集成breappad的难度较大

        查看github发现之前有大佬基于以前的分支有个MR,但是一直没有合并到社区,想来是有什么其他的原因,同时由于现在master的代码有些许差异,所以还需要进行部分改造

前提准备

社区大佬的MR:

https://github.com/ClickHouse/ClickHouse/pull/53916/files

clickhouse:最新提交如下图所示

https://github.com/ClickHouse/ClickHouse.git

编译环境

clang19

楼主编译时,主干已经更新到clang19,所以需要升级

# 安装依赖
apt update
apt install -y wget gnupg software-properties-common lsb-release
# 添加 LLVM 官方仓库(自动检测系统版本)
wget -qO- https://apt.llvm.org/llvm.sh | sudo bash -s 19
apt update
apt install -y clang-19 lldb-19 lld-19 clangd-19
# 修改默认配置
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 100
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 100

 wsl

楼主基于wsl进行编译,其他操作系统类似

修改代码

修改文件清单如下图所示,详见附件

其他版本也可以对照进行修改,修改点参考社区MR https://github.com/ClickHouse/ClickHouse/pull/53916/files

核心代码

下述代码会在进程崩溃时优先生成minidump,成功之后还会生成core文件,即便没有开启ulimit -c

生成的文件默认在ck的日志目录下

编译

在前面将代码修改适配完成之后,即可进行编译,此处编译按照官方的指导逐步操作即可

mkdir build
cd build
export CC=clang-19
export CXX=clang++-19
cmake -D CMAKE_BUILD_TYPE=Debug ..
ninja -j 8

启动clickhouse

此处启动可以参考 CSDN

./clickhouse server config.xml

构造异常

可以修改代码,构造一个段错误,也可以直接向进程发送一个信号量的方式进行异常构造,验证core文件的生成,为了方便,此处采用直接发送信号量的方式

 kill -SIGSEGV PID

此时在进程崩溃之后便会自动生成minidump和core文件了

查看minidump文件

生成的minidump和core文件均在日志目录下

minidump转core

因为有的时候core文件很大,可能因为磁盘空间不足,无法生成,那么此时就需要用breakpad的转换工具了,此处可以参考其他文章

将转换之后的core文件用gdb加载,即可查看程序崩溃时的堆栈信息了,帮助进行问题定位。


文章转载自:
http://cartographer.hfstrb.cn
http://campy.hfstrb.cn
http://agouti.hfstrb.cn
http://avdp.hfstrb.cn
http://biome.hfstrb.cn
http://aerotherapy.hfstrb.cn
http://anaphoric.hfstrb.cn
http://campfire.hfstrb.cn
http://barn.hfstrb.cn
http://anaesthesiologist.hfstrb.cn
http://chanticleer.hfstrb.cn
http://categorise.hfstrb.cn
http://biographize.hfstrb.cn
http://abrogation.hfstrb.cn
http://artistically.hfstrb.cn
http://cacanny.hfstrb.cn
http://bumpkin.hfstrb.cn
http://blutwurst.hfstrb.cn
http://averseness.hfstrb.cn
http://anodyne.hfstrb.cn
http://alliteration.hfstrb.cn
http://astonished.hfstrb.cn
http://blemya.hfstrb.cn
http://belabor.hfstrb.cn
http://accidented.hfstrb.cn
http://bedlam.hfstrb.cn
http://blackheart.hfstrb.cn
http://basilary.hfstrb.cn
http://casualization.hfstrb.cn
http://biodynamics.hfstrb.cn
http://www.dtcms.com/a/170025.html

相关文章:

  • 二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE
  • 强化学习中的策略评估与改进:从理论到实践(二)
  • zabbix 重置登录密码
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)
  • Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载
  • 力扣每日一题 ​838. 推多米诺​
  • VS调试技巧
  • Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全
  • 【2025软考高级架构师】——案例分析总结(13)
  • 学习黑客分析案例
  • 基于stm32的四旋翼飞行器:MPU6050讲解 · 上(参数读取)
  • C语言中,sizeof关键字(详细介绍)
  • java Servlet Session 本身局限性解决方案
  • 【libuv】基于libuv的exe链接错误
  • Kubernetes(k8s)学习笔记(四)--入门基本操作
  • AI 采用金字塔(Sohn‘s AI Adoption Pyramid)
  • Linux操作系统从入门到实战(五)详细讲解Linux权限概念
  • Python Django基于小波变换的数字水印技术实现系统【附源码、文档说明】
  • Docker —— 技术架构的演进
  • Linux实验课二(重点:动态链接库,makefile使用)
  • 经典算法 求解台阶问题
  • 【RocketMQ NameServer】- NettyEventExecutor 处理 Netty 事件
  • 软件测试 - 绪论
  • 【计算机网络-应用层】解析HTTP会话保持:Cookie与Session的原理与实践
  • 昇腾的昇思MindSpore是什么?跟TensorFlow/PyTorch 等第三方框架有什么区别和联系?【浅谈版】
  • 机器学习中的分类和回归问题
  • 网络安全系列--《文章1:网络安全基础与核心概念》
  • LeetCode Hot100题解
  • Dubbo(92)如何在微服务架构中应用Dubbo?
  • 电脑RGB888P转换为JPEG方案 ,K230的RGB888P转换为JPEG方案