确定posix pthread的堆栈使用情况?

时间:2013-08-16 03:52:55

标签: c++ pthreads stack

如何确定多线程C ++程序中当前线程使用的当前堆栈空间量?我正在使用POSIX pthreads。

我有一个多线程程序,其中一个堆栈正在爆炸,但我无法弄清楚哪一个。因此,我感兴趣的是让每个线程向日志文件报告当前的堆栈使用情况,这应该是该线程的堆栈开始与当前堆栈指针之间的差异。我知道如何用汇编语言执行此操作,但我正在寻找使用pthreads调用或类似内容的便携式方法。

感谢。

1 个答案:

答案 0 :(得分:2)

  

我有一个多线程程序,其中一个堆栈正在爆炸,但我无法弄清楚哪一个。

让程序崩溃并留下core文件。将core加载到调试器中,它会立即告诉您哪个线程崩溃。

  

崩溃的线程不一定是溢出的线程。

确实存在一个线程溢出其堆栈但另一个线程崩溃的情况。

但是,这种情况非常罕见(至少对于非用户分配的线程堆栈 - pthread库通常会提供一个堆栈保护页面来保护它)。我只能想到一个这样的场景,而且在实践中它是不太可能的。

  

我正在寻找一种使用pthreads调用或类似方法的可移植方法。

没有便携式方式来实现您的目标。在Linux上,您可以使用pthread_getattr_nppthread_attr_getstack来查找当前线程堆栈的边界,并从那里轻松计算当前堆栈使用情况。