zoukankan      html  css  js  c++  java
  • linux程序调试命令addr2line之入门简单介绍(本文先不聊gdb调试)

           addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置。

    以下, 我们来看看这个简单的代码:

    #include <stdio.h>
    
    int main()
    {
            int *p = NULL;
            *p = 0;
    
            printf("bad
    ");
            return 0;
    }
    
           这个程序非常小, 我们能够一眼就看出程序在执行期出错。 可是, 假设是大程序, 在执行期出错。 我们该怎样定位呢?  那就必须依赖于工具。 而不是你我的肉眼。


           我们以上述小程序为例, 进行例如以下操作:

    [taoge@localhost learn_c]$ gcc -o taogeSeg -g taogeSeg.c 
    [taoge@localhost learn_c]$ ./taogeSeg 
    Segmentation fault (core dumped)
    [taoge@localhost learn_c]$ dmesg | grep taogeSeg
    taogeSeg[4941]: segfault at 0 ip 080483c9 sp bfb92410 error 6 in taogeSeg[8048000+1000]
    [taoge@localhost learn_c]$ addr2line -e taogeSeg 080483c9
    /home/taoge/Desktop/learn_c/taogeSeg.c:6
    [taoge@localhost learn_c]$ cat -n taogeSeg.c
         1	#include <stdio.h>
         2	
         3	int main()
         4	{
         5		int *p = NULL;
         6		*p = 0;
         7	
         8		printf("bad
    ");
         9		return 0;
        10	}
    [taoge@localhost learn_c]$ 

           我来解释一下:

           1. gcc -o taogeSeg -g taogeSeg.c :生成带有调试信息的可运行文件taogeSeg
           2. dmesg | grep taogeSeg :获得运行taogeSeg后的出错信息, 你能够将结果理解为日志, 当中的080483c9是一个地址, 正是这个地址出错了
           3. addr2line -e taogeSeg 080483c9 :将出错地址转换成源码相应的行, 结果为6, 也就是说源码第6行有问题。 一看, 果然是,万恶的*p=0;被揪出来了

           当然。 针对这个样例, 会gdb调试的朋友肯定也能调试出来,并且也确实能找到代码出错的地址和源码行, 从这个意义上来讲。 gdb内部也携带了类addr2line的功能。这是不是说gdb就能够替代addr2line呢? 不是的。

    假设某bug低概率发生。 如今仅仅有一份crash log, 那就要用addr2line了, 由于你用gdb时。 该bug不一定发生啊。


        
           实际上, 在非常多linux大型软件开发中, 常常出现段错误, 造成进程挂掉, 系统崩溃等问题, 此时, 用addr2line是比較好的方法。

    在后面的博文中, 我们会继续了解与addr2line有关的调试方法, 毕竟, 代码调试太重要了。事实上呢, 假设不熟悉addr2line的使用, 或者干脆没有听说过这个命令, 那最好不要说自己搞linux开发。 免得被人歧视啊。 



           OK, 本文仅仅是一个引子, 能在实战中熟练使用addr2line才见真功夫。

    如能熟练掌握addr2line的使用。 以后听到什么段错误, 系统崩溃。 就没那么毛骨悚然了。


         



  • 相关阅读:
    在三层开发的DAL层中, 从web.config中读取数据库的连接字符串的方法
    [转]使用 DataAdapter 执行批量更新
    各式各样的 ICONS
    20个“标准的”配色方案
    一款 FORM 框报错提示 Demo
    超漂亮的仿腾讯弹出层效果
    POJ 2192 (DP)
    POJ 2063 (DP)
    POJ 3624 (DP)
    JavaScript技巧集
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6717780.html
Copyright © 2011-2022 走看看