CmBacktrace icon indicating copy to clipboard operation
CmBacktrace copied to clipboard

依靠堆栈中bl/blx指令做回溯依据是否可靠

Open lgl88911 opened this issue 5 years ago • 4 comments
trafficstars

@armink 从代码中看到,堆栈回溯的依据是检查堆栈中的内容是不是bl和blx指令,而不是去计算每个frame大小。如果堆栈中刚好有内容和指令码一样,这样回溯是不是就变得不可靠了?

lgl88911 avatar Apr 03 '20 05:04 lgl88911

确实会有脏数据的情况,你有更好的处理方法吗?

armink avatar Apr 03 '20 10:04 armink

确实会有脏数据的情况,你有更好的处理方法吗?

glibc的unwind可以做这个事情,但是不适合小型嵌入式系统。 我也是在寻找看有没有比较成熟的方法,由于ARM不使用fp, 所以没法知道stack frame的大小,下面这个链接提供了一个思路,借用gcc编译器来实现,不过要额外消耗内存 https://stackoverflow.com/questions/3398664/how-to-get-a-call-stack-backtrace-deeply-embedded-no-library-support

lgl88911 avatar Apr 03 '20 12:04 lgl88911

我在这个链接中看到是可以通过编译选项来使用frame pointer的,不确定是不是所有平台通用。

bear-jiang avatar Apr 07 '20 16:04 bear-jiang

这个编译选项只对arm架构有效

lgl88911 avatar Apr 08 '20 04:04 lgl88911