`

用PDB库调试Python程序

阅读更多

如果使用过微软技术的朋友应该体会过微软的Visual Studio系列IDE给debug程序带来的方便,换了个工作就没有Visual Studio了,对于我这种从未在非GUI环境下调试过程序的人来说实在有点不爽,今天花了点时间看了一下Python自带的pdb库,发现用pdb来调 试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。

用pdb调试有多种方式可选:

1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前
python -m pdb myscript.py

2. 在Python交互环境中启用调试
>>> import pdb
>>> import mymodule
>>> pdb.run(‘mymodule.test()’)

3. 比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的

if __name__ == "__main__":
    a = 1
    import pdb
    pdb.set_trace()
    b = 2
    c = a + b
    print (c)

然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了

常用的调试命令

  • h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令
  • l(ist),可以列出当前将要运行的代码块

(Pdb) l
497 pdb.set_trace()
498 base_data = {}
499 new_data = {}
500 try:
501 execfile(base_file_name,{},base_data)
502 -> execfile(new_file_name,{},new_data)
503 except:
504 logger.writeLog(“error! load result log error!”)
505 print “load cmp logs error!”
506 raise Exception, “load cmp logs error!”
507

  • b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点

(Pdb) b 504
Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504

  • condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3”

(Pdb) condition 4 a==3
(Pdb) b
Num Type Disp Enb Where
4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
stop only if a==3

  • cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点

(Pdb) cl
Clear all breaks? y

  • disable/enable,禁用/激活断点

(Pdb) disable 3
(Pdb) b
Num Type Disp Enb Where
3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505

  • n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的

 

  • s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中
  • c(ont(inue)),让程序正常运行,直到遇到断点
  • j(ump),让程序跳转到指定的行数

(Pdb) j 497
> /home/jchen/regression/regressionLogCMP.py(497)compareLog()
-> pdb.set_trace()

  • a(rgs),打印当前函数的参数

(Pdb) a
_logger =
_base = ./base/MRM-8137.log
_new = ./new/MRM-8137.log
_caseid = 5550001
_toStepNum = 10
_cmpMap = {‘_bcmpbinarylog’: ‘True’, ‘_bcmpLog’: ‘True’, ‘_bcmpresp’: ‘True’}

  • p,最有用的命令之一,打印某个变量

(Pdb) p _new
u’./new/MRM-8137.log’

  • !,感叹号后面跟着语句,可以直接改变某个变量
  • q(uit),退出调试

发现在命令行下调试程序也是一件挺有意思的事情,记录下来分享一下

分享到:
评论

相关推荐

    总结用Pdb库调试Python的方式及常用的命令

    使用 Pdb调试 Python的程序的方式主要是下面的三种!下面逐一介绍 命令行加-m参数 命令行启动目标程序,加上-m参数,这样调用 testPdb.py的话断点就是程序执行的第一行之前 本文接下来重点讲到的实例展示就是使用...

    使用PDB简单调试Python程序简明指南

    在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): 复制代码 代码如下: $ vi d.py #!/usr/bin/python def main():  i, sum = 1, 0  for i in ...

    Python-WebPDB是一个用于Python内置PDB调试器的web界面

    WebPDB将PDB的调试功能与现代Web技术相结合,允许用户通过Web浏览器来远程调试Python程序。这带来了几个显著的优点: 1. **远程调试**:无论你在哪里,只要有网络连接,就可以通过Web浏览器访问并控制远程服务器上...

    使用pdb模块调试Python程序实例

    在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的调试工具:Python自带的pdb模块。pdb是Python自带的调试模块。使用pdb模块可以...

    Python中使用PDB库调试程序

    Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。 用pdb调试有多种方式可选: 1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的...

    使用PDB模式调试Python程序介绍

    调试Python程序是软件开发过程中不可或缺的环节,尤其是当程序出现异常行为或难以追踪的bug时。PDB提供了丰富的命令供用户使用,以便更加高效地定位和解决问题。 首先,PDB模式的使用语法非常简单。用户可以通过在...

    python脚本pdb调试工具使用.pdf

    Python 脚本 pdb 调试工具使用 Python 脚本 pdb 调试工具是 Linux 上的一款功能齐全、使用方便的调试工具。作为一名运维工程师,学习 Python 语言通常是在 shell 基础上开始的,由于 shell 脚本的调试方法简单直接...

    python-2.7.6.amd64-pdb

    2. `_bsddb.pdb`:这个是Berkeley DB接口模块的pdb文件,允许Python程序使用键值存储数据库。 3. `_ssl.pdb`:这是Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 模块的pdb文件,用于加密通信。 4....

    Python使用pdb调试代码的技巧

    Python的pdb模块是内置的调试器,它提供了一个交互式的环境,用于检查程序运行时的状态,帮助开发者定位和修复代码中的错误。pdb允许你在代码中设置断点,逐行执行代码,查看变量的值,以及跟踪函数调用的过程。下面...

    python_27的调试库(包括lib和dll)

    描述中提到的"用于在VC6/2005下调试python的扩展和嵌入的库",意味着这些调试库是为在Visual C++ 6.0或2005环境下编写和调试Python扩展模块或嵌入式Python应用而设计的。VC++是Microsoft的C++编译器,这些版本支持...

    python-3.3.0-pdb.zip

    4. `sqlite3.pdb`:SQLite3是Python的标准库中用于本地数据库操作的部分,这个pdb文件包含了其调试信息。 5. `pyw.pdb` 和 `py.pdb`:可能分别对应Python的窗口应用程序和普通脚本的调试信息。 6. `_freeze_...

    python-2.7.3-pdb.zip

    6. `_ctypes.pdb`:ctypes是一个可以用来调用C库的Python模块,这个pdb文件用于调试使用ctypes进行C库交互的代码。 7. `pyexpat.pdb`:Expat是一个XML解析器,pyexpat是Python对它的封装。pdb文件用于XML处理中的...

    Python-2.7.10.amd64-pdb.zip

    "pdb"在Python中代表Python调试器(Python Debugger),是Python标准库中的一个模块,用于帮助开发者进行源代码级别的程序调试。 此压缩包“Python-2.7.10.amd64-pdb.zip”包含了一些关键的pdb文件,这些pdb文件是...

    调试Python程序代码的几种方法总结

    本文将详细介绍几种调试Python程序的方法,主要基于Python2.x版本。 首先,最简单直接的方法就是使用print语句。这种方法通过打印出程序中某些关键变量的值,来观察程序的执行流程和变量的变化情况。比如在上面的...

    python-2.7.5.amd64-pdb.zip

    "pdb"在Python中通常指的是Python的调试器(Python Debugger),它是一个源码级的调试工具,用于帮助程序员在运行时检查程序的状态。 描述中的内容"python-2.7.5.amd64-pdb.zip"与标题相同,暗示这个压缩包包含的是...

Global site tag (gtag.js) - Google Analytics