在 arm-linux 中打印堆栈跟踪 [英] print stack trace in arm-linux

查看:22
本文介绍了在 arm-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.

这篇关于在 arm-linux 中打印堆栈跟踪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆