1. 进入debug模式
# perl -d ./perl_debugger.pl
it prompts,
DB<1>
2. 查看从第10行开始的代码。 查看函数get_pattern的代码
DB<1> l 10
10: my $pattern;
DB<2> l get_pattern
11 {
12: my $pattern;
13: print “Enter search string: “;
14: chomp ($pattern = );
15: return $pattern;
16 }
3. 在函数find_files上设置断点
DB<3> b find_files
4. 在指定的44行设置断点
DB<4> b 44
5. 查看所有的断点
DB<5> L
./perl_debugger.pl:
22: my $pattern = shift;
break if (1)
44: print join “\n”,@list;
break if (1)
6. 单步调试,s 进入调用函数,n直接下一语句不进入调用函数
DB<5> s
main::(./perl_debugger.pl:39): $pattern = get_pattern();
DB<5> s
main::get_pattern(./perl_debugger.pl:12):
12: my $pattern;
Option s and n does step by step execution of each statements. Option s steps into the subroutine. Option n executes the subroutine in a single step (stepping over it).
The s option does stepping into the subroutine but while n option which would execute the subroutine(stepping over it).
7. 继续直到下一个断点
DB<5> c
Enter search string: perl
main::find_files(./perl_debugger.pl:22):
22: my $pattern = shift;
8. 继续直到指定的行
DB<5> c 36
main::find_files(./perl_debugger.pl:36):
36: return @list;
9. 打印变量的值
DB<6> p $pattern
perl
DB<7> c
main::(./perl_debugger.pl:44): print join “\n”,@list;
DB<7> c
./perl_debugger.pl
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
After the last continue operation, the output gets printed on the stdout as “./perl_debugger.pl” since it matches the pattern “perl”.
10. 从文件获得debug的命令和断点信息
Perl debugger can get the debug command from the file and execute it. For example, create the file called “debug_cmds” with the perl debug commands as,
c
p $pattern
q
Note that R is used to restart the operation(no need quit and start debugger again).
DB<7> R
DB<7> source debug_cmds
>> c
Enter search string: perl
./perl_debugger.pl
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
>> p $pattern
perl
>> q
perl debug命令的总结
Following options can be used once you enter the perl debugger.
h or h h – for help page
c – to continue down from current execution till the breakpoint otherwise till the subroutine name or line number,
p – to show the values of variables,
b – to place the breakpoints,
L – to see the breakpoints set,
d – to delete the breakpoints,
s – to step into the next line execution.
n – to step over the next line execution, so if next line is subroutine call, it would execute subroutine but not descend into it for inspection.
source file – to take the debug commands from the file.
l subname – to see the execution statements available in a subroutine.
q – to quit from the debugger mode.
perl debug的高级用法
对调用的module中的函数设置断点:
b foo::bar::test::subname
可以设置永久的断点,在需要设置断点的行,加入:
$DB::single =1;
设置断点到调用的文件中的函数或行:
b line_number file_path_name
b function_name file_path_name
b file_path_name:function_name