问题描述
我正在尝试收集目标线程的堆栈跟踪。为此,我启动了一个新线程并向 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 中获取堆栈跟踪,甚至不知道这些字段的含义。我搜索了很多博客,他们总是使用 fp
和 pc
或 backtrace()
,但我找不到。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)