Hi! Please consider following me on twitter: @hanekomu.
2009年10月20日
HTML stack trace from the Perl debugger
Tatsuhiko Miyagawa released Devel::StackTrace::AsHTML and blogged about it.
I thought this would make a neat Perl debugger command, so I wrote DB::Pluggable::StackTraceAsHTML. It is a plugin to DB::Pluggable. It adds the Th command to the
debugger, which displays a stack trace in HTML format, with lexical variables.
It then opens the page in the default browser.
Here is an example of how to use it:
$ perl -d test.pl Loading DB routines from perl5db.pl version 1.3 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(test.pl:14): my $n = 12; DB<1> r main::fib(test.pl:12): return fib($i - 1) + fib($i - 2); DB<1> Th
The result would look something like:

To enable the plugin, just add it to your ~/.perldb, like so:
use DB::Pluggable; use YAML; $DB::PluginHandler = DB::Pluggable->new(config => Load <<EOYAML); global: log: level: error plugins: - module: BreakOnTestNumber - module: StackTraceAsHTML EOYAML $DB::PluginHandler->run;
By the way, to be minimally invasive to the existing Perl debugger, the
command is defined using the debugger's aliasing mechanism. Normally you define
an alias as a regular expression that will change the command the user enters
to a known command, but here we circumvent that and call our command handler
directly. The following method is from DB::Pluggable::Plugin:
sub make_command { my ($self, $cmd_name, $code) = @_; no strict 'refs'; my $sub_name = "DB::cmd_$cmd_name"; *{$sub_name} = $code; $DB::alias{$cmd_name} = "/./; &$sub_name;"; }
To define a new foo command in a plugin, you then use:
package DB::Pluggable::StackTraceAsHTML; use strict; use warnings; use base qw(DB::Pluggable::Plugin); sub register { my ($self, $context) = @_; $self->make_command( foo => sub { # ... } ); }
posted at: 22:09 | path: /dev | permalink | 0 comments | 0 trackbacks
Comments are closed for this story.
Trackbacks are closed for this story.