当前位置:  开发笔记 > 编程语言 > 正文

有没有办法将调试器附加到多线程Python进程?

如何解决《有没有办法将调试器附加到多线程Python进程?》经验,为你挑选了3个好方法。

我试图在锁定后修改多线程Python应用程序中的死锁.有没有办法附加调试器来检查进程的状态?

编辑:我在Linux上尝试这个,但是如果有一个跨平台的解决方案那就太棒了.毕竟是Python的:)



1> nosklo..:

使用Winpdb.它是一个独立平台的图形GPL Python调试器,支持通过网络进行远程调试,多线程,命名空间修改,嵌入式调试,加密通信,速度比pdb快20倍.

特征:

GPL许可证.Winpdb是免费软件.

兼容CPython 2.3到2.6和Python 3000

兼容wxPython 2.6到2.8

独立于平台,并在Ubuntu Gutsy和Windows XP上进行了测试.

用户界面:rpdb2是基于控制台的,而winpdb需要wxPython 2.6或更高版本.

截图
(来源:winpdb.org)



2> asksol..:

是的,gdb适用于较低级别的调试.

您可以使用thread命令更改线程.

例如

(gdb) thr 2
[Switching to thread 2 (process 6159 thread 0x3f1b)]
(gdb) backtrace
....

您还可以查看Python特定的调试器,如Winpdb或pydb.两个平台都独立.



3> Peter S Magn..:

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

./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",它有一些有用的宏.但是对于多线程调试(!)来说它已经崩溃了.你需要替换这样的行

while $pc < Py_Main || $pc > Py_GetArgcArgv

以下内容:

while ($pc < Py_Main || $pc > Py_GetArgcArgv) && ($pc < t_bootstrap || $pc > thread_PyThread_start_new_thread)

否则,命令pystack不会在主线程以外的线程上终止.有了这些东西,你可以做类似的事情

gdb> attach 
gdb> info threads
gdb> thread 
gdb> bt
gdb> pystack
gdb> detach

看看发生了什么.的种类.

您可以使用"pyo"宏解析对象的内容. 克里斯在他的博客上有一些例子.

祝好运.

(为Dan的博客留出了一些重要信息,特别是线程修复!)

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有