首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

arm上backtrace的分析与实现原理

第一种可以不用讲,现在主要讲一下backtrace。 01 backtrace简介 backtrace就是回溯堆栈,简单的说就是可以列出当前函数调用关系。...在理解backtrace之前我们需要理解一下函数执行过程的中的压栈过程。 1.1 寄存器与汇编指令 ARM微处理器共有37个寄存器,其中31个为通用寄存器,6个为状态寄存器。...02 backtrace的过程详解 当程序出现异常或者死机的时候,我们可以读取当前寄存器的状态,找到当前pc指针的情况,但是这些往往还不能说明问题,我们有时需要跟踪函数的执行过程。...以linux内核实现arm栈回溯为例, 通过向gcc传递选项-mapcs或-funwind-tables,可选择APCS或unwind的任一方 式实现栈回溯。...比如在Linux中,系统死机后,可以打印出栈的地址和函数的名称,根据这个进行回溯操作就可以进行使用了。

5.9K30

arm平台根据栈进行backtrace的方法

本文主要介绍在arm平台回溯函数调用栈(backtrace)的方法。 一、 背景 嵌入式设备开发过程中,难免会遇到各种死机问题。这类问题的定位一直是开发人员的噩梦。...死机问题常见定位手段如下: 根据打印/日志信息梳理业务逻辑,排查代码; 设备死机的时候输出函数调用栈(backtrace),结合符号文件表/反汇编文件定位问题; 输出死机时的内存镜像(coredump)...不过大部分嵌入式实时操作系统(RTOS)不支持生成coredump,下面主要介绍backtrace。...二、 backtracebacktrace最方便的就是使用gcc自带的backtrace功能,编译的时候加上-funwind-tables选项(该选项对性能无影响但是会使可执行文件略微变大),异常处理函数中调用相关函数即可输出函数调用栈...下面介绍一种不依赖于第三方工具,不依赖编译工具链的backtrace方法。 1. 栈帧 函数调用过程是栈伸缩的过程。调用函数的时候入参、寄存器和局部变量入栈,栈空间增长,函数返回的时候栈收缩。

4.9K20

STM32上的backtrace原理与分析

STM32上的backtrace原理与分析 1.说明 2.cortex-m上的栈布局 2.1 cortex-m上的寄存器 2.2 cortex-m上的自动压栈 2.3 cortex-m上的函数执行流程...对于这种情况,backtrace是十分必要的。可以在离线的状态下分析系统的关键信息,通过函数的栈回溯,从而找到出错的对应的执行函数,然后结合程序设计,基本上大部分的bug基本上也可以找到。...我之前写过一篇文章arm上backtrace的分析与实现原理。分析了在cortex-a上的分析情况。...3.cmbacktrace原理分析 在做cortex-m上的backtrace的时候,查阅了一些资料,其中发现一个CmBacktrace。...但是如果想要分析其他的线程的栈的backtrace,则需要注意操作系统的压栈问题。 例如在rt-thread中,进行线程切换的时候,会调用pendsv进行自动压栈一次,然后在手动压栈其他的寄存器。

2.2K62

STM32 在 keil 环境下如何使用 cm_backtrace进行错误追踪

image-20210306101326283 紧接着,我们来看下 cm_backtrace的源代码: ?...image-20210306101659128 上述中,cm_backtrace文件夹中存放的是源代码,我们需要将其全部复制到我们的工程目录,demos是使用的例子,里面分为有操作系统和无操作系统两种类型...image-20210306102919999 至此,cm_backtrace的源代码就添加完了,我们来编译一下。编译结果如下所示: ?...{ /*初始化USART 配置模式为 115200 8-N-1,中断接收*/ USART_Config(); /* CmBacktrace initialize */ cm_backtrace_init...image-20210306105719377 然后,我们找到 cm_backtrace文件夹下的tools工具,将其复制到USART.axf所在的目录,复制之后的文件夹目录如下所示: ?

1.1K20
领券