投稿  收藏 
使用pdb模块调试程序

【问题描述】

现有一个产生1000以内的完全数的程序,但是程序并没有按预期输出这些完全数,请使用pdb定位和修改错误。

使用pdb模块调试程序预期结果:

[6,28,496]

【题前思考】

根据问题描述,填写表11-2-1。

表11-2-1 问题分析

使用pdb模块调试程序

【解题思路】

通过pdb模块在源程序中指定位置设置断点,每次程序执行到断点时就暂停,可以通过命令查看此时各变量的值,如果这个值和预期值不同说明执行到此处时程序就已经出现了错误,就需要往前追查推测错误。如果循环次数太多,pdb可以设置条件断点,当满足某个条件时断点才起作用,这样可以减少暂停的次数,加快调试进度。

【程序代码】

使用pdb模块调试程序

【调试分析】

①:在PyCharm窗口底部的Terminal面板中使用cd命令将当前目录切换到被调试文件所在的目录。命令执行结果如图11-2-1所示。

使用pdb模块调试程序

图11-2-1 切换到“调试程序”目录

②:在Terminal中输入命令“python-m pdb a11_2_1使用pdb模块调试程序.py”启动pdb模块,从命令提示符“(pdb)”可以看出pdb已经开始运行,可以进行调试,如图11-2-2所示。命令中选项“-m pdb”表示执行pdb模块,“a11_2_1使用pdb模块调试程序.py”是要调试的程序文件,也是pdb模块的输入参数。

使用pdb模块调试程序

图11-2-2 进入pdb调试

③:在程序第7行即代码“if s==n:res.append(n)”处设置一个断点,观察每一次判断完全数时,s和n这两个变量的值具体是什么。其中命令“b7”表示在源代码第7行设置断点,从图11-2-3可以看出其断点号为1;命令“c”表示执行程序,直到遇到断点,命令“p n,s”表示显示变量n和s的值。

使用pdb模块调试程序

图11-2-3 在断点处显示变量n和s的值

④:因为我们已经知道6是完全数,所以可以在断点1设置一个条件断点,当n==6时才暂停执行,如图11-2-4所示。命令“condition 1 n==6”就表示在断点1设置条件n==6,即当n==6时才暂停程序执行。此时可以查看变量n和s的具体值。

使用pdb模块调试程序

图11-2-4 在条件断点处显示变量n和s的值

⑤:从图11-2-4可以看出,当n的值为6的时候,约数之和居然等于12而非实际的6,于是,我们找到了问题的关键,变量s的值计算错误。从源代码中我们可以看出,变量s只在程序开始时初始化为0,实际上应该在对每一个数求约数和之前都置初值0。如果不能确定错误,我们还需要执行命令c或其他命令继续执行查看断点的值,甚至重新设置其他断点查找问题。

【技术全貌】

除了在上述程序调试中遇到的命令外,pdb模块还提供了很多调试命令来帮助程序员调试程序,表11-2-2中仅列出了其中常见的一部分,全部命令及说明请扫描二维码查阅官网文档。

表11-2-2 pdb常用命令

使用pdb模块调试程序

续表

使用pdb模块调试程序

 

关 键 词

调试程序

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢