3

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

我有一个多线程程序,其中一个堆栈正在爆炸,但我不知道是哪一个。所以我有兴趣让每个线程向日志文件报告当前的堆栈使用情况,这应该是该线程的堆栈开始和当前堆栈指针之间的差异。我知道如何用汇编语言做到这一点,但我正在寻找一种使用pthreads调用或类似方法的可移植方法。

谢谢。

4

1 回答 1

2

我有一个多线程程序,其中一个堆栈正在爆炸,但我不知道是哪一个。

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

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

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

然而,这种情况非常罕见(至少对于非用户分配的线程堆栈而言——pthread 库通常会提供一个堆栈保护页面来防止这种情况发生)。我只能想到一种这样的情况,实际上这不太可能。

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

没有可移植的方式来实现您想要的。在 Linux 上,您可以使用pthread_getattr_nppthread_attr_getstack找到当前线程堆栈的边界,并从那里轻松计算当前堆栈使用情况。

于 2013-08-17T22:12:55.533 回答