python调试工具pudb_多进程代码调试利器pudb

Python的调试工具有很多,常用的有如下这些:pdb. Python内置的调试工具。

ipdb. 将Ipython功能引入pdb调试工具。

multiprocessing.dummy. 模拟的多进程。

pudb. 只支持Linux与macOS平台。

Pycharm. 其使用内置的pydev调试功能。

vscode. 其使用ptvsd。

这里讲述pudb的使用方法。

pudb调试多进程Python代码

安装

pip install pudb

使用方法

pudb的使用比较简洁,在需要调试的代码中加入set_trace即可。

from pudb import set_trace

set_trace()

然后使用pudb启动主程序:

python -m pudb.run my-script.py

调试过程

这里以multiprocessing多进程代码示例调试过程:

# -*- coding: utf-8 -*-

import os

from multiprocessing import Process

from pudb.remote import set_trace

def info(title):

print(title)

set_trace()

print('module name:', __name__)

print('parent process:', os.getppid())

print('process id:', os.getpid())

def f(name):

info('function f')

print('hello', name)

if __name__ == '__main__':

info('main line')

p = Process(target=f, args=('bob',))

p.start()

p.join()

启动的主程序后界面如下:

常用操作:?: 帮助页面。

n: 单步调试,当遇到函数调用时,不进入此函数体。

s: 单步执行,当遇到函数调用时,则进入此函数体。

b: 设置断点。

!: 跳转置左下角的Python命令行界面内。

ctrl+p: 调出配置界面。

o: 查看输出界面,但在子进程界面时此操作将会使界面卡住,官方下个版本将在子进程中禁止此功能。

当程序运行至p = Process(target=f, args=('bob',))代码行启动子进程时,弹出如下提示:

pudb:6899: Please telnet into 127.0.0.1 6899.

pudb:6899: Waiting for client...

这时,使用telnet 127.0.0.1 6899连接子进程的调试界面,连接成功后如下:

子进程停在print('module name:', __name__)代码行。子进程调试界面的操作与主进程一样,就不再赘述。

当然,调试Popen打开的子进程也类似用法,下面贴出示例代码:

主进程代码:

# -*- coding: utf-8 -*-

from subprocess import Popen, PIPE

if __name__ == '__main__':

cmd = ['python', 'subprocess_run.py']

process = Popen(cmd, stdin=PIPE)

process.stdin.close()

if process.wait() != 0:

print("There were some errors")

子程序代码subprocess_run.py:

# -*- coding: utf-8 -*-

from datetime import date

from pudb.remote import set_trace

def example_run():

today = date.today()

set_trace()

print('today is data: {}'.format(today))

if __name__ == '__main__':

example_run()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值