Matthew Horsfall (alh)

NAME

Devel::GDB::Breakpoint - Create easily identifiable gdb breakpoints in Perl code.

SYNOPSIS

In some Perl program (prog.pl):

  #!/usr/bin/perl
  
  use strict;
  use warnings;
  
  use Devel::GDB::Breakpoint;
  
  print "before\n";
  
  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]
  before

  Breakpoint 1, bp (val=42) at Breakpoint.xs:7
  7       void bp(int val) {}
  (gdb)

DESCRIPTION

This module allows you to inject breakpoints into your Perl code that you can easily identify with gdb.

It exports the breakpoint sub at runtime which can be called from any Perl code with an integer value as its argument. When the Perl codepoint is reached, the module calls a C function called bp with the argument you gave as its only parameter, which is named val.

IE, in Perl:

  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
  ...

WHY WOULD I WANT THIS?

I'm really not sure you would.

But it may be useful if you want to break at different points in a large program and don't want to maintain a list of Perl_pp_* methods you haven't used yet to create unique breakpoints.

Alternatively, in Perl you can:

  study;

And then in gdb:

  (gdb) b Perl_pp_study

If you want to break during parsing, you can:

  BEGIN { breakpoint 5; }

Or

  BEGIN { study; }

If you want to break during parsing inside of if blocks and other places however, see Devel::GDB::Parser::Breakpoint.

SEE ALSO

Devel::GDB::Parser::Breakpoint - Create easily identifiable gdb breakpoints in Perl parser 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.