Linux下addr2line命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息(-g)的执行程序出现crash时(core dumped),可使用addr2line命令快速定位出错的位置。

如果无法确定文件名或函数名,addr2line将在它们的位置打印两个问号;如果无法确定行号,addr2line将打印0或一个问号。

参数说明:

(1).-a:在函数名、文件名和行号信息之前,以十六进制形式显示地址。

(2).-b:指定目标文件的格式为bfdname。

(3).-C:将低级别的符号名解码为用户级别的名字。

(4).-e:指定需要转换地址的可执行文件名,默认文件是a.out。

(5).-f:在显示文件名、行号信息的同时显示函数名。

(6).-s:仅显示每个文件名(the base of each file name)去除目录名。

(7).-i:如果需要转换的地址是一个内联函数,则还将打印返回第一个非内联函数的信息。

(8).-j:读取指定section的偏移而不是绝对地址。

(9).-p:使打印更加人性化:每个地址(location)的信息都打印在一行上。

(10).-r:启用或禁用递归量限制。

(11).--help:打印帮助信息。

(12).--version:打印版本号。

dmesg命令:全称为display message,用来显示Linux内核环形缓冲区信息。

测试代码main.cpp如下:

#include <stdio.h>int divide(int a, int b)
{return a/b;
}int main()
{fprintf(stdout, "input value\n");int a = 3, b = 0;int div = divide(a, b);fprintf(stdout, "div value: %d\n", div);return 0;
}

在终端输入以下命令:注意不要忘记-g,否则在使用addr2line命令时无法显示文件名和行号

g++ -g main.cpp -o main

执行main,输出结果如下:

通过dmesg命令查看系统日志的错误信息,结果如下:其中ip字段后面的数字4005c4就是main程序出错时所执行的位置

通过addr2line命令将地址4005c4转换定位到代码中出错的位置,命令及执行结果如下:可见crash的地方在main.cpp文件的第5行,在divide函数中

Linux下addr2line命令用法相关推荐

  1. Linux下find命令用法详解

    Linux下find命令用法详解 学神VIP烟火 学神IT教育:XueGod-IT 最负责任的线上直播教育平台 本文作者为VIP学员 烟火 第一部分:根据文件名查找 1.在当前目录查找名称为test的 ...

  2. Linux 下 strace 命令用法总结

    Linux 下 strace 命令用法总结 1 功能说明 strace 命令是一种强大的工具, 能够显示任何由用户空间程式发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. str ...

  3. linux下find命令用法

    一.Linux中find常见用法示例 ·find    path    -option    [    -print ]    [ -exec    -ok    command ]    {} /; ...

  4. linux find ok用法,linux下find命令用法

    一.Linux中find常見用法示例·find    path    -option    [    -print ]    [ -exec    -ok    command ]    {} /; ...

  5. C语言再学习 -- Linux下find命令用法

    参看:linux下find(文件查找)命令的用法总结 linux下查找文件的命令有两个:locate 和 find 首先说一下locate: 这个命名是对其生成的数据库进行遍历(生成数据库的命令:uo ...

  6. Linux下diff命令用法详解

    大家好,我是良许. 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点.在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也 ...

  7. linux下rename命令用法详解(重命名文件)

    本文介绍了linux系统中rename命令的用法,用来修改文件名.重命名文件,批量重命名文件rename是最好的选择,需要的朋友参考下. 在linux系统中重命名文件,经常用到mv命令,批量重命名文件 ...

  8. linux expr3 4,Linux下expr命令用法

    expr命令详解 字串长度 # expr length "this is a test" 14 数字求商数 # expr 14 % 9 5 从位置处抓取字串 # expr subs ...

  9. Linux下dislocate命令用法,在 Linux 中遨游手册页的海洋 | Linux 中国

    原标题:在 Linux 中遨游手册页的海洋 | Linux 中国 Linux 系统上的手册页可以做的不仅仅是提供特定命令的信息.它们可以帮助你发现你没有意识到的命令. https://linux.cn ...

最新文章

  1. pytorch ctcloss 参数详解
  2. C++中getline()的用法
  3. 选择排序_在N + 1场景中,使用@NamedEntityGraph更有选择地加载JPA实体
  4. helm3 push/pull安装使用细节及添加国内仓库
  5. 面向对象的软件工程应用浅研
  6. 用set和shopt设置bash选项
  7. 利用Jquery处理跨域请求
  8. 扩展欧几里得求解ax+by=c的特殊解(模板)
  9. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作
  10. hadoop之 hadoop日志存放路径
  11. MPU6050的运动中断应用
  12. LeetCode 股票问题买股票最佳时机ⅠⅡⅢⅣ 含手续费含冷冻期
  13. 阿里云用域名、ip访问不了网站
  14. Photoshop CC 2017安装
  15. fcntl设置FD_CLOEXEC
  16. 百度网盘下载软件(10+m)
  17. 思维导图怎么画简单好看的直观技巧
  18. apollo学习之---基础知识点学习(1)commen_math
  19. 谷爱凌母亲 24 年前重磅采访:远见卓识的人,可以改变世界
  20. LVS 负载均衡服务器搭建(详细)

热门文章

  1. sklearn 朴素贝叶斯分类示例
  2. Linux那些事儿 之 戏说USB(33)字符串描述符
  3. Opencv-python 图像处理基础知识
  4. TensorFlow(7)卷积神经网络实战(1)(可视化)
  5. python廖雪峰_【Python】python中实现多进程与多线程
  6. DSP-SLAM:具有深度形状先验的面向对象SLAM
  7. c++ make_pairpair
  8. 元宇宙:基础-虚拟现实栈开发和虚拟土地
  9. Qt pro文件下跨平台宏的使用(windows/linux 以及x86 和 arm的区分)
  10. reboot 百度网盘资源