python编程(pdb调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

  很长时间,我都以为python是没有单步调试的。也就是说,使用python不能像使用c一样快乐地单步调试,但事实上,python是可以的。和编译工具给出的单步调试不同,python的单步调试本身是作为一个lib集成在python语言里面的。今天,我们可以以一个简单的递归程序表示python是如何进行单步调试的。

一、python代码

import os
import sys
import re
import socket

def iterate(data):
    if 1 == data:
        return 1
    else:
        return iterate(data-1) +data

def main():
    print iterate(10)

if __name__ == '__main__':
    main()

二、代码说明

  上面的代码内容非常简单,主要是打印递归数据。执行的时候只要输入python基本的命令就可以了,比如这样,

linux> python run.py

  不出意外的话你会看到这样的打印,

linux> python run.py
55

三、代码的调试

  如果只是一般的python代码,这样编写倒也无可厚非。因为代码的内容本来就很少,直接自己看一下逻辑,一般来说问题也不大。但是问题来了,如果代码本身的内容就很多,那么我们应该怎么用呢,这个时候就需要用到工具帮助我们了,一般来说,python下面要么使用log,要么使用pdb。

3.1 log的使用方法

  说到log,其实就是print打印。当然复杂一点,你还可以用第三方库进行打印,比如说logging等等,使用的时候你只需要添加一个logging头就可以了,比如说像这样,

import logging  

3.2 python单步调试的方法

  在python里面单步调试非常简单。你需要做的其实就是在执行python的时候添加一些额外的条件,比如说,你需要这么执行

linux> python -m pdb run.py

这个时候呢,其实python已经进入了调试的状态了,因为你会看到下面这些内容,

feixiaoxingdeMacBook-Pro-3:Desktop feixiaoxing$  Python -m pdb run.py 
> /Users/feixiaoxing/Desktop/run.py(3)<module>()
-> import os
(Pdb)

接下来你需要做的,就是像c程序员一样,设置断点、单步、调试、检查变量,查看堆栈回溯等等,就像这样,

feixiaoxingdeMacBook-Pro-3:test feixiaoxing$ python -m pdb run.py 
> /Users/feixiaoxing/Desktop/test/run.py(1)<module>()
-> import os
(Pdb) b main
Breakpoint 1 at /Users/feixiaoxing/Desktop/test/run.py:12
(Pdb) r
> /Users/feixiaoxing/Desktop/test/run.py(13)main()
-> print iterate(10)
(Pdb) b iterate
Breakpoint 2 at /Users/feixiaoxing/Desktop/test/run.py:6
(Pdb) s
--Call--
> /Users/feixiaoxing/Desktop/test/run.py(6)iterate()
-> def iterate(data):
(Pdb) s
> /Users/feixiaoxing/Desktop/test/run.py(7)iterate()
-> if 1 == data:
(Pdb) s
> /Users/feixiaoxing/Desktop/test/run.py(10)iterate()
-> return iterate(data-1) +data
(Pdb) s
--Call--
> /Users/feixiaoxing/Desktop/test/run.py(6)iterate()
-> def iterate(data):
(Pdb) s
> /Users/feixiaoxing/Desktop/test/run.py(7)iterate()
-> if 1 == data:
(Pdb) bt
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
  <string>(1)<module>()
  /Users/feixiaoxing/Desktop/test/run.py(16)<module>()
-> main()
  /Users/feixiaoxing/Desktop/test/run.py(13)main()
-> print iterate(10)
  /Users/feixiaoxing/Desktop/test/run.py(10)iterate()
-> return iterate(data-1) +data
> /Users/feixiaoxing/Desktop/test/run.py(7)iterate()
-> if 1 == data:
(Pdb) 

  是不是还挺简单的。更多的内容,大家可以参考这里,学习更多的pdb调试知识。

  代码十行,不如手写一行;手写一行;不如单步一行。愿大家多多练习,多多实践一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值