сообщение об ошибке get assert () в обработчике аварийного завершения Android ndk - PullRequest
0 голосов
/ 10 октября 2018

Я использую sigaction() для установки обработчика сбоев в моем приложении и печати информации о частной версии.

В случае сбоя assert() сообщение об отмене очень полезно, и я хотел бы, чтобы я подписалсяобработчик, чтобы распечатать его.Как я могу получить эту строку?Ниже приведен некоторый анализ, который я провел до сих пор:

Я заметил в ndk debuggerd / tombstone.c engrave_tombstone(), что есть аргумент uintptr_t abort_msg_address, который содержит сообщение о прерывании, обычнонесостоявшееся утверждение.Но понятия не имею, откуда это взято.Заметив, что стандартные журналы сбоев Android, кажется, работают в другом процессе, и отладчик d подразумевает, что это демон, я не уверен, что это правильный путь.

Более того, я вижу вbionic libc / stdlib / assert.c есть только вызов __libc_android_log_print(ANDROID_LOG_FATAL, ...).Также не очень полезно.Но в bionic linker_main.cpp есть abort_msg_t* g_abort_message = nullptr; и другие интересные вещи в android_set_abort_message.cpp .Опять же, я не уверен, что это правильный путь, кажется очень хакерским.

Это то, что по умолчанию обрабатывает обработчик сбоев андроида.Обратите внимание, как первое сообщение входит в аварийный pid / tid, но остальные представляют собой какой-то другой случайный процесс (предположительно, debuggerd?).

10-09 16:49:28.551 12084 12127 F libc    : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 12127 (applyRouting), pid 12084 (com.android.nfc)
10-09 16:49:28.691 12203 12203 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-09 16:49:28.692 12203 12203 F DEBUG   : Build fingerprint: 'Android/aosp_marlin/marlin:Q/OC-MR1/summit07191458:userdebug/test-keys'
10-09 16:49:28.692 12203 12203 F DEBUG   : Revision: '0'
10-09 16:49:28.692 12203 12203 F DEBUG   : ABI: 'arm64'
10-09 16:49:28.692 12203 12203 F DEBUG   : pid: 12084, tid: 12127, name: applyRouting  >>> com.android.nfc <<<
10-09 16:49:28.692 12203 12203 F DEBUG   : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
10-09 16:49:28.692 12203 12203 F DEBUG   : Abort message: 'jni_internal.cc:622] JNI FatalError called: applyRouting'
10-09 16:49:28.692 12203 12203 F DEBUG   :     x0  0000000000000000  x1  0000000000002f5f  x2  0000000000000006  x3  0000000000000008
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...