函数调用栈帧回溯

本文以Linux + arm64平台上的测试程序为例,讲解函数调用的栈帧回溯基本原理。

1. Overview

在这里插入图片描述

2. Demo

2.1 堆栈

Thread 9 (LWP 1386):
#0  0x0000007faec8fd28 in ?? ()
#1  0x0000007faf208190 in osal_memcpy (dst=0x7f0e6cc727, src=0x7f08024180, count=32477) at vdi/linux/vdi_osal.c:335
#2  0x0000007faf205278 in vdi_write_memory (core_idx=3, dst_addr=17924376359, src_data=0x7f08024180 "", len=32477, endian=16) at vdi/linux/vdi.c:1300
... ...
#11 0x000000000044e9b8 in bmMonkey::VPUTask::VideoCapture::read (this=0x7f917f90e8, frame=0x7f08013e40) at /jenkins/projects/AI_BSP_bmMonkey_daily_build/bmMonkey/src/bmMonkey.cpp:279
#12 0x000000000044ef3c in bmMonkey::VPUTask::run (this=0x4b8900, seq=2) at /jenkins/projects/AI_BSP_bmMonkey_daily_build/bmMonkey/src/bmMonkey.cpp:326
... ...
#19 0x0000007faeee73bc in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

这里就以#12#11栈帧为例

2.2 查看#12栈帧(caller)

(gdb) f 12
#12 0x000000000044ef3c in bmMonkey::VPUTask::run (this=0x4b8900, seq=2) at 

(gdb) i r
x0             0x7f0e6cc727 545702856487
x1             0x7f08024a79 545595214457
x2             0x7594   30100
x3             0x7f0e6ccfe0 545702858720
x4             0x7f0802c05d 545595244637
x5             0x7f0e6d4604 545702888964
x6             0xced9c821daa46d83   -3541579584222499453
x7             0xae3ab9e9ba49762c   -5892192748956977620
x8             0x882dfd5053b622c8   -8633966389155716408
x9             0x10f14ede4ad483f6   1220843690639262710
x10            0x544ccab1c46ccb2    379653303891840178
x11            0xe324afdbaeaae7b    1022962518989647483
x12            0xb051c1241528b35f   -5741595689202699425
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值