Python
常用调试方式
pdb
- break 或 b 设置断点 设置断点
- continue 或 c 继续执行程序
- list 或 l 查看当前行的代码段
- step 或 s 进入函数
- return 或 r 执行代码直到从当前函数返回
- exit 或 q 中止并退出
- next 或 n 执行下一行
- pp 打印变量的值
- help 帮助
批量执行输出
1 2 3 4 5 6
| (Pdb) commands 1 (com) p some_variable (com) p another (com) end (Pdb) c
|
侵入式断点
断点
1 2
| import pdb pdb.set_trace()
|
条件断点
1 2 3 4
| while a > 0: if a == 15: print(a) pdb.set_trace()
|
条件断点
多线程调试
pdb原生不支持多线程调试,但是基于这个开发的不少第三方库支持, 可能rpdb?详见下述
稍后讲下pycharm
多线程调试
pycharm常用
条件断点
多线程调试
pycharm是开发了pydevd这个插件来完成的远程调试、多线程调试的功能
健壮的logging机制
对于代码量一大,手动gdb肯定不方便,又不像二进制程序会出现coredump,所以gdb的backtrace
经常需要用来排查段错误。
日志才是最主要的排查手段,通过等级控制,打开debug日志复现一次,日志足够详细就能直接定位到问题行。如果不够详细,就需要补充了。
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import logging from logging.handlers import RotatingFileHandler
log_path = "./res/a.log" logger = logging.getLogger("a") logger.setLevel(logging.DEBUG) fh = RotatingFileHandler(log_path, maxBytes=200000, backupCount=7, encoding="utf-8") fh.setLevel(logging.INFO) console = logging.StreamHandler() console.setLevel(logging.DEBUG) fomatter = logging.Formatter('%(asctime)s\t%(module)s\t%(message)s', '%Y-%m-%d %H:%M:%S') fh.setFormatter(fomatter) console.setFormatter(fomatter) logger.addHandler(fh) logger.addHandler(console)
|
远程同步
- vscode: sftp
- pycharm: deployment
vscode:sftp
Example
1 2 3 4 5 6 7 8 9 10 11
| { "name": "Profile Name", "host": "name_of_remote_host", "protocol": "ftp", "port": 21, "secure": true, "username": "username", "remotePath": "/public_html/project", "password": "password", "uploadOnSave": true }
|
基于pycharm的deployment
配置
参考文档
- pdb — The Python Debugger — Python 3.8.3 documentation
段错误分析
FAQ
py-bt Unable to locate python frame
最后更新时间:
欢迎评论~