Perl | Breakpoints of a Debugger

Controlling program execution in Perl can be done by telling the debugger to execute up to a certain specified point in the program, called a breakpoint. These breakpoints enable the user to divide the program into sections and look for the errors.

Following are some commands in a debugger which are used to create such breakpoints and the commands that are into execution until a breakpoint is reached.
 

b-Command

 
b-command is used to set a breakpoint in a program. Whenever a specified line is about to be executed, this command tells the debugger to halt the program.
For example, below given command tells the debugger to halt when it is about to execute line 12:

DB<13> b 12

(The debugger will return Line 12 is not breakable, if the line is unbreakable)

Note :
There can be any number of breakpoints in a program. The debugger will halt the program execution whenever it is about to execute any of the statement which contains a breakpoint.
b-command accepts subroutine names as well:

DB<15> b valuedir

This creates a breakpoint at the very first executable statement of the subroutine valuedir.

b-command can also be used to halt a program only when a specified condition meets.
For example, below mentioned command tells the debugger to halt when it is about to execute line 12 and the variable $vardir is equal to the null string:

DB<15> b 12 ($vardir eq "")

Any legal Perl conditional expression can be specified with the b statement.

Note :
For a multiline statement, a breakpoint can be set at any of those lines.
For example:

16: print ("Geeks", 
17: " for Geeks here");

Here, a breakpoint can be set at line 16, but not line 17.

 

The c-Command

 
c-command is used to instruct the debugger to continue the debugging process until it reaches a breakpoint or the end of the program.

DB<15> c

main::(debugtest:12):                  $vardir =~ a/^\a+|\a+$//h;

DB<16>

When the debugger is about to reach the line 12-at which our breakpoint is set-debugger halts the program and displays the line as the debugger always displays the line which is about to be executed.

Here, a prompt is generated by the debugger for another debugging command. This prompt is to enable you to further start the execution process one statement at a time using either n or s, continue the execution process using c, more breakpoints can be set using b, or any other debugging operation can be performed.

A temporary(one-time-only) breakpoint can be set with the use of c-command by supplying a line number:

DB<15> c 12

main::(debugtest:12):                      &readsubdirs($vardir);

The argument 12 specified with the c-command tells the debugger to set a temporary breakpoint at line 12 and then continue execution. When line 12 is reached, debugger halts the execution process, displays the line, and removes the breakpoint.

When the user wants to skip a few lines of the program and don’t want to waste the execution time by going through the program one statement at a time, c-command is used to define a temporary breakpoint. Using c also ensures that there is no need to define a breakpoint using b and further deleting it using d-command.

 

The L Command and Breakpoints

 
L-command is used to provide a list of all the breakpoints used in the program. This command lists the last few lines executed, the current line into execution, the breakpoints which were defined and the conditions under which breakpoints were into effect.

DB<18> L

4:      $count = 0;

5:      $vardir = "";

6:      while (1) {

8:              if ($vardir eq "") {

11:                      $vardir =~ a/^\a+|\a+$//h;

  break if (1)

Here, the program has executed lines 4-8, and a breakpoint is set for line 11. (Line 7 is not listed because it is a comment) Breakpoints can be distinguished from executed lines by looking for the conditional expressions, which are immediately after the breakpoint. Here, the conditional expression is set to (1), which indicates that the breakpoint is always effective.

 

The d and D Commands

 
When the job of a breakpoint is finished, it can be deleted by using the d-command.

DB<16> d 12

Above mentioned command tells the debugger to delete the breakpoint which was set at line 12.

If a breakpoint is not specified to be deleted, the debugger assumes that a breakpoint is defined for the next line which is to be executed and deletes it by itself.

main::(debugtest:12):                      &readsubdirs($vardir);

DB<17> d

Here, line 12 is the next line which is to be executed, so the debugger automatically deletes the breakpoint placed at line 12.

D-command is used to delete all the breakpoints set in the program.

DB<18> D

Above command deletes, all the breakpoints defined with the b command.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.