2011-12-27 12:15:36 iteye_8146 阅读数 49
python是动态语言,编译器检查不到运行时的语法问题,而这些低级问题常常造成调试效率很低。之前在linux服务器上调试,都是通过print和异常报错来排查,简直弱爆了。python内置的pdb正是调试的利器。

我们先新建一个测试脚本:
touch debug.py

内容:
print "hello"

i = 0
for j in range(10):
i += j
print i


常用命令说明:
l #查看运行到哪行代码
n #单步运行,跳过函数
s #单步运行,可进入函数
p 变量 #查看变量值
b 行号 #断点设置到第几行
b #显示所有断点列表
cl 断点号 #删除某个断点
cl #删除所有断点
c #跳到下一个断点
r #return当前函数
exit #退出
更多的命令[url]http://docs.python.org/library/pdb.html[/url]

调试过程:
[co_ad2@localhost ~]$ python -m pdb debug.py
> /home/co_ad2/debug.py(1)<module>()
-> print "hello"
(Pdb) l
1 -> print "hello"
2
3 i = 0
4 for j in range(10):
5 i += j
6 print i
[EOF]
(Pdb) n
hello
> /home/co_ad2/debug.py(3)<module>()
-> i = 0
(Pdb) n
> /home/co_ad2/debug.py(4)<module>()
-> for j in range(10):
(Pdb) n
> /home/co_ad2/debug.py(5)<module>()
-> i += j
(Pdb) p i
0
(Pdb) p j
0
(Pdb) n
> /home/co_ad2/debug.py(4)<module>()
-> for j in range(10):
(Pdb) n
> /home/co_ad2/debug.py(5)<module>()
-> i += j
(Pdb) p i
0
(Pdb) p j
1
(Pdb) n
> /home/co_ad2/debug.py(4)<module>()
-> for j in range(10):
(Pdb) n
> /home/co_ad2/debug.py(5)<module>()
-> i += j
(Pdb) p i
1
(Pdb) p j
2
(Pdb) b 6
Breakpoint 1 at /home/co_ad2/debug.py:6
(Pdb) c
> /home/co_ad2/debug.py(6)<module>()
-> print i
(Pdb) p i
45
(Pdb) n
45
--Return--
(Pdb) exit
2014-08-14 10:03:14 soloph 阅读数 457

一般Linux下调试Python直接用print或者log来看日志确定问题,其实Python提供了一个调试库pdb,这里记录一下:

pdb一般有三种使用方式:

>>> import pdb
>>> import mymodule
>>> pdb.run('mymodule.test()')
python -m pdb myscript.py
import pdb; pdb.set_trace()
我一般使用第二种或第三种方式,第三种方式直接在需要调试的代码前面添加那句代码即可,相当于设置了断点并进入调试模式。第三种方式需要先设置断点。

常用命令说明: 
l #查看运行到哪行代码 
n #单步运行,跳过函数 
s #单步运行,可进入函数 
p 变量 #查看变量值 
b 行号 #断点设置到第几行 
b #显示所有断点列表 
cl 断点号 #删除某个断点 
cl #删除所有断点 
c #跳到下一个断点 
r #return当前函数 
exit #退出 

参考:https://docs.python.org/2/library/pdb.html

2015-10-06 09:48:14 yanjie415876780 阅读数 585

想让python也能想C一样的编译调试吗?其实很简单,python自带类似gdb的pdb库,可以实现简单的调试功能,调试命令与gdb相似,只是功能没有gdb那么强大。

import numpy as np
A=np.array([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]])
B=np.array([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
pi=np.array([0.2,0.4,0.4])
O=[0,1,0]
alpha=np.zeros((A.shape[0],len(O)))
for i in range(0,alpha.shape[0]):
        alpha[i][O[0]]=pi[i]*B[i][O[0]]
for n in range(1,len(O)):
        for i in range(0,alpha.shape[0]):
                alpha[i][O[n]]=sum(alpha[j][n-1] for j in range(0,alpha.shap    e[0]))*B[i][O[n]]
print sum(alpha[i][len(O)] for i in range(0,A.shape[0]))
  • pdb调试

    • python -m pdb test.py
    • l–>查看代码
      这里写图片描述

    • b 8–>在第八行设置断点

    • r–>运行到断点处
      这里写图片描述
    • n –>执行下一步
    • p i–>查看变量i 的值
      这里写图片描述
  • gdb常用的指令

    • h(elp) [comman] #打印可用指令及帮助信息
    • r(eturn) #运行代码直到下一个断点或当前函数返回
    • b(reak) [[filename:]lineno | function[, condition]] #指定文件某行或函数体来设置断点
    • l(ist) [first[, last]] #查看指定代码段
    • n(ext) #执行下一行
    • s(tep) #执行下一行,若为函数则进入函数体
    • p #打印某个变量
    • a(rgs) #打印当前函数的参数
    • w(here) #打印堆栈信息
    • d(own) #移至下层堆栈
    • u(p) #移至上层堆栈
    • j(ump) #跳转到指定行
    • continue / c #继续执行
    • disable [bpnumber [bpnumber]] #失效断点
    • enable[bpnumber [bpnumber]] #启用断点
    • cl(ear) [filename:lineno | bpnumber [bpnumber]] #删除断点
    • q(uit)/exit #中止调试并退出
2016-07-04 10:51:08 qk1992919 阅读数 636
python是动态语言,编译器检查不到运行时的语法问题,而这些低级问题常常造成调试效率很低。之前在linux服务器上调试,都是通过print和异常报错来排查,简直弱爆了。python内置的pdb正是调试的利器。

我们先新建一个测试脚本:
Shell代码  收藏代码
  1. touch debug.py  

内容:
Shell代码  收藏代码
  1. print "hello"  
  2.   
  3. i = 0  
  4. for j in range(10):  
  5.     i += j  
  6. print i  


常用命令说明:
l #查看运行到哪行代码
n #单步运行,跳过函数
s #单步运行,可进入函数
p 变量 #查看变量值
b 行号 #断点设置到第几行
b #显示所有断点列表
cl 断点号 #删除某个断点
cl #删除所有断点
c #跳到下一个断点
r #return当前函数
exit #退出
更多的命令http://docs.python.org/library/pdb.html

调试过程:
Shell代码  收藏代码
  1. [co_ad2@localhost ~]$ python -m pdb debug.py  
  2. > /home/co_ad2/debug.py(1)<module>()  
  3. -> print "hello"  
  4. (Pdb) l  
  5.   1  ->     print "hello"  
  6.   2        
  7.   3       i = 0  
  8.   4       for j in range(10):  
  9.   5           i += j  
  10.   6       print i  
  11. [EOF]  
  12. (Pdb) n  
  13. hello  
  14. > /home/co_ad2/debug.py(3)<module>()  
  15. -> i = 0  
  16. (Pdb) n  
  17. > /home/co_ad2/debug.py(4)<module>()  
  18. -> for j in range(10):  
  19. (Pdb) n  
  20. > /home/co_ad2/debug.py(5)<module>()  
  21. -> i += j  
  22. (Pdb) p i  
  23. 0  
  24. (Pdb) p j  
  25. 0  
  26. (Pdb) n  
  27. > /home/co_ad2/debug.py(4)<module>()  
  28. -> for j in range(10):  
  29. (Pdb) n  
  30. > /home/co_ad2/debug.py(5)<module>()  
  31. -> i += j  
  32. (Pdb) p i  
  33. 0  
  34. (Pdb) p j  
  35. 1  
  36. (Pdb) n  
  37. > /home/co_ad2/debug.py(4)<module>()  
  38. -> for j in range(10):  
  39. (Pdb) n  
  40. > /home/co_ad2/debug.py(5)<module>()  
  41. -> i += j  
  42. (Pdb) p i  
  43. 1  
  44. (Pdb) p j  
  45. 2  
  46. (Pdb) b 6  
  47. Breakpoint 1 at /home/co_ad2/debug.py:6  
  48. (Pdb) c  
  49. > /home/co_ad2/debug.py(6)<module>()  
  50. -> print i  
  51. (Pdb) p i  
  52. 45  
  53. (Pdb) n  
  54. 45  
  55. --Return--  
  56. (Pdb) exit 

转载自:http://flysnowxf.iteye.com/blog/1327677

2016-04-17 10:06:21 zgqxiexie 阅读数 369

想看使用方法的请移步http://blog.csdn.net/jerry_1126/article/details/43915609

分享一下pdb不能使用的问题解决


我在练习pdb的使用时,建立一个pdb.py文件,然后调试却失败,百思不得其解,想是不是我的python没有这个模块?于是

pip install pdb

下载安装成功,还是不能调试。
我的linux中有两个python,一个自带的2.6,一个下载的3.5,默认的pip是2.6的,是不是把模块下载到2.6中?于是我下载了新的pip,下载安装时还出现了问题,点这查看

pip安装完毕,然后又
pip install pdb
还是不行。

于是
pip show pdb
看了信息,接着去了github的主页,原来是password DB!!!密码管理!!!赶紧卸载,不然覆盖了原来的pdb。
卸载了还是不行。。。又去谷歌,试试
pip install ipdb
依然失败。。。最后从报错信息中想到了什么,,把我练习用的pdb.py改了名,然后终于好了。

pip install pdb下载的不是调试的pdb
自己创建的文件会覆盖同名模块!

linux下调试python

阅读数 122

linux python调试

阅读数 78

Linux调试python程序

阅读数 1810

没有更多推荐了,返回首页