Linux 命令之 addr2line
先上程序
#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;
}
首先执行:
ubuntu:~/CPPWorkSpace/BasicCPP$ g++ -g main.cpp -o main
输出中包含一个文件 main, 如下图所示:
然后过滤一下:
ubuntu:~/CPPWorkSpace/BasicCPP$ dmesg | grep main
得到结果:
[ 0.246864] PCI: MMCONFIG for domain 0000 [bus 00-7f] at [mem 0xf0000000-0xf7ffffff] (base 0xf0000000)
[ 0.332945] PCI: MMCONFIG for domain 0000 [bus 00-7f] at [mem 0xf0000000-0xf7ffffff] (base 0xf0000000)
[ 0.357689] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-7e])
[ 0.387227] iommu: Default domain type: Translated
[ 0.429714] NetLabel: domain hash size = 128
[ 1.182184] platform eisa.0: EISA: Cannot allocate resource for mainboard
[ 2.655487] intel_rapl_common: Found RAPL domain package
[ 2.655489] intel_rapl_common: Found RAPL domain core
[ 2.655489] intel_rapl_common: Found RAPL domain uncore
[ 2.655491] intel_rapl_common: Found RAPL domain dram
[ 7860.005797] traps: main[4727] trap divide error ip:55d8fcb1a6d8 sp:7ffd1c2168a0 error:0 in main[55d8fcb1a000+1000]
注意IP 字段符号,代表的是出错的位置地址
当前的执行环境是Ubuntu18.04 ,其实地址有偏移 ,所以要做作差
IP 地址减去后面的方框中地址,得到最终位置地址
55d8fcb1a6d8 — 55d8fcb1a000 = 6d8 (注意是十六进制)
所以写法为:0x6d8
ubuntu:~/CPPWorkSpace/BasicCPP$ addr2line -e main 0x6d8 -f -a -p -C
最终定位到如下的行数
0x00000000000006d8: divide(int, int) at /home/mi/CPPWorkSpace/BasicCPP/main.cpp:4
定位到函数和对应的行数
Linux 命令之 addr2line相关推荐
- Linux命令大全,从A到Z,2023年收藏大吉!
本文为Linux命令大全,从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺! A 命令 描述 access 用于检查调用程序是否可以访问指定的文件,用于检查文件是否存在 accton 用于打开或关 ...
- linux 命令中英文对照,收集
linux 命令英文全文 Is Linux CLI case-sensitive? The answer is, yes. If you try to run LS instead of ls, it ...
- Linux命令大全,从A到Z都有总结,封神之作!
本文为Linux命令大全,从A到Z都有总结,建议大家收藏以便查用,或者查漏补缺! A 命令 描述 access 用于检查调用程序是否可以访问指定的文件,用于检查文件是否存在 accton 用于打开或关 ...
- 作为一个java程序员,常用的linux命令(越攒越多)
本篇记录我在工作中不断遇到的常用的linux命令,并进行总结,时常更新! 1. 升级服务时先停止服务,然后进行替换 linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 netstat ...
- Linux命令行与命令
Linux命令行与命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的命令是很重要的工具,也往往是初学者最大的瓶颈. ...
- sed linux 命令
sed linux 命令 1. Sed简介 2. 定址 3. Sed命令 4. 选项 5. 元字符集 6. 实例 7. 脚本 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把 ...
- linux 命令行叫dos,利用shell编程实现DOS风格的Linux命令行
如果你是习惯于Windows命令提示符的IT人,当你第一次使用Linux命令行时,一定会感到无所适从.你所熟悉的DOS命令再Linux中基本不存在.摆在你面前的是一大堆要记背的命令. 一种替代方案是利 ...
- linux 命令删除命令,Linux 命令之删除命令
在Linux下删除文件用rm命令,具体用法如下: rm [选项] 文件 选项说明: -f -force 忽略不存在的文件,强制删除,无任何提示 -i --interactive 进行交互式地删除 -r ...
- 你知道吗?Linux命令竟如此简单!
你知道吗?Linux命令竟如此简单! 我Linux安完了,如何快速入门? 1.进入终端 2.好了,入门完了 咳 咳 开个玩笑 2.1查看磁盘容量 2.2新建 2.3查看&删除 2.5解压&am ...
最新文章
- Windows核心编程 第五章 作业(上)
- windoes windoes server 上安装mysql(MSI安装包安装、压缩包安装)
- 怎么设置tomcat管理员的用户名和密码
- tensorflow log 日志级别设置
- everything搭配什么软件_带你飞起来的好工具Everything,极速找到你所要的文件
- html5跟html4有什么区别,Html5和Html4的区别
- 前端开发-跨浏览器测试工具
- 300+篇CVPR 2020代码开源的论文(转载)
- JanusGraph学习笔记
- linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
- 04/31Day 孤尽训练营笔记分享
- .xyz让域名应用充满艺术感
- Linux tty串口测试程序
- Linux下磁盘常见错误分析与检测工具使用
- 如何设置IIS中的HTTPS服务
- java1.8 lamda表达式
- 力扣动态规划入门21天刷题计划(共计46题)
- 黑马python之旅01
- 比较全面的随机森林算法总结
- 新手教学看eMule 0.50a Xtreme 8.0设置