2012-06-02 51 views
3

我想转储我的程序的堆栈跟踪,例如在backtrace[3]上演示的例子,但是我得到了下面的结果。Stacktrace arm-linux-gcc

我正在使用linux 2.6arm-linux-gcc 4.3.2

运行:
arm-linux-gcc prog.c -o prog -rdynamic

结果是:

回溯()返回1个地址

/lib/ld-linux.so.3 [0x40025000]

你能帮我解决这个问题吗?

感谢


我没有用gcc任何问题,但我不能得到与ARM-Linux的gcc的痕迹。

回答

1

根据GCC ARM Options documentation,您需要将-mapcs-frame选项传递给GCC以在ARM平台上生成堆栈帧。

-mapcs帧
生成一个堆栈帧是符合ARM程序调用标准的所有功能,即使这不是绝对必要的代码的正确执行。使用此选项指定-fomit-frame-pointer将导致不为叶函数生成堆栈帧。默认值是-mno-apcs-frame

这是向我指出在评论我Linux specific answerHow to generate a stacktrace when my gcc C++ app crashes,您也可以找到有用的。

+0

感谢您的评论,但我没有得到预期的结果(没有backtrace_symbols的消息),我在设备上工作的是_mini 2440_ – Ocean

+0

可能是您的版本** glibc **或** uclibc * *不包含针对您的架构的'backtrace()'的工作实现。在我曾经参与过的一个项目中,我们不得不推出自己的'backtrace()',因为现有的没有完全实现。如果是这种情况,[这个答案](http://stackoverflow.com/a/2536136/203667)可能会有一些帮助。可能是 – jschmier

+0

! linux内核会在出现问题时转储堆栈跟踪,我检查你的建议。感谢您的评论@ jschmier – Ocean