首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以将调试器附加到多线程Python进程?

有没有一种方法可以将调试器附加到多线程Python进程?
EN

Stack Overflow用户
提问于 2008-09-06 18:14:06
回答 8查看 33.8K关注 0票数 35

我尝试在多线程Python应用程序锁定后调试它的死锁。有没有一种方法可以附加调试器来检查进程的状态?

编辑:我正在Linux上尝试这样做,但是如果有一个跨平台的解决方案就太好了。它毕竟是Python :)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-11 13:19:11

是的,gdb对于低级调试是很好的。

可以使用thread命令更改螺纹。

e.g

代码语言:javascript
运行
复制
(gdb) thr 2
[Switching to thread 2 (process 6159 thread 0x3f1b)]
(gdb) backtrace
....

您还可以查看特定于Python的调试器,如Winpdbpydb。两者都是平台独立的。

票数 11
EN

Stack Overflow用户

发布于 2009-02-15 12:18:34

您可以将调试器附加到多线程Python进程,但需要在C级别执行此操作。为了理解发生了什么,您需要用符号编译Python解释器。如果你没有,你需要从python.org下载源代码并自己构建:

代码语言:javascript
运行
复制
./configure --prefix=/usr/local/pydbg
make OPT=-g
sudo make install
sudo ln -s /usr/local/pydbg/bin/python /usr/local/bin/dbgpy

确保您的工作负载在该版本的解释器上运行。然后,您可以随时使用GDB附加到它。Python的工作人员在他们的Misc目录中包含了一个示例".gdbinit“,其中包含一些有用的宏。然而,它在多线程调试中被破坏了(!)。您需要像这样替换行

代码语言:javascript
运行
复制
while $pc < Py_Main || $pc > Py_GetArgcArgv

具有以下功能:

代码语言:javascript
运行
复制
while ($pc < Py_Main || $pc > Py_GetArgcArgv) && ($pc < t_bootstrap || $pc > thread_PyThread_start_new_thread)

否则,像pystack这样的命令不会在主线程以外的线程上终止。准备好这些东西后,您可以执行以下操作

代码语言:javascript
运行
复制
gdb> attach <PID>
gdb> info threads
gdb> thread <N>
gdb> bt
gdb> pystack
gdb> detach

看看是怎么回事。有点。

您可以使用"pyo“宏解析对象是什么。Chris has some examples在他的博客上写道。

祝好运。

(请大声喊出Dan's blog,为我提供一些关键信息,特别是线程修复!)

票数 8
EN

Stack Overflow用户

发布于 2008-09-12 14:51:52

如果您指的是pydb,就没有办法做到这一点。在这个方向上有一些努力:see the svn commit,但它被放弃了。据推测是winpdb supports it

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档