Как мне получить стек вызовов Backtrace? (глубоко встроенный, без поддержки библиотеки)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как мне получить стек вызовов Backtrace? (глубоко встроенный, без поддержки библиотеки)

Сообщение Anonymous »

Я хочу, чтобы мои обработчики исключений и функции отладки могли напечатать обратные пути стека вызовов, в основном, как библиотека BackTrace () в Glibc. К сожалению, моя библиотека C (Newlib) не дает такого звонка.

Код: Выделить всё

#include  // GCC's internal unwinder, part of libgcc
_Unwind_Reason_Code trace_fcn(_Unwind_Context *ctx, void *d)
{
int *depth = (int*)d;
printf("\t#%d: program counter at %08x\n", *depth, _Unwind_GetIP(ctx));
(*depth)++;
return _URC_NO_REASON;
}

void print_backtrace_here()
{
int depth = 0;
_Unwind_Backtrace(&trace_fcn, &depth);
}
< /code>
, который в основном работает, но полученные следы не всегда завершены. Например, если я делаю < /p>
int func3() { print_backtrace_here(); return 0; }
int func2() { return func3(); }
int func1() { return func2(); }
int main()  { return func1(); }
< /code>
Backtrace показывает только func3 () и main (). (Это, очевидно, пример игрушек, но я проверил разборку и подтвердил, что все эти функции здесь здесь в полной мере и не оптимизированы или подставки.) И действительно, это даже отступает мимо Майн в код инициализации загрузки. Таким образом, предположительно, проблема не с сценарием линкера или параметром компилятора. (Кроме того, из разборки было подтверждено, что в этом тесте ARM7 также не используется ни один указатель кадров). (В предыдущей версии этой системы использовалась старая APC ABI на ARM7 с принудительными кадрами стека и указателем кадров, а также обратной дорогой, подобной той, которая здесь работала). (_Unwind
предназначен для обработки исключений, я думаю.)>

Подробнее здесь: https://stackoverflow.com/questions/339 ... ry-support
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»