C++ シグナルをキャッチしているので、デバッグ情報を出力します。しかし、そうすると、クラッシュしたときに NDK が出力するクラッシュ ダンプを取得できません。
クラッシュ ダンプを手動で印刷できますか。私は debuggerd.c ( http://kobablog.wordpress.com/2011/05/12/debuggerd-of-android/ ) が機能することを確認しましたが、どのように使用するかはわかりません。それ以外の場合は、シグナルハンドラーがシグナルをキャッチせずにシグナルを再スローして、クラッシュダンプを取得する方法があります。
これが私が現在行っていることです:
struct sigaction psa, oldPsa;
void CESignalHandler::init() {
CELogI("Crash handler started");
psa.sa_sigaction = handleCrash;
psa.sa_flags = SA_SIGINFO;
//sigaction(SIGBUS, &psa, &oldPsa);
sigaction(SIGSEGV, &psa, &oldPsa);
//sigaction(SIGSYS, &psa, &oldPsa);
//sigaction(SIGFPE, &psa, &oldPsa);
//sigaction(SIGILL, &psa, &oldPsa);
//sigaction(SIGHUP, &psa, &oldPsa);
}
void CESignalHandler::handleCrash(int signalNumber, siginfo_t *sigInfo, void *context) {
static volatile sig_atomic_t fatal_error_in_progress = 0;
if (fatal_error_in_progress) //Stop a signal loop.
_exit(1);
fatal_error_in_progress = 1;
char* j;
asprintf(&j, "Crash Signal: %d, crashed on: %x, UID: %ld\n", signalNumber, (long) sigInfo->si_addr, (long) sigInfo->si_uid); //%x prints out the faulty memory address in hex
CELogE(j);
CESignalHandler::getStackTrace();
sigaction(signalNumber, &oldPsa, NULL);
}