linux 内核 addr2line,linux内核调试技巧之addr2line

linux 内核 addr2line,linux内核调试技巧之addr2lineaddr2line 工具是一个可以将指令的地址和可执行影像转换为文件名 函数名和源代码行数的工具 这在内核执行过程中出现崩溃时 可用于快速定位出出错的位置 进而找出代码的 bug 用法 addr2line a addresses bbfdname target bfdname C demangle style efilename exe fi

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]);

}

}

编译命令

gcc -Wl,-Map=gdb_example.map -g -o gdb_example gdb_example.c

查找main函数的地址

grep main ./ gdb_example.map

54a42bf9c016bab190b5784079cb7473.png

定位

addr2line 0x0000000000 -e gdb_example

269422e0dd625c8de9f52fc728a4925d.png

【转】linux内核调试技巧之一 dump_stack

原文网址:http://blog.csdn.net/dragon/article/details/ 在内核中代码调用过程难以跟踪,上下文关系复杂,确实让人头痛 调用dump_ …

linux内核调试技巧之一 dump_stack【转】

在内核中代码调用过程难以跟踪,上下文关系复杂,确实让人头痛 调用dump_stack()就会打印当前cpu的堆栈的调用函数了. 如此,一目了然的就能看到当前上下文环境,调用关系了 假设: 遇到uvc_ …

Linux内核调试方法总结【转】

转自:http://my.oschina.net/fgq611/blog/ 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 …

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内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/ linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 …

Linux内核调试的方式以及工具集锦【转】

转自:https://blog.csdn.net/gatieme/article/details/ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 …

Linux内核调试的方式以及工具集锦

原文:https://blog.csdn.net/gatieme/article/details/ CSDN GitHubLinux内核调试的方式以及工具集锦 LDD-LinuxDev …

随机推荐

php 应用 cpu 100% 调试方法

找出进程占用cpu高的原因. 进程占用cpu高,一般是由于进程长时间占用cpu,又没有主动释放占用.如果想主动释放cpu,可以调用sleep.在写程序的时候,尤其要注意while 等循环的地方. 找出 …

(转载)C++lambda表达式

(转载)http://www.cnblogs.com/L-hq815/archive/2012/08/23/2653002.html lambda表达式 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+回车, VLOOKUP()函数,宏

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 …

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216848.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:55
下一篇 2026年3月18日 上午10:56


相关推荐

  • C语言动态规划——背包问题详解

    C语言动态规划——背包问题详解作为一名大三老学长,我的嵌入式春招找实习之旅好像接近尾声了。春招投递了BAT、美团、华为、oppo、大疆等公司的实习。大多数公司都给了面试机会,尤其是阿里,笔试一道编程题都没有写出来居然还给了面试机会!还是非常感谢这些互联网公司能够给我面试机会的,oppo的HR面后半个多月了也没有消息,华为投递一个月也没有什么进展。目前已经拿到了大疆、CVTE实习,打算5月去深圳大疆实习!

    2022年7月14日
    35
  • 单调队列初步「建议收藏」

    单调队列初步「建议收藏」
    一直弄不明白单调队列是什么,在网上也找不到易懂的介绍。最后结合别人博客上的介绍和程序看才理解是怎么回事。
    我们从最简单的问题开始:
    给定一个长度为N的整数数列a(i),i=0,1,…,N-1和窗长度k.
    要求:
         f(i)=max{a(i-k+1),a(i-k+2),…,a(i)},i=0,1,…,N-1
    问题的另一种描述就是用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值。
    解法一:

    2022年6月25日
    28
  • Mac 从零开始配置 VS Code + Claude⽌dex AI 协同开发环境教程

    Mac 从零开始配置 VS Code + Claude⽌dex AI 协同开发环境教程

    2026年3月16日
    6
  • 规范约束条件

    规范约束条件我们在开发时往往会对泛型指定约束条件,只有类型参数符合条件的才允许用在这个泛型上面。但是有时我们会定义过多或过少的约束条件,过多的约束条件会导致其他开发人员在使用你所编写的方法或类时做很多的工作以满足这些约束,过少的约束又会导致程序在运行的时候必须做很多的检查,并执行更多的强制类型转化操作,有时我们还需要使用反射生成运行期错误,来防止用户误用这个类。要解决这些问题,我们就必须把确实需要的约束写出来…

    2022年10月13日
    6
  • session.setAttribute()方法是做什么用的?

    session.setAttribute()方法是做什么用的?session.setAttribute(“sessionName”,Object);用来设置session值的,sessionName是名称,object是你要保存的对象。session.getAttribute(“sessionName”);用来得到对应名称的session值,即得到object对象,注意需要进行类型转换!session.setAttribute(“xy

    2022年10月17日
    4
  • Hibernate连接mycat实现多租户[通俗易懂]

    Hibernate连接mycat实现多租户[通俗易懂]Hibernate连接mycat实现多租户

    2022年4月25日
    116

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号