【问题标题】:Stacktrace arm-linux-gccStacktrace arm-linux-gcc
【发布时间】:2012-06-02 17:10:03
【问题描述】:

我想转储我的程序的堆栈跟踪,如 backtrace[3] 中演示的示例,但我得到了下面的结果。

我正在使用 linux 2.6arm-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 获得跟踪。

【问题讨论】:

    标签: gcc stack-trace arm


    【解决方案1】:

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

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

    这是在对我的Linux specific answerHow to generate a stacktrace when my gcc C++ app crashes 的评论中向我指出的,您可能也会发现它很有用。

    【讨论】:

    • 感谢您的评论,但我没有得到预期的结果(没有关于 backtrace_symbols 的消息),我正在使用的设备是 mini 2440
    • 您的 glibcuclibc 版本可能不包含适用于您的架构的 backtrace() 的有效实现。在我曾经参与过的一个项目中,我们不得不推出自己的backtrace(),因为现有的没有完全实现。如果是这种情况,this answer 可能会有所帮助。
    • 也许吧!发生某些问题时,linux内核将转储堆栈跟踪,我查看您的建议。感谢您的评论@jschmier
    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 2011-12-23
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多