2015-12-11 8 views
4

Я пытаюсь отладить код JNI, написанный на C, запущенном на Android 5. Когда вызывается одна из моих функций, я хочу написать трассировку стека в журнал adb, чтобы я мог см., откуда была вызвана функция.Печать трассировки стека C на Android 5/Lolipop

Первые найденные мной ресурсы Мне нужно было использовать libcorkscrew и были включены примеры использования библиотеки. К сожалению, похоже, что libcorkscrew ушел с Android 5, и теперь предполагается использовать libunwind. Для моего проекта, есть несколько проблем:

  1. Инструкции по получению libunwind в проекте немногочисленны и/или вводить в заблуждение - некоторые ресурсы говорят, чтобы загрузить проект из GitHub и построить его (с направлениями, которые не работают) , другие указывают, что библиотека уже включена в Android 5.

  2. Все примеры написаны на C++, и кажется, что libunwind имеет только привязки C++ для функций внутри него. Поскольку мой код C, а не C++, и запись в функцию журнала, а не через stdlib C++, это неприменимо.

Среди других, я смотрел на этих страницах:

  1. Native Stack Traces on Android Lollipop with libunwind

  2. There's no "libcorkscrew" in Android 5.0...

  3. Android NDK: getting the backtrace

Есть ли способ получить трассировку стека в коде C на Android 5 без сбоев программы?

ответ

0

Можете ли вы использовать backtrace_symbos_fd на Android? Если вы можете, вы можете использовать этот вариант:

void *array[100]; 
size_t size; 

size = backtrace (array, 100); 
backtrace_symbols_fd (array, size, STDOUT_FILENO); 

 Смежные вопросы

  • Нет связанных вопросов^_^