2012-06-02 4 views
3

Я хочу сбросить stacktrace моей программы в качестве примера, продемонстрированного на backtrace[3], но вместо этого я получил результат ниже.Stacktrace arm-linux-gcc

Я использую Linux 2.6 и нарукавную Linux-GCC 4.3.2.

Бег:
arm-linux-gcc prog.c -o prog -rdynamic

результат:

трассировка() дала 1 адрес

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

Не могли бы вы помочь мне решить эту проблему?

Благодаря


У меня нет никаких проблем с ССЗ, но я не могу получить следы с рукой-Linux-GCC.

ответ

1

В соответствии с GCC ARM Options documentation вам необходимо передать опцию -mapcs-frame в GCC для создания кадров стека на платформе ARM.

-mapcs-каркасные
Сформировать кадр стека, совместимый с ARM Procedure Call Стандартной для всех функций, даже если это не является строго необходимым для правильного выполнения кода. Указание -fomit-frame-pointer с этой опцией заставляет кадры стека не генерироваться для функций листа. Значение по умолчанию: -mno-apcs-frame.

Это указал мне в комментарии к моим Linux specific answer к How 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