2010-11-01 103 views
0

我的调试线程将监视内存使用情况。当它发现不一致的情况时,它会产生一个coredump。如何获得Linux上的任何线程的PC寄存器?

因为我发现,coredump不是很准确(看起来比问题发生的那一刻迟一点,因为我需要在abort()之前在调试线程中进行一些清理)。

我想记录当时线程val的确切%pc寄存器,我该怎么做?

回答

1

一种方式来获得一个“最近” %pc - 程序计数器 - (也称为%ip指令指针)是保存过程中的状态makecontext

void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...); 

和阅读在缓冲区中的权值:REG_EIPsys/ucontext.h

context.uc_mcontext.gregs[REG_EIP]; 

请注意定义该数据结构显然是依赖于机器,并举例来说,如果你使用的是SPARC中,%ip会被存储在REG_RIP

-

,据我所知,有没有办法为所有线程读取此值,您必须在每个线程上读取%pc,然后手动收集您的数据。

+0

报价: 据我所知,没有办法读取所有线程的这个值,你必须阅读它们每个的%pc,然后手动收集你的数据。 我的想法是使用专用线程来监视内存,它会生成coredump或记录$ pc,当它发现内存changed.but听起来我不能这样做? 是否有另一种好方法来监视内存(特别是内存覆盖),因为我不能使用valgrind或purify(它们在我的环境中太重了)。 非常感谢! – jon 2010-11-03 04:29:34

+0

@jon:我真的不明白你想如何使用你的线程来监视内存的变化,也许你可以用更多的细节更新问题? – Kevin 2010-11-03 14:07:15

相关问题