zoukankan      html  css  js  c++  java
  • 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: <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调试工具

  • 相关阅读:
    NOIP2018 游记
    HDU1556 敌兵布阵
    BZOJ 1032 [JSOI2007]祖码Zuma
    BZOJ 1068 [SCOI2007]压缩
    BZOJ 1090 [SCOI2003]字符串折叠
    BZOJ 1260 [CQOI2007]涂色paint
    BZOJ 1055 [HAOI2008]玩具取名
    HDU 5151 Sit sit sit
    HDU 4283 You Are the One
    vue系列8:webpack
  • 原文地址:https://www.cnblogs.com/Xjng/p/11787397.html
Copyright © 2011-2022 走看看