linux下Qt编程 使用Google Breakpad捕获异常的使用步骤

该文章详细介绍了如何在Linux系统中利用Breakpad工具进行崩溃日志分析。首先从GitHub下载并编译Breakpad,然后使用dump_syms生成符号文件,接着在.dmp文件同级目录创建symbols文件夹存放符号信息。通过minidump_stackwalk解析.dmp文件获取堆栈跟踪,并提供了一个shell脚本来自动化这个过程。
摘要由CSDN通过智能技术生成

1.先下载Breakpad1)下载breakpad: breakpad源码可在​ ​https://github.com/google/breakpad.git​​

2。需要将linux_syscall_support.h文件放在这个目录下



3. 编译
控制台cd breakpad 进入目录

运行指令 ./configure

运行指令 make 

运行指令 sudo make install

4.使用dump_syms 命令生成sym 。dump_syms CtrlSYS > CtrlSYS.sym//最好名字和程序一样

5.查看HEADER号,直接打开CtrlSYS.sym。

 6.在.dmp文件同级目录创建文件夹和文件,注意symbols里面的文件夹和应用程序名一样,位置如下:

 

7.使用 minidump_stackwalk 。minidump_stackwalk 9d86f79a-9362-400f-cae82c8e-50e14530.dmp ./symbols >000.txt

8.查看log

9.shell 脚本

#!/bin/bash

if [ $# != 2 ] ; then 
echo "USAGE: $0 EXE_NAME DMP_NAME" 
echo " e.g.: $0 test 3872B2CF-983B-4963-AFA9-C8534DFD4C44.dmp" 
exit 1; 
fi 

#get input param
exe_file_name=$1
dmp_file_name=$2

getSymbol() {
    
    dump_syms ./$exe_file_name > $exe_file_name'.sym'
    
}

getStackTrace() {
    
    sym_file_name=$exe_file_name'.sym'

    #get first line of $sym_file_name
    line1=`head -n1 $sym_file_name`
    
    #get version number from string of first line
    OIFS=$IFS; IFS=" "; set -- $line1; aa=$1;bb=$2;cc=$3;dd=$4; IFS=$OIFS 
    
    version_number=$dd

    #make standard dir and move *.sym in it
    mkdir -p ./symbols/$exe_file_name/$version_number
    mv $sym_file_name ./symbols/$exe_file_name/$version_number

    #print stack trace at a file
    minidump_stackwalk $dmp_file_name ./symbols 2>/dev/null >crashInfo.log
    
    #print crash information
    crashReason=`sed -n 9p ./crashInfo.log`
    echo $crashReason
    crashaddr=`sed -n 10p ./crashInfo.log`
    echo $crashaddr
    addrNum=${crashaddr:15:30}
    echo -n "Crash Location: Crash in "
    addr2line $addrNum -e $exe_file_name -f -p
}

main() {
    getSymbol 
    if [ $? == 0 ] 
    then 
        getStackTrace
    fi
    

}
main
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值