linux内核addr2line,linux内核调试技巧之addr2line
addr2line⼯具是⼀个可以将指令的地址和可执⾏影像转换为⽂件名,函数名和源代码⾏数的⼯具。这在内核执⾏过程中出现崩溃时,可⽤于快速定位出出错的位置,进⽽出代码的bug。
⽤法
addr2line [-a| --addresses ] [-b bfdname | --target=bfdname] [-C | --demangle[=style]] [-e filename | --exe=filename] [-f | --function] [-s | --basename] [-i | --inlines] [-p | --pretty-print] [-j | --section=name] [-H | --help] [-V | --version] [addr addr ...]
参数解释
-a / --addresses:在函数名、⽂件和⾏号信息之前,显⽰地址,以⼗六进制形式。
-b bfdname / --target=bfdname : 指定⽬标⽂件的格式为bfdname。
-c / --demangle:将低级别的符号名解码为⽤户级别的名字。
-e filename / --exe=filename:指定需要转换地址的可执⾏⽂件名。
-
f / --function :在显⽰⽂件名、⾏号输出信息的同时显⽰函数名信息。
-s / --basenames :仅仅显⽰每个⽂件名的基址。
-i / --inlines : 如果需要转换的地址是⼀个内联函数,则输出的信息包括其最近范围内的⼀个⾮内联函数的信息。
-j / --section :给出的地址代表指定section的偏移,⽽⾮绝对地址。
-p / --pretty-print :使得该函数的输出信息更加⼈性化:每⼀个地址的信息占⼀⾏。
说明
addr2line 有两种操作模式:1)⼗六进制地址在命令⾏中指定;2)⼗六进制地址通过标准输⼊指定(还没⽤过)
在android中addr2line⼯具,⼀般是arm-linux-androideabi-addr2line(针对arm平台)。
例⼦
以下是编写的⼀个⼩例⼦,⽤来展⽰如何使⽤addr2line。
源代码
#include
int add(int a, int b)
{
return a+b;
}
void main()
{
int sum[10] = {0};
int i;
int array1[10] = {48, 56, 77, 33, 33, 11, 226, 544, 78, 90};
int array2[10] = {85, 99, 66, 0x199, 393, 11, 1, 2, 3, 4};
for (i=0; i<10;i++) {
sum[i] = add(array1[i], array2[i]);
execl函数 linux}
}
编译命令
gcc -Wl,-Map=gdb_example.map -g -o gdb_example gdb_example.c
查main函数的地址
grep main ./ gdb_example.map
定位
addr2line 0x0000000000400501 -e gdb_example
【转】linux内核调试技巧之⼀ dump_stack
linux内核调试技巧之⼀ dump_stack【转】
在内核中代码调⽤过程难以跟踪,上下⽂关系复杂,确实让⼈头痛 调⽤dump_stack()就会打印当前cpu的堆栈的调⽤函数了. 如此,⼀⽬了然的就能看到当前上下⽂环境,调⽤关系了 假设: 遇到uvc_ ...
Linux内核调试⽅法总结【转】
linux内核调试指南
linux内核调试指南 ⼀些前⾔ 作者前⾔ 知识从哪⾥来 为什么撰写本⽂档 为什么需要汇编级调试 ***第⼀部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...
【转】Linux内核调试⽅法总结
⽬录[-] ⼀  调试前的准备 ⼆  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原⼦操作 四  引发bug并打印信息 1  BUG()和
BUG_ON() 2  dump_sta ...
Linux内核调试⽅法总结
Linux内核调试⽅法总结 ⼀  调试前的准备 ⼆  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原⼦操作 四  引发bug并打印信息1  BUG()和BUG_ON() 2  ...
Linux Kernel - Debug Guide (Linux内核调试指南 )
Linux内核调试的⽅式以及⼯具集锦【转】
Linux内核调试的⽅式以及⼯具集锦
随机推荐
php 应⽤ cpu 100% 调试⽅法
出进程占⽤cpu⾼的原因. 进程占⽤cpu⾼,⼀般是由于进程长时间占⽤cpu,⼜没有主动释放占⽤.如果想主动释放cpu,可以调⽤sleep.在写程序的时候,尤其要注意while 等循环的地⽅. 出 ...
(转载)C++lambda表达式
SQL Server ⾃学笔记
--★★★SQL语句本⾝区分⼤⼩写吗 --SQLServer 不区分⼤⼩写 --Oracle 默认是区分⼤⼩写的 --datetime的输⼊格式,2008-01-07输⼊进去后显⽰为1905-06-2 ...
WCF技术剖析之⼆⼗四: ServiceDebugBehavior服务⾏为是如何实现异常的传播的?
原⽂:WCF技术剖析之⼆⼗四: ServiceDebugBehavior服务⾏为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...
Jenkins环境集成第⼀弹
1. 起因 策划经常过来让我打包给他们测试,过于频繁影响到了⾃⼰的进度,决定弄⼀个打包⼯具让他们⾃⼰打包,在⽹上搜索了⼀下貌似有⼏个⽐较成熟的⼯具,Travis,Jenkins等等. 在⽹上也搜索到了 ...
python web开发之django
上⼀篇介绍了python-web.py的开发,本节课我们详细说明django的开发与使⽤. 简介及可以学习到的内容: 1.Python下有许多款不同的Web 框架.Django是重量级选⼿中最有代表 ...
Impala中的代码⽣成技术
Cloudera Impala是⼀种为Hadoop⽣态系统打造的开源MPP(massive parallel processing)数据库,它主要为分析型查询负载⽽设计,⽽⾮OLTP.Impala能最 ...
Excel 将A表的基础数据拼接到B表中来-三种⽅法: ctrl&plus;回车, VLOOKUP(&rpar;函数,宏
A表  基础信息表 B表 业务信息表 将a表中的基础数据 拼接到B表的后⾯, 应⽤场景是: B表很多数据,很繁乱,名字不⼀定全, A表也是⽐较多的⾏,B表乱:⽐如有8⾏有李晨的,却只有3⾏是范仲淹的, ...
XE6⼊门(⼆)项⽬中的⽂件
XE6中项⽬⽂件为DPR,查看⽅法请参考⼀下以前写过的博⽂: "Delphi项⽬构成之项⽬⽂件DPR" 项⽬⽂件DPR 通过主菜单[Project | View Source],就 ...
e1087. try/catch语句
The try/catch statement encloses some code and is used to handle errors and exceptions that might oc ...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。