【发布时间】:2014-08-25 13:22:15
【问题描述】:
我希望了解我的软件中特定线程的状态,从另一个线程执行。 具体来说,我想知道它是否是 I/O 卡住了。 我正在考虑通过获取回溯来做到这一点(除非有人有其他想法?),因为我知道它应该坚持什么功能.. 但我不知道如何在不调用 SEGFAULT 处理程序的情况下获取该特定线程的回溯......但 gdb 能够做到(我怀疑他创建了 SEGFAULTS..)
有人可以帮忙吗?有什么想法吗?
[编辑] 所有 3 个答案都涉及 gdb,我知道我可以从 gdb 中做到,我想知道如何从软件中做到这一点(即使以某种方式链接到 gdb 库也是一个答案,但是如何?)
【问题讨论】:
-
在 Linux 上,您可以轻松打开
/proc/<pid>/stat(或/proc/<pid>/task/<tid>/stat)并读取堆栈和指令指针。您的平台要求是什么? -
如果你知道你认为你可能会被困在哪个函数中——你能不能在进入和离开该函数时设置和清除一个标志,并向其他线程做一个指示?
-
你在哪个平台上需要这个?
-
@soren,不适用于高多线程故障检测。
-
如果被检查的线程正在运行,您将无法可靠地执行此操作。
标签: c++ c multithreading pthreads backtrace