dmesg + addr2line查看堆栈错误位置
作者:互联网
Linux dmesg命令用于显示开机信息。
kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
语法
dmesg [-cn][-s <缓冲区大小>]
参数说明:
- -c 显示信息后,清除ring buffer中的内容。
- -s<缓冲区大小> 预设置为8196,刚好等于ring buffer的大小。
- -n 设置记录信息的层级。
dmesg + addr2line 查看core dump之后出错堆栈的地址:
首先先产生一个错误,代码如下:
1 #include <stdio.h> 2 3 int main(void) 4 { 5 char *str = NULL; 6 7 *str = 0; 8 9 return 0; 10 }
编译代码并执行:
gcc -g main.c // 编译的时候要加-g,添加调试信息 ./a.out
出现以下错误:
Segmentation fault
使用dmesg查看错误堆栈地址:
# dmesg | grep a.out [87995.723791] a.out[9405]: segfault at 0 ip 00000000004004dd sp 00007fff994faa90 error 6 in a.out[400000+1000]
使用addr2line查找问题出处:
# addr2line -e a.out 00000000004004dd // -e 指定执行程序文件 /root/misc/main.c:7 // 说明问题出自main.c文件中的第7行
标签:dmesg,查看,开机,堆栈,addr2line,main,out 来源: https://www.cnblogs.com/coolYuan/p/13091859.html