如何确定多线程 C++ 程序中当前线程使用的当前堆栈空间量?我正在使用 POSIX pthreads。
我有一个多线程程序,其中一个堆栈正在爆炸,但我不知道是哪一个。所以我有兴趣让每个线程向日志文件报告当前的堆栈使用情况,这应该是该线程的堆栈开始和当前堆栈指针之间的差异。我知道如何用汇编语言做到这一点,但我正在寻找一种使用pthreads
调用或类似方法的可移植方法。
谢谢。
我有一个多线程程序,其中一个堆栈正在爆炸,但我不知道是哪一个。
让程序崩溃并留下一个core
文件。将其加载core
到调试器中,它会立即告诉您哪个线程崩溃了。
崩溃的线程不一定是溢出的线程。
确实存在一个线程溢出其堆栈,但另一个线程因此而崩溃的情况。
然而,这种情况非常罕见(至少对于非用户分配的线程堆栈而言——pthread 库通常会提供一个堆栈保护页面来防止这种情况发生)。我只能想到一种这样的情况,实际上这不太可能。
我正在寻找一种使用 pthreads 调用或类似方法的可移植方法。
没有可移植的方式来实现您想要的。在 Linux 上,您可以使用pthread_getattr_np
和pthread_attr_getstack
找到当前线程堆栈的边界,并从那里轻松计算当前堆栈使用情况。