addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置。
以下, 我们来看看这个简单的代码:
#include <stdio.h> int main() { int *p = NULL; *p = 0; printf("bad\n"); 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\n"); 9 return 0; 10 } [taoge@localhost learn_c]$
我来解释一下:
假设某bug低概率发生。 如今仅仅有一份crash log, 那就要用addr2line了, 由于你用gdb时。 该bug不一定发生啊。
在后面的博文中, 我们会继续了解与addr2line有关的调试方法, 毕竟, 代码调试太重要了。事实上呢, 假设不熟悉addr2line的使用, 或者干脆没有听说过这个命令, 那最好不要说自己搞linux开发。 免得被人歧视啊。
如能熟练掌握addr2line的使用。 以后听到什么段错误, 系统崩溃。 就没那么毛骨悚然了。
linux程序调试命令addr2line之入门简单介绍(本文先不聊gdb调试)
原文:http://www.cnblogs.com/zhchoutai/p/6717780.html