You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ARM平台生成可用调用栈?解决外部库调用栈丢失问题

ARM平台(树莓派)外部库调试调用栈丢失问题

我在ARM平台(树莓派,使用g++ (Raspbian 8.3.0-6+rpi1) 8.3.0版本)开发C++应用时遇到以下问题:

  • 调试自身代码或代码崩溃时,能正常获取完整且正确的调用栈;
  • 但当应用在外部库中崩溃,或使用GDB单步进入外部库函数后,调用栈会丢失,仅保留当前函数的调用信息。

示例场景

初始断点状态

在memcpy函数开头设置断点后,调用栈正常:

(gdb) bt
#0  0x76fa4b5c in memcpy () at /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
#1  0x000e6118 in CWatchDog::ComputeBatteryPercentage(float) (this=0x2643140, voltage=3.96600008) at WatchDog.cpp:197
#2  0x000e5c24 in CWatchDog::BatteryControl(CWatchDog::RxPacketData const&) (this=0x2643140, data=...) at WatchDog.cpp:149
... etc ...

单步执行后状态

单步执行几条指令(经过vpush指令)后,调用栈丢失上层信息:

(gdb) bt    
#0  0x76fa4b60 in memcpy () at /usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so
#1  0x00000000 in  ()

我已经尝试过使用-funwind-tables、-fasynchronous-unwind-tables、-mapcs-frame这些编译选项重新编译代码,但没有解决问题。请问是否有办法在外部函数调试时保留完整调用栈?

内容的提问来源于stack exchange,提问作者bigmuscle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:15:02