`
tcspecial
  • 浏览: 896187 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

linux addr2line

    博客分类:
  • OS
阅读更多

 

    addr2line 命令可以在程序core时,提供一种辅助手段定位程序问题。

 

   下面演示除零错误:

#include <stdio.h>

int main(int argc, char **argv)
{
	int x = 10;
	int y = 0;
	printf("%d/%d=%d\n", x, y, x/y);
	return 0;
}

 

    程序执行后立即退出,可查看系统dmesg日志:

$ ./test
Floating point exception (core dumped)
$ dmesg
[15222401.075980] traps: test[26231] trap divide error ip:400611 sp:7ffcdb1f0290 error:0 in test[400000+1000]
$ addr2line -e test 400611
/data/home/kanesun/test/test.c:7

 

    addr2line显示第7行除零错误。程序需要加-g编译debug版本才行,否则命令无法显示行:??:?,因为addr2line是通过查找调试信息定位到行的。

    DWARF(Debugging With Attributed Record Formats)调试格式记录了程序调试信息,其中.debug_line记录了程序地址与源代码行对应关系。

 

$ readelf -w test
 Line Number Statements:
  Extended opcode 2: set Address to 0x4005f0
  Special opcode 8: advance Address by 0 to 0x4005f0 and Line by 3 to 4
  Special opcode 216: advance Address by 15 to 0x4005ff and Line by 1 to 5
  Special opcode 104: advance Address by 7 to 0x400606 and Line by 1 to 6
  Special opcode 104: advance Address by 7 to 0x40060d and Line by 1 to 7
  Advance PC by constant 17 to 0x40061e
  Special opcode 216: advance Address by 15 to 0x40062d and Line by 1 to 8
  Special opcode 76: advance Address by 5 to 0x400632 and Line by 1 to 9

 

   二进制编码从0x4005ff开始,0x40062d对应第8行,则0x400611对应第7行。

 

 

    线上监控发现程序有重启,但是没有开启coredump,查看dmesg,发现有打印:

[2157427.236306] traps: flowmonitor[158426] general protection ip:409445 sp:7f519cb3d450 error:0 in flowmonitor[400000+be000]\

addr2line -e flowmonitor 409445
/usr/include/c++/4.8.2/bits/stl_list.h:235

 

 查看stl源码:

 _List_const_iterator(const iterator& __x)
      : _M_node(__x._M_node) { }

_Self&
operator++()
{
_M_node = _M_node->_M_next;    // 出错行
return *this;
}

    获取list const迭代器下一个节点时出错,可能是该迭代器被清除了,直接访问下一个node会出错。 可是flowmonitor 程序中没有操作std::list 的常量迭代器,发现依赖的rdkafka 接口有std::list 使用,此时通过lsof查看程序的网络连接,发现只有一个连接,与运营同学沟通发现果然是kafka集群出问题了。 addr2line 提供了线上排障提供更多的一个选择。

 

 

 

 

 

分享到:
评论

相关推荐

    addr2line.zip

    一个so库源码定位工具,可以根据so库中报错的指令地址,反推导出源码的位置 解压后,将文件夹里面的so库替换成自己的,将bat里面的地址替换成自己的即可

    arm-linux-androideabi-addr2line

    arm-linux-androideabi-addr2line.exe -e libunity.sym.so -C -p -i -s -f 00111088

    aarch64-linux-android-4.9

    android linux交叉编译工具aarch64-linux-android-4.9版本!需要的可以下载!

    linux-binutils

    addr2line用于得到程序地址所对应源代码的文件名和行号以及所对应的函数。  ar用于创建、修改档案文件(比如.a静态库文件)以及从档案文件中抽取文件(比如从.a静态库中抽取.o文件)。  nm用于列出目标文件、...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    全志R16平台编译linux系统V1.0.txt 2017/4/11 13:36 (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar...

    windows dos环境下直接运行linux命令集合

    addr2line.exe gzip.exe run.exe alternatives.exe head.exe runcon.exe ar.exe hostid.exe rxvt.exe arch.exe hostname.exe scp.exe as.exe hpftodit.exe sdiff.exe ascii.exe i686-pc-cygwin-gcc-3.4.4.exe sed....

    binutils-2.21.1-mips32r1-linux-static.tar.gz

    addr2line-将地址转换为文件名和行号。 ar-用于创建,修改和提取档案的实用程序。 c ++ filt-过滤以解编码编码的C ++符号。 dlltool-创建用于构建和使用DLL的文件。 gold-一个新的,更快的,仅ELF的链接器,仍...

    Oracle RAC with linux 5.3 安装

    # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 #注:红色文字处...

    binutils-2.25.1.tar.gz

    GNU binutils是一组二进制工具集。包括:addr2line ar gprof nm objcopy objdump ranlib size strings strip

    rac实施过程(linux)

    # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 211.152.14.110 rac01 211.152.14.210 vip01 211.152.14....

    入门学习Linux常用必会60个命令实例详解doc/txt

    举例而言,如要挂载下列5个设备,其执行指令可能如下 (假设都是Linux的ext2系统,如果是Windows XX请将ext2改成vfat): 软盘 ===&gt;mount -t ext2 /dev/fd0 /mnt/floppy cdrom ===&gt;mount -t iso9660 /dev/hdc /mnt/...

    全志A80平台固定以太网的MAC地址ethernet_a80_merrii_20151203_1607.7z

    2015/12/2 17:13 get_chip_id/buf2=%s sizeof(buf2)=%d\n", __FILE__, __LINE__, __func__, buf2, sizeof(buf2)); // strcat(d,s); // strcat(path, buf2); strncat(path, buf2, 17); strcat(path, "\"...

    linuxdeveloptip

    Linux 内核和驱动程序开发技巧从恐慌呼叫跟踪中获取源代码行 Oct 20 19:21:32 hubert kernel: Call Trace:Oct 20 19:21:32 hubert kernel: ...从内核地址获取源代码行 $ addr2line -e ./vmlinux 0xc01cf0d1/mnt/linux-

    SimIt-ARM-3.0 ARM指令模拟器

    -rw-rw-r-- 1 root root 8699904 Aug 20 08:30 SimIt-ARM-3.0-linux_images.tar.bz2 [root@ORA9 root]# tar jxvf SimIt-ARM-3.0-linux_images.tar.bz2 linux_images/ linux_images/sa1100/ linux_images/sa1100/...

    cameratest12_grab_20161101_1440.tar.gz

    R:\wyb\ov5640_parrot_r16_tinav2.0\package\allwinner\cameratest\src\videodev2.h 5.CSI接口的摄像头,用文工提供的方法,可以看到图片,但是我们仍然调用不了。因为文工提供的方法是Camera Test,我们仍然希望...

    ELDK使用与开发手册

    set line /dev/ttyS0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5 这个...

    JLink_Windows_V648.zip

    Added flash programming support for AmbiqMicro's AMA2B1KK (Apollo2 Blue; AMA2BEVB). Added flash programming support for AmbiqMicro's AMA2B1KK (Apollo2 Blue; AMA2BEVB). Added unlocking support for ...

    uboott移植实验手册及技术文档

    4、交叉编译器 arm-softfloat-linux-gnu-gcc-3.4.5 【实验步骤】 一、建立自己的平台类型 (1)解压文件 #tar jxvf u-boot-1.3.1.tar.bz2 (2)进入 U-Boot源码目录 #cd u-boot-1.3.1 (3)创建自己的开发板...

    thl_r16_tinav2.0_hm1375验证通过_增加打印设备ID_20170824_1447.7z

    dev-&gt;dev_act[input_num].addr = (unsigned short)(dev-&gt;ccm_cfg[input_num]-&gt;act_slave&gt;&gt;1); strcpy(dev-&gt;dev_act[input_num].type,dev-&gt;ccm_cfg[input_num]-&gt;act_name); if(vfe_actuator_subdev_register...

    hm1375_tinav2.1验证通过_增加设备ID的读取显示_20170825_1333没有外层目录.7z

    2¡¢ R:\wyb\thl_r16_tinav2.0_hm1375\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\Makefile EXTRA_LDFLAGS += --strip-debug ifneq ($(strip $(CONFIG_ARCH_SUN8IW8)),) obj-$(CONFIG_OV2710_MIPI)+=...

Global site tag (gtag.js) - Google Analytics