Python调试工具

2019-11-03 来源: Xjng 发布在  https://www.cnblogs.com/Xjng/p/11787397.html

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: <module>   # 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)<module>()
-> 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。

方法是:

  1. Settings-Project Interpreter 里面点击Project Interpreter右边的配置,点击Add
  2. 选择SSH Interpreter
  3. 如果已有远程同步代码配置,就选择Existing Server configuration
  4. 否则就选择New server configuration ,设置远程机的IP和ssh端口和用户名,密码等
  5. 设置远程机的Python地址,例如/data/env/bin/python
  6. 设置Sync folders。这个是windows和远程机的目录映射,例如E://project映射到/data/project。那如果执行E://project/test.py脚本就相当于执行/data/project/test.py脚本
  7. 创建测试的脚本,test.py
  8. 打开Run-Edit Configurations,修改test.pyPython interpreter为刚才设置的Remote Python
  9. 点击 run test.py 就能在远程机执行这个脚本了,console会展示远程机的console
  10. 除了run,也可以debug

参考:
Python调试工具

相关文章