pdb在python程序中应用
1.什么是pdb?
pdb是python提供的调试程序的一种工具。
2.为什么需要pdb模块?
当我们的程序越写越大的时候,我们用print xxx 这种方式打断点,调试,非常不方便,这个时候我们需要专业的调试工具
3 如何使用pdb模块?
#!/usr/bin/env python
#coding:utf-8 import pdb def a():
print "this is a" def b():
print "this is b" def c():
print "this is c" def main():
pdb.set_trace()
a()
print "a is done"
print "---------------"
pdb.set_trace()
b()
print "b is done"
print "---------------"
pdb.set_trace()
c()
print "c is done"
print "--------------" main()
我们写了这样一个程序,在行首import了pdb模块
然后在需要打断点插入这么一行代码 pdb.set_trace(),然后我们在执行的时候就变成这样
root@SSS:/data/last/rebootMon/nbNet# python pdb_test.py
> /data/last/rebootMon/nbNet/pdb_test.py(18)main()
-> a()
(Pdb)
这个时候我们可以敲入对应指令,达到对应效果
n ---> 下一行:
start
> /data/last/rebootMon/nbNet/pdb_test.py(19)main()
-> a()
(Pdb) n
this is a
> /data/last/rebootMon/nbNet/pdb_test.py(20)main()
-> print "a is done"
(Pdb) n
a is done
> /data/last/rebootMon/nbNet/pdb_test.py(21)main()
-> print "---------------"
(Pdb) n
---------------
> /data/last/rebootMon/nbNet/pdb_test.py(22)main()
-> pdb.set_trace()
(Pdb) n
> /data/last/rebootMon/nbNet/pdb_test.py(23)main()
-> b()
(Pdb) n
this is b
> /data/last/rebootMon/nbNet/pdb_test.py(24)main()
-> print "b is done"
(Pdb) n
b is done
> /data/last/rebootMon/nbNet/pdb_test.py(25)main()
-> print "---------------"
(Pdb) n
---------------
> /data/last/rebootMon/nbNet/pdb_test.py(26)main()
-> pdb.set_trace()
(Pdb) n
> /data/last/rebootMon/nbNet/pdb_test.py(27)main()
-> c()
(Pdb) n
this is c
> /data/last/rebootMon/nbNet/pdb_test.py(28)main()
-> print "c is done"
(Pdb) n
c is done
> /data/last/rebootMon/nbNet/pdb_test.py(29)main()
-> print "--------------"
(Pdb) n
--------------
--Return--
我们可以看到当代码执行到一个断点的位置就会阻塞住,然后我们每敲一次n都会往下执行一行代码。
p ---> 打印:
假如我们程序是这样
#!/usr/bin/env python
#coding:utf-8 import pdb def a(msg):
print "this is %s",msg def b(msg):
print "this is %s"% msg def c(msg):
print "this is %s"%msg def main():
msg1 = 'a'
msg2 = 'b'
msg3 = 'c'
print "start"
pdb.set_trace()
a(msg1)
print "a is done"
print "---------------"
pdb.set_trace()
b(msg2)
print "b is done"
print "---------------"
pdb.set_trace()
c(msg3)
print "c is done"
print "--------------" main()
我们想打印变量的值,就可以这样
root@SSS:/data/last/rebootMon/nbNet# python pdb_test.py
start
> /data/last/rebootMon/nbNet/pdb_test.py(22)main()
-> a(msg1)
(Pdb) p msg1
'a'
(Pdb)
l ---> 展示:
root@SSS:/data/last/rebootMon/nbNet# python pdb_test.py
start
> /data/last/rebootMon/nbNet/pdb_test.py(22)main()
-> a(msg1)
(Pdb) l
17 msg1 = 'a'
18 msg2 = 'b'
19 msg3 = 'c'
20 print "start"
21 pdb.set_trace()
22 -> a(msg1)
23 print "a is done"
24 print "---------------"
25 pdb.set_trace()
26 b(msg2)
27 print "b is done"
(Pdb) n
this is %s a
> /data/last/rebootMon/nbNet/pdb_test.py(23)main()
-> print "a is done"
(Pdb) n
a is done
> /data/last/rebootMon/nbNet/pdb_test.py(24)main()
-> print "---------------"
(Pdb) l
19 msg3 = 'c'
20 print "start"
21 pdb.set_trace()
22 a(msg1)
23 print "a is done"
24 -> print "---------------"
25 pdb.set_trace()
26 b(msg2)
27 print "b is done"
28 print "---------------"
29 pdb.set_trace()
b ---> 动态生成断点
我们先重写代码
#!/usr/bin/env python
#coding:utf-8 import pdb def a(msg):
print "this is %s",msg def b(msg):
print "this is %s"% msg def c(msg):
print "this is %s"%msg def main():
msg1 = 'a'
msg2 = 'b'
msg3 = 'c'
print "start"
while 1:
pdb.set_trace()
print "a is start"
a(msg1)
print "a is done"
print "---------------"
pdb.set_trace()
print "b is start"
b(msg2)
print "b is done"
print "---------------"
pdb.set_trace()
print "c is start"
c(msg3)
print "c is done"
print "--------------" main()
-> print "a is start"
(Pdb) l
18 msg2 = 'b'
19 msg3 = 'c'
20 print "start"
21 while 1:
22 pdb.set_trace()
23 -> print "a is start"
24 a(msg1)
25 print "a is done"
26 print "---------------"
27 pdb.set_trace()
28 print "b is start"
(Pdb) b 25
Breakpoint 1 at /data/last/rebootMon/nbNet/pdb_test.py:25
(Pdb) n
a is start
> /data/last/rebootMon/nbNet/pdb_test.py(24)main()
-> a(msg1)
(Pdb) n
this is %s a
> /data/last/rebootMon/nbNet/pdb_test.py(25)main()
-> print "a is done"
(Pdb) n
a is done
> /data/last/rebootMon/nbNet/pdb_test.py(26)main()
-> print "---------------"
我们 输入 b25 增加了一个断点
然后我们输入n 就跳到 25行。
q --退出:
退出交互
---使用动态变量
(Pdb) !x = 123
(Pdb) p x
123
pdb在python程序中应用的更多相关文章
- 在Python程序中的进程操作,multiprocess.Process模块
在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...
- python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...
- python程序中使用MySQL数据库
目录 python程序中使用MySQL数据库 1 pymysql连接数据库 2 sql 注入 3 增删改查操作 4 pymysql使用总结 python程序中使用MySQL数据库 1.python中使 ...
- Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- Python程序中的线程操作(线程池)-concurrent模块
目录 Python程序中的线程操作(线程池)-concurrent模块 一.Python标准模块--concurrent.futures 二.介绍 三.基本方法 四.ProcessPoolExecut ...
- PDB调试Python程序
pdb是python内置的调试工具, 它可以在终端中调试Python程序, 这允许pdb在很多无法安装IDE的服务器上使用. 虽然远程调试使用广泛, 但在必要的时候(比如难以在本地搭建运行环境)pdb ...
- python 程序中调用go
虽然python优点很多,但是有一个致命的缺点就是运行速度太慢,那么python程序需要一些计算量比较大的模块时一般会调用c或者c++的代码来重写,但是c/c++编写代码代价太高,耗费太多的人力.那么 ...
- Python程序中的进程操作
之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...
- 在Python程序中调用Java代码的实现
<原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html> 前言 开发Python程序,需求中需要用到Ja ...
随机推荐
- SPOJ - LIS2 Another Longest Increasing Subsequence Problem
cdq分治,dp(i)表示以i为结尾的最长LIS,那么dp的递推是依赖于左边的. 因此在分治的时候需要利用左边的子问题来递推右边. (345ms? 区间树TLE /****************** ...
- ssh key一键自动化生成公钥私钥,并自动分发上百服务器免密码交互
题记:由于工作需要管理大量服务器,所以需要配公钥实现免密登录. ssh批量分发可以一键执行这个操作,但是使用ssh分发服务还需要对各个服务器进行.ssh/id_dsa.pub公钥上传,密码验证.所以需 ...
- 2017.10.28 针对Java Web应用中错误异常处理方法的运用
针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...
- 如何让HttpWebRequest使用指定网络接口传输数据
using System; using System.Net; class Program { public static void Main () { foreach (var ip in Dns. ...
- HttpServletRequest request 获取form参数的两种方式
@RequestMapping(value="/pay",method = RequestMethod.POST) public String buildRequest(HttpS ...
- 【洛谷P1064】[NOIP2006] 金明的预算方案
金明的预算方案 显然是个背包问题 把每个主件和它对应的附件放在一组,枚举每一组,有以下几种选法: 1.都不选 2.只选主件 3.一个主件+一个附件 4.一个主件+两个附件 于是就成了01背包.. #i ...
- orderBy 过滤器
orderBy 过滤器根据表达式排列数组: <!DOCTYPE html><html><head><meta http-equiv="Content ...
- 瓣呀,一个基于豆瓣api仿网易云音乐的开源项目
整体采用material design 风格,本人是网易云音乐的粉丝,所以界面模仿了网页云音乐,另外,项目中尽量使用了5.0之后的新控件. 项目整体采用mvp+rxjava+retrofit 框架,使 ...
- ant Design表单验证笔记
1.pattern正则验证 <Col md={12} sm={24}> <FormItem {...formItemLayout} label="班数"> ...
- a链接打开另外的新页面
在a标签添加target = "_blank" 属性即可