![]() |
1
1
我最终得到了一个积极的结果,但由于很少有讨论在这里产生,我自己的答案将是简短的。 asgct_calltrace结构(以及基础asgct_callframe数组)可以简单地在信号处理程序中声明,因此仅存在堆栈: asgct_calltrace跟踪; JNIENV*Env; 全局_vm_指针->AttachCurrentThread((void**)&env,空); trace.env_id=env; trace.num_帧=0; asgct_callframe存储[25]; trace.frames=存储; 以下是UContext: UContext_t UContext; getContext(&ucContext); 然后电话是: asyncgetCalltrace(&trace,25&ucontext); 我确信在这个过程中还有一些其他的细微差别需要处理,但我并没有真正记录下来。我不确定是否可以公开我当前的全部代码,它成功地异步请求并以固定的间隔获得任何Java程序的堆栈跟踪。但是,如果有人对同一个问题感兴趣,或者固守在同一个问题上,我现在可以帮上忙了(我想)。 其他两个问题: [1]如果一个线程正在休眠,并且生成了一个sigprof,那么该线程仅在唤醒后处理该信号。这是正常的,因为处理信号是线程的工作。 [2]计时器缺陷似乎不再出现。也许我量错了。 |
![]() |
xuq01 · 解析JNI DefineClass中的依赖项 8 年前 |