Я хотел бы знать, как найти класс и место, где произошла ошибка, используя C ++ в ndk.
Я также хотел бы знать, как сохранить работу программы даже после segfault.
У меня есть эта функция, которая отображает ошибку, я не знаю, как ее читать и что означает каждая вещь
void handler(int signum, siginfo_t *info, void* contextPtr)
{
ucontext* context = (ucontext_t*)contextPtr;
if(info->si_signo == SIGSEGV)
{
Log("SIGSEGV | Fault address: 0x%X", info->si_addr);
Log("libGTASA base address: 0x%X", g_libGTASA);
Log("register states:");
Log("r0: 0x%X, r1: 0x%X, r2: 0x%X, r3: 0x%X",
context->uc_mcontext.arm_r0,
context->uc_mcontext.arm_r1,
context->uc_mcontext.arm_r2,
context->uc_mcontext.arm_r3);
Log("r4: 0x%x, r5: 0x%x, r6: 0x%x, r7: 0x%x",
context->uc_mcontext.arm_r4,
context->uc_mcontext.arm_r5,
context->uc_mcontext.arm_r6,
context->uc_mcontext.arm_r7);
Log("r8: 0x%x, r9: 0x%x, sl: 0x%x, fp: 0x%x",
context->uc_mcontext.arm_r8,
context->uc_mcontext.arm_r9,
context->uc_mcontext.arm_r10,
context->uc_mcontext.arm_fp);
Log("ip: 0x%x, sp: 0x%x, lr: 0x%x, pc: 0x%x",
context->uc_mcontext.arm_ip,
context->uc_mcontext.arm_sp,
context->uc_mcontext.arm_lr,
context->uc_mcontext.arm_pc);
Log("backtrace:");
Log("1: libGTASA.so + 0x%X", context->uc_mcontext.arm_pc - g_libGTASA);
Log("2: libGTASA.so + 0x%X", context->uc_mcontext.arm_lr - g_libGTASA);
Log("1: libsamp.so + 0x%X", context->uc_mcontext.arm_pc - FindLibrary("libsamp.so"));
Log("2: libsamp.so + 0x%X", context->uc_mcontext.arm_lr - FindLibrary("libsamp.so"));
exit(0);
}
return;
}
```