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。
方法是:
- 在
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
参考:
Python调试工具
Python调试工具的更多相关文章
- 我常用的 Python 调试工具 - 博客 - 伯乐在线
.ckrating_highly_rated {background-color:#FFFFCC !important;} .ckrating_poorly_rated {opacity:0.6;fi ...
- python调试工具pdb
pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令 简写命令 作用 break b 设置断点 continue c 继续执行程序 list l 查看当前行的代码段 step ...
- Python调试工具-Spyder
OS:Windows 7 关键字:Python IDE, Spyder 1.安装工具pip:https://pip.pypa.io/en/latest/installing.html 下载 get-p ...
- 常用的 Python 调试工具,Python开发必读-乾颐堂
以下是我做调试或分析时用过的工具的一个概览.如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍. 日志 没错,就是日志.再多强调在你的应用里保留足量的日志的重要性也不为过.你应当对重要的内容 ...
- Python 调试工具PySnooper
相信很多小伙伴平时写python的时候都是需要调试程序的,出问题了,需要了解函数内部是怎么跑的,而这个时候很多人都会想到在疑惑的地方使用print函数来打印一下参数来调试.虽然用print也是不失为是 ...
- python调试工具remote_pdb
介绍一个调试python代码的工具:remote_pdb https://pypi.org/project/remote-pdb/ 安装 pip install remote-pdb 使用 1,设置断 ...
- python 调试工具
https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...
- python调试工具----pycharm快捷键及一些常用设置
pycharm快捷键及一些常用设置 Alt+Enter 自动添加包Ctrl+t SVN更新Ctrl+k SVN提交Ctrl + / 注释(取消注释)选择的行Ctrl+Shift+F 高级查找Ctrl+ ...
- 一个牛逼的 Python 调试工具PySnooper
原文转自:https://mp.weixin.qq.com/s/OtLr-cNethboMgmCcUx2pA PySnooper 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何 ...
随机推荐
- Spring boot 梳理 - @Conditional
@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置. spring框架还 ...
- PyCharm中创建项目时,在所创建的python虚拟环境下的pip失效
在这篇博文里,我简单地叙述了我在使用PyCharm创建一个flask项目时遇到的问题,以及我解决这个问题的过程.其中比较值得注意的点有:①PyCharm创建新项目时的解释器配置②Python虚拟环境的 ...
- uC/OS-III 时钟节拍(一)
时钟节拍就是操作系统的时基,操作系统要实现时间上的管理,必须依赖于时基(时基即时间基准,操作系统的基准时钟). uC/OS-III时钟节拍的实现过程 时钟节拍就是系统以固定的频率产生中断(时基中断), ...
- 在vue的mounted下使用setInterval的误区
1. vue对象的生命周期 1). 初始化显示(只执行一次) * beforeCreate() * created() * beforeMount() * mounted() 2). 更新状态(可执行 ...
- java架构之路-(JVM优化与原理)JVM类的加载机制
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
- 瀑布流实例及懒加载(echo.js)
瀑布流布局: 图片等宽,不定高,按最低高度来顺序排列:实现方法:获取每次获取四行中最低高度对应的一行,将下一张加载的图片放在该位置,每次加载前都获取最低高度: ①请求图片的接口 地址此php文件 ...
- (八十二)c#Winform自定义控件-穿梭框
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- [Note] 使用Code Snippet简化编码
使用NewtonSoft.Json写实体类时大量格式一致的代码出现 ,这时可以使用Code snippet来加快编码速度 [JsonProperty(PropertyName = "mess ...
- MySQL 复制已存在的表生成新表
从已有的表创建一个新的空表 CREATE TABLE new_table LIKE old_table; 注意: create table ... like 创建的表会保留原有表的字段.索引的定义,但 ...
- 检测 IP的正则表达式
... /*ip正则表达式*/ /^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})| ...