Simple config for the perl debugger
I’ve been using a config file ($HOME/.perldb
) for some time now. While it’s not the biggest file in the world it automates settings that I’m far too lazy to type every time I fire the beast up.
.perldb
$DB::deep=1000 ;
sub afterinit { push @DB::typeahead, "{{v" unless $DB::already_curly_curly_v++; } ;
parse_options('dumpDepth=2 NonStop=1') ;
The Explanation
$DB::deep=1000
This increases the limit for the recursion limit from 100 - a level that’s so low I seemed to be hitting it all the time
sub afterinit { … }
I like ‘v
’ as a way of seeing where I’m at in the code, with some context. I hate typing it myself every time the debugger returns to the prompt.
This small piece of voodoo simply pushes the command ‘{{v
’ onto the list of things to do when the debugger has finished initialising. ‘{{
’ is “Add to the list of debugger commands to run before each prompt” and ‘v
’ is “View window around line”.
Until recently the command was just
sub afterinit { push @DB::typeahead, "{{v" } ;
This was annoying if you used ‘R
’ to restart the script you were debugging as you’d call ‘{{v
’ again and force an extra ‘v
’ at every prompt. This would increase every time you used ‘R
’.
The variable is forced into the DB::
namespace otherwise you’d increment a value scoped to the afterinit() sub.
parse_options(‘dumpDepth=2 NonStop=1’)
Set a couple of useful options:
- dumpDepth=2 limits the depth of variables shown if you use ‘
x
’ or similar on a variable. Especially useful if you’re forever accidentally examining DBIx::Class objects. - NonStop=1 saves you from having to type ‘c’ after everything has initialised so that your program will run. Useful if you drop in
$DB::single = 1
statements as your initial breakpoint in the source.
I like that 'v' on every step a lot! Thanks for the tip
I've not stumbled across pretype before; that looks much simpler! Thanks.
sub afterinit { push @$DB::pretype, 'v' }
seems to suffer from the same buildup of 'v' commands.
After a couple of (R)estarts:
DB x @$DB::pretype
0 'v'
1 'v'
2 'v'
3 'v'
This worked for me:
I'd use /^v$/ out of paranoia, but great suggestion!