Я разрабатываю приложение, которое сбой в коде NDK с SIG_SEGV. Это заставляет приложение висеть в течение примерно 15 секунд, а затем Android предложит мне закрыть его. Это выводит трассировку стека java на logcat, но я не вижу трассировки стека для NDK. Я перенаправил stdio с ADB, но я до сих пор не вижу трассировку стека. Как распечатать трассировку стека С ++ для logcat или там, где печатается?
Использование Android 2.3.4
NDK R8bНе удалось найти android NDK stack-trace
ответ
Диалог «принудительное закрытие» публикуется сбойным приложением. Это звучит как крах Dalvik, а не родной сбой. Если процесс получает SIGSEGV, он должен уведомлять об отладке и выходе из него, оставляя след в журнале. Возможно, было бы полезно включить вывод logcat из аварии в ваш вопрос.
Во всяком случае, последние версии Android включают в себя родные следы, смешанные с дампом стека Dalvik, когда потоки находятся в собственном коде. Если у вас есть внедренное устройство, работающее с последней версией Android, вы можете попросить debuggerd сбросить трассировку всех потоков с помощью adb shell debuggerd -b <pid>
.
Вы находитесь на Android 2.3.x, но ничто из этого не поможет. Ваш лучший вариант - отправить процесс фатальным сигналом, чтобы получить сбой аварийной ситуации debuggerd. Сигнал должен быть отправлен в два раза, например .:
adb shell kill -6 <pid> ; sleep 1 ; adb shell kill -6 <pid>
Это требует корневого устройства, в качестве «оболочки» пользователя не может посылать сигналы на произвольные процессы. В зависимости от того, что именно происходит, вы должны быть в состоянии сделать это, пока диалог «принудительное закрытие» все еще находится на экране ... но если поток справился с аварийным завершением без выполнения процесса, тогда не может быть стека, чтобы получить след от.
Вы можете использовать следующий код, чтобы получить Log
__android_log_print(ANDROID_LOG_ERROR, "TRACKERS", "%s", Str);
и добавьте следующую библиотеку
#include <android/log.h>
Это не будет печатать трассировку стека. – agoaj
вы не можете распечатать трассировку стека в NDK, скорее, вы можете печатать журналы в своем не предоставленном в NDK, но только предоставленные данные регистрируются в нем –
Если вы не можете распечатать трассировку стека, тогда такие инструменты, как ndk-stack, будут довольно бессмысленны для включить в sdk. – agoaj
- 1. Android NDK, не удалось найти зависимую библиотеку
- 2. android ndk: не удалось найти android_runtime
- 3. Не удалось найти метод ndk() для аргументов
- 4. ndk-gdb не удалось найти gdb.setup
- 5. Android NDK «dlopen не удалось: не удается найти символ»
- 6. Android - Не удалось найти CMake
- 7. Android NDK найти динамическую ссылку: не удалось отладить библиотеку
- 8. Android NDK Integration: Ошибка: Не удалось найти метод «com.android.build.gradle.internal.Application
- 9. Android NDK: Не удалось найти каталог проектов приложений?
- 10. linphone 'make' error: Не удалось найти ndk-build, Не удалось найти android
- 11. Stacktrace for C на Android
- 12. Не удалось разрешить JNIфункцию: Android ndk
- 13. Не удалось найти stacktrace при загрузке с помощью AWS TransferManager
- 14. Android NDK dlopen не удалось: не удалось найти символ «ASensor_getReportingMode», на который ссылается «lib * .so»
- 15. Android C++ OpenGL: не удалось найти статистику
- 16. JAVAH не может найти класс (android ndk)
- 17. Android ndk не может найти символ «sigemptyset»
- 18. Android ndk не может найти функцию atof
- 19. Android NDK r10e «не удается найти -supC++»
- 20. Android NDK не может найти родную функцию
- 21. Gradle не удалось найти android_native_app_glue
- 22. Не удалось установить blackberry ndk
- 23. NDK GCC: Не удалось определить версию GCC
- 24. Android Log.X не печатает stacktrace
- 25. ndk-build не удалось создать проект PocketSphinxAndroidDemo
- 26. Android Не удалось найти com.android.support
- 27. Android не удалось найти «libsqlcipher_android.so»
- 28. Android: QCMediaPlayer не удалось найти
- 29. Android: не удалось найти org.spongycastle.util.io.pem.PemReader
- 30. Android: не удалось найти дату
Я получаю «не удалось убить pid 26646: операция не разрешена» – agoaj
Я забыл отметить, что вам нужно (ответ обновлен). – fadden