Hack #59. Customize the Debugger
Write your own debugger commands.
Adding a command to the debugger (or modifying an existing one) by editing the debugger is a difficult job; to do this, you have to patch the debugger source in perl5db.pl and replace it. Sometimes you don't have the necessary privileges to do this, and given the complexity of the debugger, it's a difficult jobâespecially because you can't debug the debugger.
Yet modifying your tools the way you want them is important. Fortunately, Devel::Command
module makes this much simpler. With Devel::Command
, you write simple modules to define your commands, and the debugger finds them and loads them for you automatically.
The Hack
Writing a command is simple. There are only a few things to remember:
- Input and output
The debugger reads input from
DB::IN
and writes toDB::OUT
. If you want your command to work just like a native debugger command, you need to use these filehandles for input and output. Generally, you'll only need to print toDB::OUT
.- Debugger context versus program context
To evaluate an expression in the context of the program that's being debugged (for example, you want to pass the value of a variable in the program to your command), call the subroutine
&eval
on it. To evaluate something in the debugger's context, use plain oldeval
.
A "hello, world" command looks like:
package Devel::Command::HelloWorld; use base 'Devel::Command'; sub command { print DB::OUT "Hello world!\\n"; 1; } 1;
Devel::Command
defaults ...
Get Perl Hacks now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.