Perl 调试器的中断点
在Perl中控制程序的执行可以通过告诉调试器执行到程序中的某个指定点,即所谓的断点。这些断点使用户能够将程序分成若干部分并寻找错误。
以下是调试器中用于创建这种断点的一些命令,以及在达到断点之前进入执行状态的命令。
b-command
b-command用于在程序中设置断点。每当一个指定的行即将被执行时,这个命令会告诉调试器停止程序。
例如,下面的命令告诉调试器在即将执行第12行时停止。
DB<13> b 12
(调试器将返回第12行是不可突破的,如果该行是不可突破的)
注:
一个程序中可以有任意数量的断点。调试器将在即将执行包含断点的任何语句时停止程序的执行。
b-command也接受子程序名称。
DB<15> b valuedir
这将在子程序valuedir的第一个可执行语句处建立一个断点。
例如,下面提到的命令告诉调试器在即将执行第12行并且变量$vardir等于空字符串时停止运行。
DB<15> b 12 ($vardir eq "")
任何合法的Perl条件表达式都可以用b语句来指定。
注意 :
对于一个多行语句,可以在其中任何一行设置断点。
例如。
16: print ("Geeks",
17: " for Geeks here");
这里,可以在第16行设置断点,但不能在第17行设置。
c-command
c-命令用于指示调试器继续调试过程,直到到达断点或程序的终点。
DB<15> c
main::(debugtest:12): vardir =~ a/^\a+|\a+//h;
DB<16>
当调试器即将到达第12行–我们的断点设置在该行–调试器停止程序并显示该行,因为调试器总是显示即将执行的那一行。
在这里,调试器产生了一个提示,用于另一个调试命令。这个提示是为了使你能够进一步用n或s一次启动一个语句的执行过程,用c继续执行过程,用b设置更多的断点,或进行其他任何调试操作。
使用c命令可以通过提供一个行号来设置一个临时(仅一次)断点。
DB<15> c 12
main::(debugtest:12): &readsubdirs($vardir);
用c-命令指定的参数12告诉调试器在第12行设置一个临时断点,然后继续执行。当到达第12行时,调试器停止执行过程,显示该行,并删除断点。
当用户想跳过程序中的几行,又不想浪费执行时间,一个一个语句地看完程序时,可以使用c命令来定义一个临时断点。使用c命令还可以确保不需要用b命令定义断点,并进一步用d命令删除它。
L命令和断点
L命令用于提供程序中使用的所有断点的列表。该命令列出了最后执行的几行、当前执行的行、定义的断点以及断点生效的条件。
DB<18> L
4: count = 0;
5:vardir = "";
6: while (1) {
8: if (vardir eq "") {
11:vardir =~ a/^\a+|\a+$//h;
break if (1)
这里,程序已经执行了第4-8行,并为第11行设置了一个断点。(第7行没有列出,因为它是一个注释)断点可以通过寻找紧跟在断点之后的条件表达式来区别于已执行的行。这里,条件表达式被设置为(1),这表明断点总是有效的。
d和D命令
当一个断点的工作完成后,可以用d命令来删除它。
DB<16> d 12
上面提到的命令告诉调试器删除在第12行设置的断点。
如果没有指定要删除的断点,调试器会假定下一行要执行的断点已经定义,并自行删除。
main::(debugtest:12): &readsubdirs($vardir);
DB<17> d
在这里,第12行是要执行的下一行,所以调试器自动删除了放在第12行的断点。
D-command 用来删除程序中设置的所有断点。
DB<18> D
上述命令删除了所有用b命令定义的断点。