Linux下addr2line命令用法

2023-10-31

      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函数中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下addr2line命令用法 的相关文章

  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • Fortran gfortran linux 中的“分段错误(核心转储)”错误

    我正在创建一个程序 该程序将分析目录中的文件 fits 然后它将在另一个目录中创建另一个文件 txt 它只是一个转换器 当我尝试执行该程序 编译正常 时 它给了我一条错误消息 程序收到信号 SIGSEGV 分段错误 无效的内存引用 此错误的
  • 高效的内存屏障

    我有一个多线程应用程序 其中每个线程都有一个整数类型的变量 这些变量在程序执行期间递增 在代码中的某些点 线程将其计数变量与其他线程的计数变量进行比较 现在 我们知道在多核上运行的线程可能会无序执行 一个线程可能无法读取其他线程的预期计数器
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • 每个命令都返回“bash:<命令>:找不到命令...”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我刚刚安装了 Scala 并添加了路径gedit bashrc export SCALA HOME home avijit sca
  • 让 TeXstudio 在 linux mint 中工作:找不到文件“url.sty”。

    刚刚切换到 Linux Mint 以前的顽固 Windows 用户 我在尝试安装 TeXstudio 时遇到一些问题 Sudo apt get install texstudio 给了我一个正确的安装 至少 我是这么认为的 但是当我尝试构建
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • PyPI 上的轮子平台约束有什么限制吗?

    是否有任何地方 PEP 或其他地方 声明关于 Linux 轮子上传范围的限制 PyPI http pypi io 应该有 具体来说 上传是否被认为是可接受的做法linux x86 64轮子到 PyPI 而不是manylinux1 x86 6
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • C - 为什么我无法映射较小(256UL 或更小)的内存?

    请告诉我 为什么我的简单应用程序无法映射较小的内存 而且 为什么有这样一个特定的边界 257UL define MAP SIZE 256UL or below fail define MAP SIZE 257UL ok include
  • dlopen 或 dlclose 未调用信号处理程序

    我在随机时间内收到分段错误 我注册了信号 但发生分段错误时未调用信号处理程序 include

随机推荐

  • ‘执行力’

    执行力 执行力是一种能力 更是一种态度 很多时候 因为犹豫不决 导致很多不应该发生的事情发生了 从今天起 锻炼自己的执行能力 从生活中的的小事开始 起床铃声响起 不赖床 想到什么就去实践 结果如何那都是后话 如果都不去做 何来的结果
  • [C4W4] Convolutional Neural Networks - Special applications: Face recognition & Neural style transfe...

    第四周 Special applications Face recognition Neural style transfer 什么是人脸识别 What is face recognition 欢迎来到第四周 即这门课卷积神经网络课程的最后
  • javascript 获取 全部cookie(以对象形式返回)

    javascript 获取 cookie 以对象形式返回 建议定义全局变量cookie if document cookie var cookie eval document cookie replaceAll replaceAll els
  • linux vmstat io,Linux下vmstat调优工具的深入分析 (*****)

    vmstat procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 310596 24796 1437
  • mybatis概述及搭建

    目录 1 概述 2 mybatis搭建 1 创建一个maven项目 添加mybatis mysql所依赖的jar 2 创建一个数据库表 及对应的java类 3 创建一个mybatis的核心配置文件 配置数据库连接信息 配置sql映射文件 4
  • 【Unity-Cinemachine相机】相机跟随之Transposer属性

    相机跟随和瞄准行为 Transposer 虚拟相机将在某个固定的偏移或距离上跟随目标移动 上面的偏移量就是Follow Offset Binding Mode决定Follow Offset是目标本地坐标系下的身后十米还是世界坐标系下的身后十
  • apache druid学习之Processes and servers

    Processes and servers Apache Druid Process types Druid has several process types Coordinator Overlord Broker Historical
  • 获取代理服务器ip列表的方法

    开源项目 https github com SpiderClub haipproxy 看爬代理的网址列表应该是最多的 CRAWLER TASKS name mogumiao com resource http www mogumiao co
  • MongoDB下载安装教程

    MongoDB下载安装教程 1 下载 2 安装 3 启动mongoDB 3 1 在windows的任务管理器中启动mongoDB 3 2 双击mongo exe 启动mongodb 3 3 在此处输入命令 操作数据库 4 操作mongoDB
  • linux经典面试问题

    你在准备 Linux 面试吗 我们准备了一些常见的 Linux 面试问题及其答案 如果您是初学者 具有一定的 Linux 知识或获得认证 或具有专业的 Linux 管理经验 那么下面的问答有助于您准备面试 1 什么是Linux及基本组件 L
  • java.net.UnknownServiceException: CLEARTEXT communication to www.httpbin.org not permitted by networ

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 在Android9 0系统的手机上访问http的api 出现以下异常 java net UnknownServiceException
  • 理解RoIAlign实际操作

    我们的模型取一个大小为 512x512x3 宽度x高度x RGB 的图像输入 VGG16将其映射为一个 16x16x512的feature map 比例因子是 32 接下来 我们将使用其中一个proposed RoIs 145x200box
  • C++构造函数/析构函数 设置成private的原因

    将构造函数 析构函数声明为私有和保护的 那么对象如何创建 已经不能从外部调用构造函数了 但是对象必须被构造 应该如何解决 麻烦大家帮忙说明 关于构造 析构函数声明为私有和保护时的用法 提出这个问题 说明你已经对c 有所思考了 从语法上来讲
  • C++多线程之std::thread

    C 11 包含头文件 thread h 并使用命名空间std thread类提供的方法 方法 描述 thread 构造函数 在这里传入线程执行函数 和函数参数 get id 返回std thread id 这是一个类 可以间接得到unsig
  • 在centos7下docker 制作 java8镜像,上传到阿里云镜像仓库

    一 本地制作镜像 1 拉取centos4基础镜像 docker pull centos 7 创建目录 后面都在这个目录下操作 mkdir usr local docker app java projects java8 cd usr loc
  • vue 前端数据进行 RSA 加密、解密、签名、验签

    未整理完 关于加密 base64 加密是属于双向加密 就是加密后可以解密回来 MD5 是单向加密 就是加密后无法解密 MD5 加盐加密就是将 用户名 密码 进行MD5加密 类似都叫加盐 这里用户名就是盐值 支付宝的公钥私钥加密 公钥解密私钥
  • Intel Corporation SSD 750 Series 性能测试

    作者 QQ群 852283276 微信 arm80x86 微信公众号 青儿创客基地 B站 主页 https space bilibili com 208826118 机器 j2 j2 pc uname a Linux j2 pc 4 13
  • 【“码”上有你】智能合约库有奖征码第3期来袭

    智能合约库有奖征码 活动开展以来 伙伴们群策群力踊跃贡献 帮助夯实了合约库的基础功能 涌现了诸如共享经济 商品溯源等更多面向实际业务场景的合约样板 使得合约库更加满足开发者和行业多样化的诉求 为了让更多开发者参与到智能合约库组件优化中 拓展
  • 解析xml第二子节点

    import org w3c dom Document import org w3c dom Element import org w3c dom Node import org w3c dom NodeList import org xm
  • Linux下addr2line命令用法

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