相关疑难解决方法(0)

Android NDK:获得回溯

我正在开发通过NDK与Android一起使用的本机应用程序.我需要在backtrace()发生崩溃时调用该函数.问题是<execinfo.h>NDK 没有 .

有没有其他方法来获得回溯?

c c++ android android-ndk

44
推荐指数
6
解决办法
4万
查看次数

如何在SIGSEGV上使用_Unwind_Backtrace获取fullstacktrace

我通过代码处理SIGSEGV:

int C()
{
  int *i = NULL;
  *i = 10; // Crash there
}

int B()
{
  return C();
}

int A()
{
   return B();
}

int main(void)
{
  struct sigaction handler;
  memset(&handler,0,sizeof(handler));
  handler.sa_sigaction = handler_func;
  handler.sa_flags = SA_SIGINFO;
  sigaction(SIGSEGV,&handler,NULL);
  return(C());
}
Run Code Online (Sandbox Code Playgroud)

处理程序代码在哪里:

static int handler_func(int signal, siginfo_t info, void* rserved)
{
  const void* stack[MAX_DEPTH];
  StackCrowlState state;
  state.addr = stack;
  state.count = MAX_DEPTH;

  _Unwind_Reason_Code code = _Unwind_Backtrace(trace_func,&state);
  printf("Stack trace count: %d, code: %d\n",MAX_DEPTH - state.count, code);

  kill(getpid(),SIGKILL);
}

static …
Run Code Online (Sandbox Code Playgroud)

c gcc signals stack-trace stack-unwinding

13
推荐指数
3
解决办法
9244
查看次数

标签 统计

c ×2

android ×1

android-ndk ×1

c++ ×1

gcc ×1

signals ×1

stack-trace ×1

stack-unwinding ×1