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 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何 ...
随机推荐
- js中的计时器事件`setTimeout()` 和 `setInterval()`
js中的计时器事件 在js中,通常会有一些事件,我们需要让它 间隔一段时间之后再发生,或者 每隔一段时间 发生一次,那就需要用到我们js中的计时事件 计时事件主要有两种: setTimeout() - ...
- 如何把安全证书导入到java中的cacerts证书库
每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载, 在该网页上右键 >> 属性 >> 点击"证书" >> 再 ...
- [数学基础]奇异值分解SVD
之前看到过很多次奇异值分解这个概念,但我确实没有学过.大学线性代数课教的就是坨屎,我也没怎么去上课,后来查了点资料算是搞清楚了,现在写点东西总结一下. 奇异值分解,就是把一个矩阵拆成一组矩阵之和.在数 ...
- JAVA TCP/IP网络通讯编程(一)
一个实例通过client端和server端通讯 客户端发送:“我是客户端,请多关照” 服务端回复:“收到来自于"+s.getInetAddress().getHostName()+" ...
- 快学Scala 第十九课 (trait的abstract override使用)
trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super ...
- Windows和Mac系统下安装Docker
在windows和mac系统中使用Docker Desktop安装Docker对系统的要求是很高的. 对于 Windows 系统来说,安装 Docker for Windows 需要符合以下条件: 必 ...
- Java为什么需要四种引用?
首先抛出一个问题:在闲暇时间收拾自己家里的时候,对某一件物件要不要丢弃的问题上,是否有过食之无味,弃之可惜的感觉? 同样的,JVM在回收Java对象的时候,是否对对象实例也有食之无味,弃之可惜的感受? ...
- Linux下mysql相关操作
Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...
- 云计算之走进LINUX(一)
引言 小比特的随笔: 亲爱的博友所有随笔部分记录的是小比特的一些学习笔记,阅读性不是太强仅供有基础的博友参考,对小白来说阅读起来可能会有些吃力.当然也可以参考啦!小比特将在文章部分提供详细的内容介绍供 ...
- python selenium自动化常用关键字
工具安装: 1.安装python 2.安装selenium库(dos命令下进入selenium-2.53.2存放路径,执行pip install selenium-2.53.2) 3.将浏览器驱动放到 ...