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

    arm上backtrace的分析与实现原理

    第一种可以不用讲,现在主要讲一下backtrace。 01 backtrace简介 backtrace就是回溯堆栈,简单的说就是可以列出当前函数调用关系。...在理解backtrace之前我们需要理解一下函数执行过程的中的压栈过程。 1.1 寄存器与汇编指令 ARM微处理器共有37个寄存器,其中31个为通用寄存器,6个为状态寄存器。...02 backtrace的过程详解 当程序出现异常或者死机的时候,我们可以读取当前寄存器的状态,找到当前pc指针的情况,但是这些往往还不能说明问题,我们有时需要跟踪函数的执行过程。...04 总结 对于arm32体系架构的backtrace基本原理可以参考如上的描述,其中最核心的部分是每个函数的栈中寄存器地址指向的是上个函数的地址,所以利用这个特性,就可以一级一级的跟踪下去,从而实现栈的回溯功能

    6.6K30

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

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

    5.7K20

    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.6K62

    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.4K20

    PHP打印跟踪调试信息

    function a_test($str) { echo "Hi: $str", PHP_EOL; var_dump(debug_backtrace()); } var_dump(debug_backtrace...debug_backtrace() 的函数声明是: debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit...= 0 ]] ) : array 其中 \$options 是有两个常量可以定义,DEBUG_BACKTRACE_PROVIDE_OBJECT 表明是否填充 "object" 的索引;DEBUG_BACKTRACE_IGNORE_ARGS...debug_backtrace() 以及下面要介绍的 debug_print_backtrace() 方法都是支持 require/include 文件以及 eval() 中的代码的,在嵌入文件时,会输出嵌入文件的路径...debug_print_backtrace() 这个方法从名称也可以看出,它会直接打印回溯内容,它的函数声明和 debug_backtrace() 是一样的,不过 $options 默认是 DEBUG_BACKTRACE_IGNORE_ARGS

    2K30
    领券