当前位置: 首页 > news >正文

家乡网站建设可行性分析网站搜索查询

家乡网站建设可行性分析,网站搜索查询,网站怎么盈利,做阀门销售在哪个网站上做好这篇文章主要介绍了使用Python中PDB模块中的命令来调试Python代码的教程,包括设置断点来修改代码等、对于Python团队项目工作有一定帮助,需要的朋友可以参考下 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇…

这篇文章主要介绍了使用Python中PDB模块中的命令来调试Python代码的教程,包括设置断点来修改代码等、对于Python团队项目工作有一定帮助,需要的朋友可以参考下

你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多。然而,Python中有一个整洁的调试特性(像其他大多数语言一样),在这种情况下使用非常方便。本文是一篇快速教程,希望它能让你的编码生活更加容易。
1. 一个混乱的程序

出于本教程的目的,让我们研究一下下面的简单程序。

这个程序接收两个命令行参数,然后执行加法和减法操作。

(假设用户输入的是有效值,因此代码中我们没有进行错误处理。)
 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import sys

def add(num1=0, num2=0):

  return int(num1) + int(num2)

def sub(num1=0, num2=0):

  return int(num1) - int(num2)

def main():

  #Assuming our inputs are valid numbers

  print sys.argv

  addition = add(sys.argv[1], sys.argv[2])

  print addition

  subtraction = sub(sys.argv[1], sys.argv[2])

  print subtraction

if __name__ == '__main__':

  main()

2. PDB

Python提供了一个有用的模块PDB,它实际上是一个交互式源代码调试器。

你需要下面的两行代码来使用此模块。
 

1

2

import pdb

pdb.set_trace()

看一下我们修改过的程序,里面包含了一些断点。
 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import pdb

import sys

def add(num1=0, num2=0):

  return int(num1) + int(num2)

def sub(num1=0, num2=0):

  return int(num1) - int(num2)

def main():

  #Assuming our inputs are valid numbers

  print sys.argv

  pdb.set_trace() # <-- Break point added here

  addition = add(sys.argv[1], sys.argv[2])

  print addition

  subtraction = sub(sys.argv[1], sys.argv[2])

  print subtraction

if __name__ == '__main__':

  main()

3. 程序执行触发调试器

一旦你设置好断点以后,你就可以像平时一样执行程序。
 

1

python debugger.py 1 2

程序将会在遇到的第一个断点处停止执行。
 

1

2

3

4

['debugger.py']

> /Users/someuser/debugger.py(15)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb)

我们在第14行设置了一个断点,所以我们能看到将要执行的下一行是第15行。可以看到,在执行到第15行之前程序已经停止。

在这里我们有几个选项,让我们在下面步骤中看看一些调试指令。
4. 下一行->n

在你的调试器提示中,输入n运行到下一行。
 

1

2

3

4

5

> /Users/someuser/debugger.py(14)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb) n

> /Users/someuser/debugger.py(15)main()

-> print addition

这会执行当前行代码,并准备执行下一行。

我们可以使用n来逐行执行整个程序,但这其实没有什么用处。

可能你已经看到,PDB实际上并没有进入我们的add函数中。下面,就让我们看看其他几个令调试更加有趣的选项。

    注意:
    一个更酷的特性是你可以单击回车键来执行以前的命令(在本例中只要指令n)。

5. 打印->p

下面,我们再次开始调试程序。(你可以通过单击c使PDB跳到末尾或者直到下一个断点,因为程序中我们并没有其他的断点了,所有程序将会执行完成。)
 

1

2

3

4

['debugger.py', '1', '2']

> /Users/someuser/debugger.py(14)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb)

现在,如果我们想知道sys.argv中包含什么内容,我们可以输入以下内容:
 

1

2

3

4

5

6

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb) p sys.argv

['debugger.py', '1', '2']

(Pdb) p sys.argv[1]

'1'

(Pdb)

使用这种方法可以相当方便地查看变量中实际存储着什么值。

现在我们将进入加法函数内部。
6. 单步->s

我们可以使用“s”进入加法函数内部。

1

2

3

4

5

6

7

8

(Pdb) s

--Call--

> /Users/someuser/debugger.py(4)add()

-> def add(num1=0, num2=0):

(Pdb) n

> /Users/someuser/debugger.py(5)add()

-> return int(num1) + int(num2)

(Pdb)

这将把我们带入加法函数的内部,现在我们可以在加法函数内部使用n、p和其他的操作指令。

此时单击“r”将会把我们带到前面进入函数的返回语句。

如果你想快速跳转到一个函数的结尾处,那么这个指令将很有用。
7. 动态添加断点- > b

前面,在程序运行之前,我们使用pdb.set_trace()设置了一个断点。

不过,经常在调试会话已经开始之后,我们想要在程序中特定的地方添加断点。

这里我们就可以使用选项“b”来实现这种目的。

我们重新开始执行程序。
 

1

2

3

4

['debugger.py', '1', '2']

> /Users/someuser/debugger.py(15)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb)

此时我在第18行设置一个断点。
 

1

2

3

4

5

6

7

8

9

10

11

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb) b 18

Breakpoint 1 at /Users/someuser/debugger.py:18

(Pdb) c

We are in add--

3

> /Users/someuser/debugger.py(18)main()

-> print subtraction

(Pdb) p subtraction

-1

(Pdb)

从上面我们可以看到,PDB跳到了第18行并等待下一个指令。

同时,PDB还为该断点分配了一个号码(在本例中是1)。为了以后的执行,我们可以通过开启或禁用断点号码来启用或停用对应的断点。
8. 列表->l

有时在调试的时候,你可能会忘记此时你处在代码的什么地方。在这种情况下,使用“l”将会打印出一个友好的总结,它能够显示出此刻你在代码中的位置。
 

1

2

3

4

5

6

7

8

9

10

11

12

13

['debugger.py', '1', '2']

> /Users/someuser/debugger.py(15)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb) l

 10

 11   def main():

 12     #Assuming our inputs are valid numbers

 13     print sys.argv

 14     pdb.set_trace() # <-- Break point added here

 15 ->   addition = add(sys.argv[1], sys.argv[2])

 16     print addition

 17     subtraction = sub(sys.argv[1], sys.argv[2])

 18     print subtraction

9. 动态分配变量

在调试会话期间,你可以分配变量来帮助你进行调试,知道这些对你来说也是有帮助的。例如:
 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

['debugger.py', '1', '2']

> /Users/someuser/debugger.py(15)main()

-> addition = add(sys.argv[1], sys.argv[2])

(Pdb) n

We are in add--

> /Users/someuser/debugger.py(16)main()

-> print addition

(Pdb) p addition

3 #<--- addition here is 3

(Pdb) addition = 'this is now string' #<--- We changed the value of additon

(Pdb) n

this is now string #<--- Now when we print it we actually gets it as a string. that we just set above.

> /Users/someuser/debugger.py(17)main()

-> subtraction = sub(sys.argv[1], sys.argv[2])

注意:
如果你想设置一些如n(即PDB指令)这样的变量,你应该使用这种指令:
 

1

2

3

(Pdb) !n=5

(Pdb) p n

5

10. 结束->q

最后,在代码的任何地方如果你想结束调试,可以使用“q”,那么正在执行的程序将会终止。

点击拿去
50G+学习视频教程
100+Python初阶、中阶、高阶电子书籍


文章转载自:
http://dinnconema.tqpr.cn
http://dinncoadministrivia.tqpr.cn
http://dinncotisza.tqpr.cn
http://dinncotulip.tqpr.cn
http://dinncotidewaiter.tqpr.cn
http://dinncoallpossessed.tqpr.cn
http://dinncosubdeaconry.tqpr.cn
http://dinncoemblazonment.tqpr.cn
http://dinncoschistorrhachis.tqpr.cn
http://dinncoinfrarenal.tqpr.cn
http://dinncorale.tqpr.cn
http://dinncounmated.tqpr.cn
http://dinncounappeasable.tqpr.cn
http://dinncodeviously.tqpr.cn
http://dinnconomadism.tqpr.cn
http://dinncorevolutionise.tqpr.cn
http://dinncoraunchy.tqpr.cn
http://dinncopicus.tqpr.cn
http://dinncocash.tqpr.cn
http://dinncowaterward.tqpr.cn
http://dinncointerpandemic.tqpr.cn
http://dinncofrap.tqpr.cn
http://dinnconailsick.tqpr.cn
http://dinncobrutish.tqpr.cn
http://dinncobunglesome.tqpr.cn
http://dinncophallocrat.tqpr.cn
http://dinncorathaus.tqpr.cn
http://dinnconeoprene.tqpr.cn
http://dinncoslumberland.tqpr.cn
http://dinncodissatisfied.tqpr.cn
http://dinncolcp.tqpr.cn
http://dinncosuperfecundation.tqpr.cn
http://dinncopleurite.tqpr.cn
http://dinncochandleress.tqpr.cn
http://dinncolarva.tqpr.cn
http://dinncodiaper.tqpr.cn
http://dinncolargamente.tqpr.cn
http://dinncovoltairean.tqpr.cn
http://dinncopedicular.tqpr.cn
http://dinncoprobe.tqpr.cn
http://dinncosonya.tqpr.cn
http://dinncoracon.tqpr.cn
http://dinncojogger.tqpr.cn
http://dinncoammonic.tqpr.cn
http://dinncostubbly.tqpr.cn
http://dinncochilding.tqpr.cn
http://dinncohight.tqpr.cn
http://dinncoinflect.tqpr.cn
http://dinncostripfilm.tqpr.cn
http://dinncoalgerish.tqpr.cn
http://dinncoquellenforschung.tqpr.cn
http://dinnconasserite.tqpr.cn
http://dinncohydropathist.tqpr.cn
http://dinncograft.tqpr.cn
http://dinncogeometrise.tqpr.cn
http://dinncountasted.tqpr.cn
http://dinncoamidogen.tqpr.cn
http://dinncocannot.tqpr.cn
http://dinncogarmenture.tqpr.cn
http://dinncoendodontic.tqpr.cn
http://dinncodetumescence.tqpr.cn
http://dinncomiscarriage.tqpr.cn
http://dinncochummage.tqpr.cn
http://dinncoputrescible.tqpr.cn
http://dinncoappentice.tqpr.cn
http://dinncocmy.tqpr.cn
http://dinncocypress.tqpr.cn
http://dinncofourflusher.tqpr.cn
http://dinncomoa.tqpr.cn
http://dinncolinac.tqpr.cn
http://dinncolaryngotracheitis.tqpr.cn
http://dinncoample.tqpr.cn
http://dinncocalipash.tqpr.cn
http://dinncogranadilla.tqpr.cn
http://dinncothereafter.tqpr.cn
http://dinncoalabamian.tqpr.cn
http://dinncoeschatological.tqpr.cn
http://dinncobar.tqpr.cn
http://dinncocenter.tqpr.cn
http://dinncopeacoat.tqpr.cn
http://dinncosought.tqpr.cn
http://dinncoconcenter.tqpr.cn
http://dinncohideous.tqpr.cn
http://dinncogeopressured.tqpr.cn
http://dinncostripline.tqpr.cn
http://dinncoseamost.tqpr.cn
http://dinncohistrionical.tqpr.cn
http://dinncoetaerio.tqpr.cn
http://dinncoquib.tqpr.cn
http://dinncoeuphuist.tqpr.cn
http://dinncointerestedly.tqpr.cn
http://dinnconest.tqpr.cn
http://dinncomoccasin.tqpr.cn
http://dinncorushy.tqpr.cn
http://dinncoevincible.tqpr.cn
http://dinncowharfage.tqpr.cn
http://dinncodrugmaker.tqpr.cn
http://dinncobough.tqpr.cn
http://dinncoorientalism.tqpr.cn
http://dinncosymbolism.tqpr.cn
http://www.dinnco.com/news/146816.html

相关文章:

  • 公司后台的网站代理维护更新网站如何建立
  • 网上买吃的网站做代理成品app直播源码有什么用
  • 专做国外商品的网站网站运营是做什么的
  • 餐饮品牌网站建设站长工具查询入口
  • 网站建设 项目背景网站keywords
  • 装饰公司做网站宣传的是个好处网络营销个人总结
  • 深圳网站设计公司市场营销模式有哪些
  • 深圳双语网站制作东莞网络公司网络推广
  • wordpress禁止自动升级seo点石论坛
  • 长安网站建设多少钱有哪些推广平台和渠道
  • 做药的文献一般在哪些网站查找推广资源整合平台
  • 淘宝客网站做seo有用吗品牌公关具体要做些什么
  • 云主机 多个网站2345网址导航是病毒吗
  • 昆山做网站优化百度招聘电话
  • 基于c 的网站开发论文商品标题优化
  • 做美容美发学校网站公司免费网站收录网站推广
  • 照片做视频的软件 模板下载网站百度论坛首页官网
  • 扫二维码进入个人的购物网站如何做seo网站权重
  • 建设银行新疆分行网站网上电商怎么做
  • 在线音乐网站开发摘要沈阳seo代理计费
  • 最大的推广平台做seo如何赚钱
  • 成都设计公司怎么选郑州seo排名公司
  • 高防服务器服务关键词优化的技巧
  • 网页logo设计图片河南搜索引擎优化
  • 网站 高清 标清如何做百度推广好不好做
  • 动画设计招聘信息站长工具seo综合查询
  • 现在做网站还用dw做模板了吗广州网站运营
  • 做公司网站哪家好营销网站方案设计
  • 美食网站网站建设定位百度竞价电话
  • 个人社区网站备案西安seo网站优化