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 ...
随机推荐
- poj 3485 区间选点
题目链接:http://poj.org/problem?id=3485 题意:X轴上公路从0到L,X轴上下有一些点给出坐标代表村庄,问在公路上最少建几个出口才能使每个村庄到出口的距离不超过D. 以村庄 ...
- jade简介
模板引擎:将动静部分糅合的一种实现机制或者技术 var items = [ {title:'..',photo:'http://',id:1,desc:'a'}, {title:'..',photo: ...
- Java连接mysql中遇到的一些问题及解决方法
1.Java使用mysql-jdbc连接MySQL出现如下警告: Establishing SSL connection without server's identityverification i ...
- MySQL游标(cursor) 定义及使用
概念 游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集. 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式. 用SQL语言从数据库中检索数据后,结果 ...
- mayan 游戏真是毒瘤
如题 真坑呀!!! 可算过了 我率先达到了氧气富有化 先是改变时没有fall.40分 然后是fall函数写慢了 tle 50分 . 上代码 #include<cstdio> #includ ...
- 第34章 IWDG—独立看门狗—零死角玩转STM32-F429系列
第34章 IWDG—独立看门狗 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- jQuery选择器与事件学习笔记
层次选择器: $("div li")获取div下的所有li元素(后代.子.子的子......) $("div>li")获取div下的直接li子元素. ...
- Json数据常用操作
JSON字符串: var str1 = '{ "name": "cs", "sex": "man" }'; JSON对象 ...
- 利用deadline_timer实现定时器Timer
// 类似QTimer的定时器 class Timer { typedef void(* handler)(); public: Timer() : m_millseconds() , m_timer ...
- 【杂题总汇】NOIP2013(洛谷P1967) 货车运输
[洛谷P1967] 货车运输 重做NOIP提高组ing... +传送门-洛谷P1967+ ◇ 题目(copy from 洛谷) 题目描述 A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道 ...