[MySQL 调试] 初试breakpad

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

breakpad是google开源的一个崩溃报告工具,按照其声称,生成的core file相当小,近日开始调研将其集成到我们线上MySQL的可行性,以下是初步的安装尝试

1. checkout 代码

svn co http://google-breakpad.googlecode.com/svn/trunk  breakpad

2. configure && make && make install

3.暴力cp src/client/linux/libbreakpad_client.a

4.测试程序

#include “client/linux/handler/exception_handler.h”
#include <cstdio>

static bool dumpCallback(const google_breakpad::MinidumpDescriptor &md,
void* context,
bool succeeded)
{
printf(“Dump path: %s\n”, md.path());
return succeeded;
}

void crash()
{
volatile int* a = (int*)(NULL);
*a = 1;
}

int main()
{
google_breakpad::MinidumpDescriptor md(“/tmp”);
google_breakpad::ExceptionHandler eh(md, NULL, dumpCallback, NULL, true, -1);
crash();
return 0;
}

 

g++ test.cc -o test -g  -I src/  -lbreakpad_client  -lpthread

$./test
Dump path: /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp
Segmentation fault

 

breakpad包含了几个工具:

a.dump_syms用于产生程序的符号信息

dump_syms ./tesr  > test.sym

$dump_syms ./test  > test.sym
$head -n1 test.sym
MODULE Linux x86_64 CE30BAB82B8B4B73D3A169C97011971D0 test

 

mkdir -p ./symbols/test/CE30BAB82B8B4B73D3A169C97011971D0

mv test.sym ./symbols/test/CE30BAB82B8B4B73D3A169C97011971D0/

 

b.minidump_stackwalk  用于分析产生的dmp文件,输出堆栈,CPU,OS等信息

例如

$minidump_stackwalk  /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp  ./symbols
2012-09-16 02:48:06: minidump_processor.cc:264: INFO: Processing minidump in file /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp
2012-09-16 02:48:06: minidump.cc:3780: INFO: Minidump opened minidump /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp
2012-09-16 02:48:06: minidump.cc:3825: INFO: Minidump not byte-swapping minidump
2012-09-16 02:48:06: minidump.cc:4191: INFO: GetStream: type 1197932545 not present
2012-09-16 02:48:06: minidump.cc:4191: INFO: GetStream: type 1197932546 not present
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /u01/project/breakpad/test
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /lib64/ld-2.12.so
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /lib64/libc-2.12.so
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /lib64/libpthread-2.12.so
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /lib64/libm-2.12.so
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /lib64/libgcc_s-4.4.5-20110214.so.1
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for /usr/lib64/libstdc++.so.6.0.13
2012-09-16 02:48:06: minidump.cc:1959: INFO: MinidumpModule could not determine version for linux-gate.so
2012-09-16 02:48:06: minidump_processor.cc:116: INFO: Minidump /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp has CPU info, OS info, no Breakpad info, exception, module list, thread list, no dump thread, and requesting thread
2012-09-16 02:48:06: minidump_processor.cc:150: INFO: Looking at thread /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp:0/1 id 0x2fbb
2012-09-16 02:48:06: minidump.cc:308: INFO: MinidumpContext: looks like AMD64 context
2012-09-16 02:48:06: minidump.cc:308: INFO: MinidumpContext: looks like AMD64 context
2012-09-16 02:48:06: source_line_resolver_base.cc:220: INFO: Loading symbols for module /u01/project/breakpad/test from memory buffer
2012-09-16 02:48:06: simple_symbol_supplier.cc:193: INFO: No symbol file at ./symbols/libc-2.12.so/3D56C84D4CA1C801848D81D06507EDFF0/libc-2.12.so.sym
2012-09-16 02:48:06: simple_symbol_supplier.cc:131: INFO: Cannot find symbol data buffer for module /lib64/libc-2.12.so
2012-09-16 02:48:06: basic_code_modules.cc:88: INFO: No module at 0x0
2012-09-16 02:48:06: basic_code_modules.cc:88: INFO: No module at 0x7fffbf45a5d8
2012-09-16 02:48:06: basic_code_modules.cc:88: INFO: No module at 0x100000000
2012-09-16 02:48:06: minidump_processor.cc:258: INFO: Processed /tmp/19b5df9c-6935-3923-125a8f20-21844c05.dmp
2012-09-16 02:48:06: minidump.cc:3752: INFO: Minidump closing minidump
Operating system: Linux
0.0.0 Linux 2.6.32-220.17.1.tb619.el6.x86_64 #1 SMP Fri Jun 8 13:48:13 CST 2012 x86_64
CPU: amd64
family 0 model 0 stepping 0
1 CPU

Crash reason:  SIGSEGV
Crash address: 0x0

Thread 0 (crashed)
0  test!crash [test.cc : 15 + 0x4]
rbx = 0x00007fffbf45a4b0   r12 = 0x00000000004015e0
r13 = 0x00007fffbf45a5d0   r14 = 0x0000000000000000
r15 = 0x0000000000000000   rip = 0x000000000040170d
rsp = 0x00007fffbf45a430   rbp = 0x00007fffbf45a430
Found by: given as instruction pointer in context
1  test!main [test.cc : 22 + 0x4]
rbx = 0x00007fffbf45a4b0   r12 = 0x00000000004015e0
r13 = 0x00007fffbf45a5d0   r14 = 0x0000000000000000
r15 = 0x0000000000000000   rip = 0x00000000004017fc
rsp = 0x00007fffbf45a440   rbp = 0x00007fffbf45a4f0
Found by: call frame info
2  libc-2.12.so + 0x1ec9c
rbx = 0x0000000000000000   r12 = 0x00000000004015e0
r13 = 0x00007fffbf45a5d0   r14 = 0x0000000000000000
r15 = 0x0000000000000000   rip = 0x000000388881ec9d
rsp = 0x00007fffbf45a500   rbp = 0x0000000000000000
Found by: call frame info
3  test!crash [test.cc : 16 + 0x1]
rip = 0x0000000000401715   rsp = 0x00007fffbf45a520
Found by: stack scanning

Loaded modules:
0x00400000 – 0x00410fff  test  ???  (main)
0x3888000000 – 0x388801ffff  ld-2.12.so  ???
0x3888800000 – 0x3888b8bfff  libc-2.12.so  ???
0x3888c00000 – 0x3888e18fff  libpthread-2.12.so  ???
0x3889400000 – 0x3889683fff  libm-2.12.so  ???
0x388b400000 – 0x388b615fff  libgcc_s-4.4.5-20110214.so.1  ???
0x388e400000 – 0x388e6f0fff  libstdc++.so.6.0.13  ???
0x7fffbf5ff000 – 0x7fffbf5fffff  linux-gate.so  ???

简单记录下,还在摸索阶段,下一步尝试将其合并到MySQL中,看看生成的core file大小是否可以接受。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 Oracle 关系型数据库
mysql存储过程调试方法
mysql存储过程调试方法
370 0
|
6小时前
|
关系型数据库 MySQL Java
IDEA+Mysql调试常见异常解决办法_kaic
IDEA+Mysql调试常见异常解决办法_kaic
|
12月前
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(2)
从零开始学习MySQL调试跟踪(2)
288 0
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(2)
从零开始学习MySQL调试跟踪(2)
116 0
|
SQL NoSQL 关系型数据库
从零开始学习MySQL调试跟踪(1)
从零开始学习MySQL调试跟踪(1)
318 0
|
存储 编解码 关系型数据库
案例分享:Qt工程机械真空激光焊接系统软件产品定制(西门子PLC,mysql数据库,用户权限控制,界面配置,参数定制,播放器,二维图标,rgv小车,期限控制,参数调试等)
基于Qt的真空焊接系统工程机械案例分享。1.ui由本司美工承担设计,显示分辨率1280 x 1024,同时支持鼠标操作。2.权限控制:三种权限,分为管理员(可以定制模块界面,修改产品名称等定制化软件和其他权限,同时具备编程员和操作员权限),编程员(新建工件,参数,调试功能等与生产相关的权限,同时具备操作员权限),操作员(加工相关的操作权限),三个等级对所有界面进行区分使用,并可进行管理;3.专家可增删改编程员,操作员;编程员可增删改操作员;4.与西门子PLC通讯,兼容S7全系,项目使用S7-1500...
案例分享:Qt工程机械真空激光焊接系统软件产品定制(西门子PLC,mysql数据库,用户权限控制,界面配置,参数定制,播放器,二维图标,rgv小车,期限控制,参数调试等)
|
NoSQL 关系型数据库 MySQL
|
存储 SQL Oracle
MYSQL存储过程调试过程
MYSQL存储过程调试过程
685 0
|
关系型数据库 MySQL 开发工具
Mac下使用Clion调试MySQL版本5.7源码
Mac下使用Clion调试MySQL版本5.7源码
167 0
Mac下使用Clion调试MySQL版本5.7源码
|
SQL NoSQL 关系型数据库
第29节:线程简介和MySQL调试环境搭建
最后我想简单说一下我的MySQL调试环境的搭建,但是在此之前不得不简单说一下什么是线程,因为如果不解释一下什么是线程,简单的调试可能都会有阻碍,同时了解线程对我们普通DBA诊断性能问题也有极大的帮助。
842 0