我的调试线程将监视内存使用情况。当它发现不一致情况时,它将生成一个coredump。
正如我发现的那样,coredump不是很准确(看起来比问题发生的时间晚了一点,因为我需要在abort()
之前的调试线程中进行一些清理。)
我想在那时记录线程val的确切%pc
寄存器,我该怎么做?
答案 0 :(得分:1)
获取“最近的”%pc
- 程序计数器的一种方法 - (也称为%ip
指令指针)是使用makecontext
void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);
并在REG_EIP
sys/ucontext.h
context.uc_mcontext.gregs[REG_EIP];
请注意,数据结构显然与机器有关,例如,如果您使用的是SPARC,则%ip
将存储在REG_RIP
-
据我所知,没有办法为所有线程读取此值,您必须阅读每个线程的%pc
,并手动收集数据。