首页 > 其他 > 详细

dmesg + addr2line查看堆栈错误位置

时间:2020-06-11 11:32:57      阅读:103      评论:0      收藏:0      [点我收藏+]

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查看堆栈错误位置

原文:https://www.cnblogs.com/coolYuan/p/13091859.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!