NAME
Devel::GDB::Parser::Breakpoint - Create easily identifiable gdb breakpoints in Perl parser code.
SYNOPSIS
In some Perl program (prog.pl):
#!/usr/bin/perl
use strict;
use warnings;
use Devel::GDB::Parser::Breakpoint;
print "before\n";
# Call bp(42) during parsing of this line
parser_breakpoint 42;
print "after\n";
Then:
$ gdb --args perl ./prog.pl
...
(gdb) b bp if val == 42
Function "bp" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (bp if val == 42) pending.
(gdb) run
Starting program: /usr/bin/perl prog.pl
[Thread debugging using libthread_db enabled]
Breakpoint 1, bp (val=42) at Breakpoint.xs:7
7 void bp(int val) {}
(gdb)
DESCRIPTION
This module allows you to inject breakpoints into the parsing of your Perl code by the perl binary that you can easily identify with gdb.
It exports the parser_breakpoint
sub at runtime which can be called from any Perl code with an integer value as its argument. When the perl lexer/parser reaches the line, the module calls a C function called bp
with the argument you gave as its only parameter, which is named val
.
IE, in Perl:
parser_breakpoint 3;
Equates to:
void bp(int val) {};
bp(3);
Which allows you in gdb to set breakpoints like so:
(gdb) b bp if val == 3
...
Note that parser_breakpoint always returns the value 1. It can be used in complex statements/expressions to see what's going on:
if ($x && $y && parser_breakpoint 2 && $z) { ... }
And since it happens at lexer/parser time, it will still execute here:
if (0 && parser_breakpoint 3) { ... }
WHY WOULD I WANT THIS?
I'm really not sure you would.
But it may be useful if you want to easily see what the perl lexer/parser is doing as it reads different parts of your source.
Alternatively, in Perl you can:
BEGIN { study; }
And in gdb:
(gdb) b Perl_pp_study
However, this doesn't allow you to break inside of if blocks like in the examples above.
COMPATIBILITY
This module requires at least Perl 5.11.2 because of pluggable keywords. See "PL_keyword_plugin" in perlapi for more information.
SEE ALSO
Devel::GDB::Breakpoint - Create easily identifiable runtime gdb breakpoints in Perl code
AUTHOR
Matthew Horsfall (alh) - <wolfsage@gmail.com>
COPYRIGHT AND LICENSE
Copyright (C) 2013 by Matthew Horsfall
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.