python在线运行调试-Python调试工具

1. 日志

通过日志或者print来打印变量。必要时可以打印locals()和globals()

建议使用logging.debug()来代替print,这样到了正式环境,就可以统一删除这些日志。

2.trace

Python有个trace模式,可以打印整个程序的执行流

# encoding=utf8

def f():

print "aa"

if __name__ == "__main__":

f()

例如这段简单的程序,执行python -mtrace –trace test.py就会输出下面的日志:

— modulename: test, funcname: # test模块,module级函数

test.py(2): def f(): #test.py的第2行,执行def f命令定义函数

test.py(6): if __name__ == "__main__":

test.py(7): f()

— modulename: test, funcname: f

test.py(3): print "aa"

aa

— modulename: trace, funcname: _unsettrace

trace.py(80): sys.settrace(None)

可以详细得看到这代代码在Python中的执行流程。

当代码比较复杂,例如调用了一些第三方库,这个trace日志就会非常多,所以最好重定向到一个文件里面,慢慢分析。

3.PDB

# encoding=utf8

import pdb

def f2():

a = 1

pdb.set_trace() # 设置断点

b = 2

c = a + b

pdb.set_trace()

if __name__ == "__main__":

f2()

在代码里面设置断点。执行代码python -mpdb test.py,就可以调试程序了。进程会在断点处暂停运行,等待我们执行命令

(vsing_env) [root@www script]# python -mpdb test.py

> /data/selfmoe_backend/script/test.py(2)()

-> import pdb

(Pdb) c

> /data/selfmoe_backend/script/test.py(13)f2()

-> b=2

(Pdb) p a

1

(Pdb) l

8 cli=redis.Redis(host="127.0.0.1",port="6801")

9 cli.get("test")

10 def f2():

11 a=1

12 pdb.set_trace()

13 -> b=2

14 c=a+b

15 pdb.set_trace()

16 if __name__ == "__main__":

17 f2()

[EOF]

断点处可以执行的命令有:

c continue 继续

q quit 退出

l list 显示断点前后的源码

w or where 回溯执行到当前断点的过程

d down 回溯的下一页

u up 回溯的上一页

回车 重复最后一个命令,例如就不用一直按c,可以只按回车

其他分支

ipdb pdb的基础上增加颜色,自动补齐

pudb gui版本

winpdb 远程调试,在windows调试linux的进程

上面几个库的接口和pdb都是一样的。

4.Pycharm

使用Pycharm这个IDE进行调试。这个功能就比较强大了。

Pycharm也支持远程调试。也就是在windows界面操作,进程运行在linux。

方法是:

在Settings-Project Interpreter 里面点击Project Interpreter右边的配置,点击Add

选择SSH Interpreter

如果已有远程同步代码配置,就选择Existing Server configuration

否则就选择New server configuration ,设置远程机的IP和ssh端口和用户名,密码等

设置远程机的Python地址,例如/data/env/bin/python

设置Sync folders。这个是windows和远程机的目录映射,例如E://project映射到/data/project。那如果执行E://project/test.py脚本就相当于执行/data/project/test.py脚本

创建测试的脚本,test.py

打开Run-Edit Configurations,修改test.py的Python interpreter为刚才设置的Remote Python

点击 run test.py 就能在远程机执行这个脚本了,console会展示远程机的console

除了run,也可以debug

Published by

风君子

独自遨游何稽首 揭天掀地慰生平