在arm-linux中打印堆栈跟踪

2022-01-17 00:00:00 c arm c++ embedded-linux

我按照这篇文章打印堆栈跟踪 当我的 gcc C++ 应用程序崩溃时如何生成堆栈跟踪.它在 x86 linux 中运行良好.谁能教我如何让它在 arm-linux 上工作?

I followed this post to print stack trace How to generate a stacktrace when my gcc C++ app crashes . It works well in x86 linux. Can anyone teach me how to make it work on arm-linux?

我正在使用 arm-linux-gcc 4.4.3.

I am using arm-linux-gcc 4.4.3.

[root@FriendlyARM /]# ./test1
Error: signal 11:
[0x0]

在 x86 中

mickey@mickeyvm:~/Desktop/workspace/test/testCatchSeg/src$ ./test1
Error: signal 11:
./test1(_Z7handleri+0x19)[0x804876d]
[0xedd400]
./test1(_Z3bazv+0x10)[0x80487c2]
./test1(_Z3barv+0xb)[0x80487e1]
./test1(_Z3foov+0xb)[0x80487ee]
./test1(main+0x22)[0x8048812]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x84de37]
./test1[0x80486c1]

这就是我为 arm-linux 编译的方式

This is how I compile for arm-linux

 arm-linux-g++ -g -rdynamic ./testCatchSeg.cpp -o testCatchSeg

推荐答案

ARM在跳转到子程序时不会将返回地址存储在堆栈上,而是希望任何调用子程序的函数都保存链接寄存器 在调用其他函数之前到自己的栈帧,所以没有调试信息是不可能跟随栈帧的.

ARM does not store the return address on the stack when branching to a subroutine but rather expects any function calling subroutines to save the link register to its own stack frame before calling other functions, so it is impossible to follow stack frames without debug information.

相关文章