我想转储我的程序的堆栈跟踪,如backtrace[3]中演示的示例,但我得到了下面的结果。
我正在使用 linux 2.6 和 arm-linux-gcc 4.3.2 。
运行:
arm-linux-gcc prog.c -o prog -rdynamic
结果是:
backtrace()返回1个地址
/lib/ld-linux.so.3 [0x40025000]
你能帮我解决这个问题吗?
由于
我对gcc没有任何问题,但是我无法用arm-linux-gcc获取痕迹。
答案 0 :(得分:1)
根据GCC ARM Options documentation,您需要将 -mapcs-frame 选项传递给GCC,以便在ARM平台上生成堆栈帧。
-mapcs-frame
为所有函数生成符合ARM过程调用标准的堆栈帧,即使这对于正确执行代码不是绝对必要的。使用此选项指定 -fomit-frame-pointer 会导致不为叶函数生成堆栈帧。默认值为 -mno-apcs-frame 。
我在对Linux specific answer到How to generate a stacktrace when my gcc C++ app crashes的评论中向我指出了这一点,您可能会发现这些评论很有用。