zoukankan      html  css  js  c++  java
  • 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行
  • 相关阅读:
    索引
    排序---冒泡排序、快速排序、选择排序、插入排序、希尔排序
    设计模式6大原则
    InputStream的read()读取机制
    Java中的关键字---native
    Java中的关键字---static
    Java中的关键字---transient
    负载均理解
    2020-03-29 微服务网关GateWay
    2020-03-28 微服务网关Zuul
  • 原文地址:https://www.cnblogs.com/coolYuan/p/13091859.html
Copyright © 2011-2022 走看看