问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如果在模块的声明段中有Option Base 0语句,则在该模块中使用Dim a(6,3 To 5

发布网友 发布时间:2022-05-02 16:44

我来回答

3个回答

懂视网 时间:2022-05-02 21:05

pdb a = 1 pdb.set_trace() b = 2 a = a + b
print(a)

这段是最简单的pdb模块调试示例代码。pdb.set_trace()这里就是一个断点,程序运行之后,会停留在pdb.set_trace()这里。此时输入n再按回车键,可以执行下一行语句。后面直接按回车键,可继续执行一行。其他参数作用也是如此,以此类推。

清单 2. 利用 pdb 调试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@rcc-pok-idg-2255 ~]#  python epdb1.py  > /root/epdb1.py(4)?()  -> b = "bbb"  (Pdb) n  > /root/epdb1.py(5)?()  -> c = "ccc"  (Pdb)  > /root/epdb1.py(6)?()  -> final = a + b + c  (Pdb) list   1     import pdb   2     a = "aaa"   3     pdb.set_trace()   4     b = "bbb"   5     c = "ccc"   6  -> final = a + b + c   7     print final  [EOF]  (Pdb)  [EOF]  (Pdb) n  > /root/epdb1.py(7)?()  -> print final  (Pdb)

退出 debug:使用 quit 或者 q 可以退出当前的 debug,但是 quit 会以一种非常粗鲁的方式退出程序,其结果是直接 crash。

清单 3. 退出 debug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@rcc-pok-idg-2255 ~]#  python epdb1.py  > /root/epdb1.py(4)?()  -> b = "bbb"  (Pdb) n  > /root/epdb1.py(5)?()  -> c = "ccc"  (Pdb) q  Traceback (most recent call last):   File "epdb1.py", line 5, in ?     c = "ccc"   File "epdb1.py", line 5, in ?     c = "ccc"   File "/usr/lib64/python2.4/bdb.py", line 48, in trace_dispatch     return self.dispatch_line(frame)   File "/usr/lib64/python2.4/bdb.py", line 67, in dispatch_line     if self.quitting: raise BdbQuit  bdb.BdbQuit

打印变量的值:如果需要在调试过程中打印变量的值,可以直接使用 p 加上变量名,但是需要注意的是打印仅仅在当前的 statement 已经被执行了之后才能看到具体的值,否则会报 NameError: < exceptions.NameError … ....> 错误。

清单 4. debug 过程中打印变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@rcc-pok-idg-2255 ~]#  python epdb1.py  > /root/epdb1.py(4)?()  -> b = "bbb"  (Pdb) n  > /root/epdb1.py(5)?()  -> c = "ccc"  (Pdb) p b ‘bbb‘  (Pdb) ‘bbb‘  (Pdb) n  > /root/epdb1.py(6)?()  -> final = a + b + c  (Pdb) p c ‘ccc‘  (Pdb) p final  *** NameError: <exceptions.NameError instance at 0x1551b710 >  (Pdb) n  > /root/epdb1.py(7)?()  -> print final  (Pdb) p final ‘aaabbbccc‘  (Pdb)

使用 c 可以停止当前的 debug 使程序继续执行。如果在下面的程序中继续有 set_statement() 的申明,则又会重新进入到 debug 的状态,读者可以在代码 print final 之前再加上 set_trace() 验证。

清单 5. 停止 debug 继续执行程序
1 2 3 4 5 6 7 8 [root@rcc-pok-idg-2255 ~]#  python epdb1.py  > /root/epdb1.py(4)?()  -> b = "bbb"  (Pdb) n  > /root/epdb1.py(5)?()  -> c = "ccc"  (Pdb) c  aaabbbccc

显示代码:在 debug 的时候不一定能记住当前的代码块,如要要查看具体的代码块,则可以通过使用 list 或者 l 命令显示。list 会用箭头 -> 指向当前 debug 的语句。

清单 6. debug 过程中显示代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@rcc-pok-idg-2255 ~]#  python epdb1.py  > /root/epdb1.py(4)?()  -> b = "bbb"  (Pdb) list   1     import pdb   2     a = "aaa"   3     pdb.set_trace()   4  -> b = "bbb"   5     c = "ccc"   6     final = a + b + c   7     pdb.set_trace()   8     print final  [EOF]  (Pdb) c  > /root/epdb1.py(8)?()  -> print final  (Pdb) list   3     pdb.set_trace()   4     b = "bbb"   5     c = "ccc"   6     final = a + b + c   7     pdb.set_trace()   8  -> print final  [EOF]  (Pdb)

在使用函数的情况下进行 debug

清单 7. 使用函数的例子
1 2 3 4 5 6 7 8 9 10 11 import pdb  def combine(s1,s2):      # define subroutine combine, which...     s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...     s3 = ‘"‘ + s3 +‘"‘   # encloses it in double quotes,...     return s3            # and returns it.  a = "aaa"  pdb.set_trace()  b = "bbb"  c = "ccc"  final = combine(a,b)  print final

如果直接使用 n 进行 debug 则到 final=combine(a,b) 这句的时候会将其当做普通的赋值语句处理,进入到 print final。如果想要对函数进行 debug 如何处理呢 ? 可以直接使用 s 进入函数块。函数里面的单步调试与上面的介绍类似。如果不想在函数里单步调试可以在断点处直接按 r 退出到调用的地方。

清单 8. 对函数进行 debug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [root@rcc-pok-idg-2255 ~]# python epdb2.py  > /root/epdb2.py(10)?()  -> b = "bbb"  (Pdb) n  > /root/epdb2.py(11)?()  -> c = "ccc"  (Pdb) n  > /root/epdb2.py(12)?()  -> final = combine(a,b)  (Pdb) s  --Call--  > /root/epdb2.py(3)combine()  -> def combine(s1,s2):      # define subroutine combine, which...  (Pdb) n  > /root/epdb2.py(4)combine()  -> s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...  (Pdb) list   1     import pdb   2   3     def combine(s1,s2):      # define subroutine combine, which...   4  ->     s3 = s1 + s2 + s1    # sandwiches s2 between copies of s1, ...   5         s3 = ‘"‘ + s3 +‘"‘   # encloses it in double quotes,...   6         return s3            # and returns it.   7   8     a = "aaa"   9     pdb.set_trace()  10     b = "bbb"  11     c = "ccc"  (Pdb) n  > /root/epdb2.py(5)combine()  -> s3 = ‘"‘ + s3 +‘"‘   # encloses it in double quotes,...  (Pdb) n  > /root/epdb2.py(6)combine()  -> return s3            # and returns it.  (Pdb) n  --Return--  > /root/epdb2.py(6)combine()->‘"aaabbbaaa"‘  -> return s3            # and returns it.  (Pdb) n  > /root/epdb2.py(13)?()  -> print final  (Pdb)

在调试的时候动态改变值 。在调试的时候可以动态改变变量的值,具体如下实例。需要注意的是下面有个错误,原因是 b 已经被赋值了,如果想重新改变 b 的赋值,则应该使用! B。

清单 9. 在调试的时候动态改变值
1 2 3 4 5 6 7 8 9 [root@rcc-pok-idg-2255 ~]# python epdb2.py  > /root/epdb2.py(10)?()  -> b = "bbb"  (Pdb) var = "1234"  (Pdb) b = "avfe"  *** The specified object ‘= "avfe"‘ is not a function  or was not found along sys.path.  (Pdb) !b="afdfd"  (Pdb)

pdb 调试有个明显的缺陷就是对于多线程,远程调试等支持得不够好,同时没有较为直观的界面显示,不太适合大型的 python 项目。而在较大的 python 项目中,这些调试需求比较常见,因此需要使用更为高级的调试工具。

 

pdb命令清单:

    1)进入命令行Debug模式,python -m pdb xxx.py

    2)h:(help)帮助

    3)w:(where)打印当前执行堆栈

    4)d:(down)执行跳转到在当前堆栈的深一层(个人没觉得有什么用处)

    5)u:(up)执行跳转到当前堆栈的上一层

    6)b:(break)添加断点

                 b 列出当前所有断点,和断点执行到统计次数

                 b line_no:当前脚本的line_no行添加断点

                 b filename:line_no:脚本filename的line_no行添加断点

                 b function:在函数function的第一条可执行语句处添加断点

    7)tbreak:(temporary break)临时断点

                 在第一次执行到这个断点之后,就自动删除这个断点,用法和b一样

    8)cl:(clear)清除断点

                cl 清除所有断点

                cl bpnumber1 bpnumber2... 清除断点号为bpnumber1,bpnumber2...的断点

                cl lineno 清除当前脚本lineno行的断点

                cl filename:line_no 清除脚本filename的line_no行的断点

    9)disable:停用断点,参数为bpnumber,和cl的区别是,断点依然存在,只是不启用

    10)enable:激活断点,参数为bpnumber

    11)s:(step)执行下一条命令

                如果本句是函数调用,则s会执行到函数的第一句

    12)n:(next)执行下一条语句

                如果本句是函数调用,则执行函数,接着执行当前执行语句的下一条。

    13)r:(return)执行当前运行函数到结束

    14)c:(continue)继续执行,直到遇到下一条断点

    15)l:(list)列出源码

                 l 列出当前执行语句周围11条代码

                 l first 列出first行周围11条代码

                 l first second 列出first--second范围的代码,如果second<first,second将被解析为行数

    16)a:(args)列出当前执行函数的函数

    17)p expression:(print)输出expression的值

    18)pp expression:好看一点的p expression

    19)run:重新启动debug,相当于restart

    20)q:(quit)退出debug

    21)j lineno:(jump)设置下条执行的语句函数

                只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号

    22)unt:(until)执行到下一行(跳出循环),或者当前堆栈结束

    23)condition bpnumber conditon,给断点设置条件,当参数condition返回True的时候bpnumber断点有效,否则bpnumber断点无效

注意:

    1:直接输入Enter,会执行上一条命令;

    2:输入PDB不认识的命令,PDB会把他当做Python语句在当前环境下执行;

 

 

参考链接:

1. Python 调试器之pdb https://www.cnblogs.com/xiaohai2003ly/p/8529472.html

2. Python 代码调试技巧 https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/index.html

使用pdb模块调试Python

标签:rate   python   idt   temp   raise   port   play   bbb   aabb   

热心网友 时间:2022-05-02 18:13

option base是对6的下限为0,即0,1,2,3,4,5,6共7个数;

3to5是3,4,5 共3个数;元素个数=7*3=21。

例如:这是一个4行5列的数组,元素个数为20个。因为你在定义时使用了Option Base 1,*了元素的下标从1开始。也就是列数5是从1--5,行元素在定义的时候做了*2--5。

定义的数组名是A,括号里的头一个是2TO5意思是2--5,2--5是2,3,4,5所以是4行。括号里后面的是5,是从1开始,1,2,3,4,5,所以是5列。

扩展资料:

该示例使用 Option Base语句来取代数组下标的缺省值0。LBound函数返回数组的指定维数的最小可用下标。Option Base语句只能在模块级使用。

Option base 1 '将缺省的数组下标设为1。

Dim LowerDim MyArray(20), TwoDArray(3, 4) '声明数组变量。

Dim ZeroArray(0 To 5) '取代缺省的下标。 '使用LBound 函数来测试数组的下界。

Lower = LBound(MyArray) '返回1。

Lower = LBound(TwoDArray, 2) '返回1。

Lower = LBound(ZeroArray) '返回0。

参考资料来源:百度百科-Option Base

热心网友 时间:2022-05-02 19:31

1、打开电脑后,打开终端,先用cat命令查看一下debug.py的内容。

2、这里用的是python3的环境,在终端里输入显示python3 -m pdb debug.py命令。就就是用python的pdb模块调试debug.py文件代码。

3、进入调试后,在终端里输入小写字母l,就是英文单词list的缩写,意思就是列出代码内容。

4、在终端里输入小写字母n,就是英文单词next的缩写,意思就是执行下一行代码。

5、最后在终端里输入小写字母c,就是英文单词continue的缩写,意思就是继续执行代码一直结束,然后重新进入调试就完成了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
WIN7不会自动安装AHCI驱动是怎么回事?每次重装系统后都得我自己安装_百... 钉钉录播课能否查看观看时长 为什么城市轨道要有身高条件 城轨交通运营管理专业现身高吗 城市轨道交通运营管理这个专业是否有身高要求 读城轨专业需要什么条件 学习城轨专业需要什么条件? 城市轨道专业最低的身高要求多少?身高158毕业出来好找工作吗? 城轨专业要求身材吗 城轨专业有身高限制吗 发布文章时自动提取tag关键词的工具 draw的过去式 word2003中如何自动提取一篇文章的关键词语 如何让你的文章自动加上关键词锚文本 有没有什么软件可以根据已经写好的文章或书的内容,自动生成index(就是有关键字的索引)呢? 在word里面的一段文章我要提炼关键词应该怎么操作? 为什么使用11888充值卡无法充值翼支付账户 文章如何设置关键词? 11888是翼支付的电话吗 11888发短信说我成功开通翼支付什么意思 11888怎么会好好的发信息说我开通翼支付? 保费收入与保险资本金 翼支付的到账提醒短信是号码发送的? 起亚两厢车k2安全带旁边的标志显示黄灯是怎么了 保险公司的自有资金 桑塔纳3000仪表盘上安全带指示灯下面那个标志是什么? 保险公司注册资本金在哪查 OPPOR15怎么设置紧急求救电话 OPPOr15怎样设置别人拨打电话过来关机但自己又好上网 鞠婧祎最好看的照片 “draw”的过去式是什么? draw过去式 过去分词是什么? dede发表文章里自动生成的关键词代码是什么? 怎么把一篇文章的关键词优化出来 draw的过去式,过去分词形式分别怎么写 生成XML格式网站地图 draw的过去式,过去分词 asp自动提取文章关键词的问题 知道的大侠请进啊 drink、give、draw的过去式是什么啊!! 网站新闻里的文章页面中的关键词如何设置?? draw的过去式是什么 五行缺木属龙姓谢的女孩叫什么名字好!求大神推荐好听的名字 Drew的过去分词是什么 取名字大全姓谢,女孩改名1994.3.18中午12时出生 女孩子姓谢的名字大全 生辰八字100分姓谢的女孩名字大全 女孩名字大全2014属马姓谢带如字 2015姓谢带子的女孩名字大全 起名字大全:请大家帮帮2010年10月13日15;40出生,女孩,姓谢,求结合八字的姓名,谢谢《最好能带土、水》 姓谢女孩名字大全是2012年农历三月初八下午五点多生的孩子,父亲姓谢母亲姓张