linux下addr2line命令实战

  • linux下addr2line命令实战已关闭评论
  • 587 views
  • A+
所属分类:未分类

实例一:

通过系统日志查询定位错误位置

首先,我们建立一个addr2line.c,内容如下:

[root@xubo ~]# more addr2line.c 
#include<stdio.h>

int main(void)
{
 char *str="hello baiked.com";
 str[0]='h';
 return 0;
}

通过gcc编译测试代码,注意需要增加-g选项,不然没有调试信息。

命令如下:

gcc addr2line.c -g -o addr2linetest

执行完成后,会产生addr2linetest文件,如下:

[root@xubo ~]# ls
addr2line.c addr2linetest

然后,我们运行addr2linetest ,如下:

[root@xubo ~]# ./addr2linetest 
段错误

然后我们通过查看使用dmesg日志进行跟踪,如下:

[root@xubo ~]# dmesg|tail
[ 10.562389] sr 1:0:0:0: Attached scsi generic sg1 type 5
[ 13.357285] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 13.419695] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[ 13.496213] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 13.747794] Ebtables v2.0 registered
[ 13.793730] Bridge firewalling registered
[ 15.723660] IPv6: ADDRCONF(NETDEV_UP): eno16777736: link is not ready
[ 15.724611] e1000: eno16777736 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[ 15.725467] IPv6: ADDRCONF(NETDEV_CHANGE): eno16777736: link becomes ready
[ 807.709510] addr2linetest[2631]: segfault at 4005a0 ip 0000000000400500 sp 00007fff80f196c0 error 7 in addr2linetest[400000+1000]

注意看红色标记的部分,addr2linetest执行文件的描述:segfault(段错误)ip为400500这就是程序执行出错的位置。这时,我们就可以用addr2line命令来定位问题程序的位置了,命令如下:

addr2line -e addr2linetest 400500

结果如下:

[root@xubo ~]# addr2line -e addr2linetest 400500
/root/addr2line.c:6

然后我们看看源文件,如下:

 

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5 char *str="hello baiked.com";
 6 str[0]='h';
 7 return 0;
 8 }

这样的话,addr2line就可以准确的定位出程序出错的位置。

实例二:

自定义地址找到函数位置

首先,我们建立一个addr2line.c,内容如下:

[root@xubo ~]# vi addr2line.c

#include<stdio.h>

void baiked ()
{
 printf("baiked() address is %p!\n",baiked);
}
int main(void)
{
baiked();
return 0;
}

这里我们将baiked函数的地址自己打印出来了,编译后,云运行如下:

[root@xubo ~]# gcc addr2line.c -g -o addr2linetest
[root@xubo ~]# ./addr2linetest 
baiked() address is 0x400530!

然后用addr2line通过打印出来的400530定位baiked函数的位置,命令如下:

 addr2line -e addr2linetest 400530 -f

结果如下:

baiked
/root/addr2line.c:4

 

  • 安卓客户端下载
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar