在Android中,如何根据sigcontext获取stacktrace

问题描述

我正在尝试收集目标线程的堆栈跟踪。为此,我启动了一个新线程并向 JNI 中的目标线程发送信号:

 //this is in a new thread
 while (true) {
        usleep(100000);
        syscall(__NR_tgkill,pid,targetThread,SIGPROF);
    }

然后,每次信号到来时,都会调用这个函数

void signalHandler(int signal,siginfo *info,void *context_) {
    ucontext_t *context = reinterpret_cast<ucontext_t *>(context_);
    mcontext_t mcontext = context->uc_mcontext;
    //get the stacktrace from mcontext_t

};

我可以得到目标线程的mcontext_t,我看到结构是:

struct sigcontext {
  __u64 fault_address;
  __u64 regs[31];
  __u64 sp;
  __u64 pc;
  __u64 pstate;
  __u8 __reserved[4096] __attribute__((__aligned__(16)));
};

但是,我不知道如何从 sigcontext 中获取堆栈跟踪,甚至不知道这些字段的含义。我搜索了很多博客,他们总是使用 fppcbacktrace(),但我找不到。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)