【发布时间】:2011-09-05 07:09:37
【问题描述】:
多线程应用程序挂起并且没有响应任何命令。我尝试过以下事情,但没有运气:
- 将进程附加到 gdb(错误:(gdb)附加 6026 附加到进程 6026 ptrace:不允许操作。)
- gstack(gstack 就这样挂了)
有什么好的方法可以调试这个过程吗?
【问题讨论】:
-
您是尝试以 root 身份,还是以创建进程的用户身份,或以其他用户身份附加?您是否尝试过在程序挂起之前从 gdb 运行程序?
-
@Jonatha Leffler 我在 root 中运行该进程,并使用相同的 id 在 gdb 中附加该进程。这不是前台进程,这是一个守护进程。
-
好的;如果它以 root 身份运行并且您尝试以 root 身份运行 gdb,那么这不是一个简单的权限问题(但它可能是一个复杂的问题)。总的来说,我要做的是在 gdb 中启动守护进程,使用
set follow-fork-mode和set fork-detach-mode等选项。 -
@Jonatha Leffler 感谢您的建议,但现在问题出现了。我喜欢以某种方式调试这个过程。这个问题将来可能无法重现吧?
-
您或其他人是否已经在跟踪 6026 进程?看this问题。
标签: c linux multithreading linux-kernel