简说Python之ipython的pdb调试
系统环境:Ubuntu 18.04.1 LTS
Python使用的是虚拟环境:virutalenv
Python的版本:Python 3.6.9
简说Python之ipython
1.安装ipython
pip install ipython
2.ipython的使用
In [1]: run utils.py
In [2]: cat utils.py
# coding=utf-8
import os
import hashlib
from functools import partial
from config import UPLOAD_FOLDER
HERE = os.path.abspath(os.path.dirname(__file__))
def get_file_md5(f, chunk_size=8192):
h = hashlib.md5()
while True:
chunk = f.read(chunk_size)
if not chunk:
break
h.update(chunk)
return h.hexdigest()
def humanize_bytes(bytesize, precision=2):
abbrevs = (
(1 << 50, 'PB'),
(1 << 40, 'TB'),
(1 << 30, 'GB'),
(1 << 20, 'MB'),
(1 << 10, 'kB'),
(1, 'bytes')
)
if bytesize == 1:
return '1 byte'
for factor, suffix in abbrevs:
if bytesize >= factor:
break
return '%.*f %s' % (precision, bytesize / factor, suffix)
get_file_path = partial(os.path.join, HERE, UPLOAD_FOLDER)
In [3]: humanize_bytes(100)
Out[3]: '100.00 bytes'
In [4]: humanize_bytes(430004)
Out[4]: '419.93 kB'
In [5]: humanize_bytes(430004342342)
Out[5]: '400.47 GB'
这样可以不启动所有的py程序,直接测试某一个函数的功能。通过输入参数,得到输出。
函数的性质,把它看成一个黑盒子。测试它的输入输出。
humanize_bytes通过测试可以知道,它就是格式化数字,统计为多少字节,KB,MB,GB等。
3.ipython的debug调试。
python写了一个简单的递归程序
(zsdpy1) $ vi recursive.py
# coding=utf-8
def recu(n):
print ("level 1 value :",n);
if(n>2):
recu(n-1)
print ("--level 2 value :",n);
recu(5)
进入调试
In [4]: run -d recursive.py
1 # coding=utf-8
----> 2 def recu(n):
3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1)
- b设置断点命令,进入调试模式输入b xx(xx为行数)。
- n命令单步执行,不会进入函数内部
- s命令单步执行,会进入函数内部
- a是打印出当前函数的参数值
- j 是跳转到某一行执行有点类似b和c指令结合,具体使用j xx(xx为行数)
- q,退出pdb调试模式
这里我们输入s命令,单步调试,看看这个递归程序是如何运行的。
ipdb> s
## 直接跳入到了recu(5)的过程
> /home/zsd/web_develop/recursive.py(8)<module>()
4 if(n>2):
5 recu(n-1)
6 print ("--level 2 value :",n);
7
----> 8 recu(5)
ipdb> s
## 运行recu(n)的函数
> /home/zsd/web_develop/recursive.py(2)recu()
1 # coding=utf-8
----> 2 def recu(n):
3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1)
## 输出函数值5
> /home/zsd/web_develop/recursive.py(3)recu()
1 # coding=utf-8
2 def recu(n):
----> 3 print ("level 1 value :",n);
4 if(n>2):
5 recu(n-1)
ipdb> s
level 1 value : 5
> /home/zsd/web_develop/recursive.py(4)recu()
2 def recu(n):
3 print ("level 1 value :",n);
----> 4 if(n>2):
5 recu(n-1)
6 print ("--level 2 value :",n);
然后就会一直循环,到2的时候,在循环出来。有兴趣的可以s继续单步调试
其输出结果是:
level 1 value : 5
level 1 value : 4
level 1 value : 3
level 1 value : 2
--level 2 value : 2
--level 2 value : 3
--level 2 value : 4
--level 2 value : 5
简说Python之ipython的pdb调试的更多相关文章
- python学习笔记之pdb调试
之前一直说要学python可还是一直停留在看的层面,昨天大神手把书教我pdb调试,说要摆脱IDE集成开发环境编程,感激不尽,立一个flag,python一定要入门! 1.进入方式 1)windows ...
- python学习笔记012——pdb调试
1 描述 pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能, 主要特性包括设置断点.单步调试.进入函数调试.查看当前代码.查看栈片段.动态改变变量的值等 调 ...
- PDB调试Python程序
pdb是python内置的调试工具, 它可以在终端中调试Python程序, 这允许pdb在很多无法安装IDE的服务器上使用. 虽然远程调试使用广泛, 但在必要的时候(比如难以在本地搭建运行环境)pdb ...
- 使用pdb调试python
python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...
- python 用pdb调试
简单调试 Python 程序 在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py ...
- python pdb调试以及sublime3快捷键设置
python pdb调试以及sublime3快捷键设置 pdb调试 如果对gdb比较熟悉的话,pdb就很容易上手.以一个demo快速了解常用的调试命令. def test(a): while True ...
- Python 代码使用pdb调试技巧
Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 pyt ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- pdb 调试
以前写python一直用pycharm,调试啥的比较方便,最近要在远程服务器上调试一些程序,只有一个控制台就可以用pdb进行调试了.常用的只有几个命令. break 或 b 设置断点 continue ...
- 在 Python 中使用 GDB 来调试 转载
2013/11/01 | Comments 大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已. 另外还有强悍的 jStack 和 jConso ...
随机推荐
- windows系统cmd切换盘符路径命令失效
问题描述:比如当我在C盘想切换到D盘的某个文件夹路径下时 只是输出了那个路径 但是并没有真的切换 这时候需要再多操作一步就会成功了
- SQLSERVER 的表分区(水平) 操作记录2
1 ----(非原创只是自己整理记录!!!)---------------原文地址: https://www.cnblogs.com/libingql/category/184251.h ...
- 使用OpenMP与AVX优化矩阵乘法
使用OpenMP与AVX优化矩阵乘法 由于课设内容做的太过简(mo)单(yu),于是在去年12月初的时候就计划写三篇博客随笔作为实验报告,前两篇简单介绍了OpenMP和SIMD指令进行铺垫,本篇将会介 ...
- Python读写json文件--json
import json # 将数据写入json文件 def json_write_file(): data={'name':'张三','age':12} with open('json.json',' ...
- HarmonyOS 电话服务开发指导
电话服务开发概述 HarmonyOS 电话服务系统提供了一系列的 API 用于拨打电话.获取无线蜂窝网络和 SIM 卡相关信息. 应用可以通过调用 API 来获取当前注册网络名称.网络服务状态.信号强 ...
- 开发指导—利用组件&插值器动画实现HarmonyOS动效
一. 组件动画 在组件上创建和运行动画的快捷方式.具体用法请参考通用方法. 获取动画对象 通过调用animate方法获得animation对象,animation对象支持动画属性.动画方法和动画事件. ...
- 第十四篇:JavaScript基础
一.CSS内容补充之position 10.position:fixed:固定div在页面的一个位置: top:0; right:0; left:0; position:absolute + rela ...
- Linux CentOs6.4 静态IP 设置
Linux CentOs6.4 静态IP 设置 分类: IT技术 2013-04-07 09:20 2330人阅读 评论(1) 收藏 举报 To do that, just log on as ...
- redis 简单整理——java 客户端jedis[十六]
前言 简单介绍一下java客户端jedis. 正文 Java有很多优秀的Redis客户端(详见:http://redis.io/clients#java),这 里介绍使用较为广泛的客户端Jedis,本 ...
- python mmsql连接支持
前言 因为我使用的是mmsql数据库,因为遇到一点坑,所以发布出来. 正文 准备工作: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql 下载对应 ...