גאבור סבו - Gábor Szabó > Debug-Client > Debug::Client

Download:
Debug-Client-0.11.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs

Module Version: 0.11   Source  

NAME ^

Debug::Client - client side code for perl debugger

SYNOPIS ^

  use Debug::Client;
  my $debugger = Debug::Client->new(host => $host, port => $port);
  $debugger->listen;

  # this is the point where the external script need to be launched
  # first setting 
      # $ENV{PERLDB_OPTS} = "RemotePort=$host:$port"
  # then running
      # perl -d script
 
  my $out = $debugger->get;

  $out = $debugger->step_in;

  $out = $debugger->step_over;


  my ($prompt, $module, $file, $row, $content) = $debugger->step_in;
  my ($module, $file, $row, $content, $return_value) = $debugger->step_out;
  my $value = $debugger->get_value('$x');

  $debugger->run();         # run till end of breakpoint or watch
  $debugger->run( 42 );     # run till line 42  (c in the debugger)
  $debugger->run( 'foo' );  # tun till beginning of sub

  $debugger->execute_code( '$answer = 42' );

  $debugger->execute_code( '@name = qw(foo bar)' );

  my $value = $debugger->get_value('@name');  $value is the dumped data?

  $debugger->execute_code( '%phone_book = (foo => 123, bar => 456)' );

  my $value = $debugger->get_value('%phone_book');  $value is the dumped data?
  
  
  $debugger->set_breakpoint( "file", 23 ); #    set breakpoint on file, line

  $debugger->get_stack_trace

Other planned methods:

  $debugger->set_breakpoint( "file", 23, COND ); #      set breakpoint on file, line, on condition
  $debugger->set_breakpoint( "file", subname, [COND] )

  $debugger->set_watch
  $debugger->remove_watch
  $debugger->remove_breakpoint


  $debugger->watch_variable   (to make it easy to display values of variables)

DESCRIPTION ^

new

The constructor can get two parameters: host and port.

  my $d = Debug::Client->new;

  my $d = Debug::Client->new(host => 'remote.hots.com', port => 4242);

Immediately after the object creation one needs to call

  $d->listen;

TODO: Is there any reason to separate the two?

listen

See new

buffer

Returns the content of the buffer since the last command

  $debugger->buffer;

quit

show_line

step_in

step_over

step_out

 my ($prompt, $module, $file, $row, $content, $return_value) = $debugger->step_out;

Where $prompt is just a number, probably useless

$return_value will be undef if the function was called in VOID context

It will hold a scalar value if called in SCALAR context

It will hold a reference to an array if called in LIST context.

TODO: check what happens when the return value is a reference to a complex data structure or when some of the elements of the returned array are themselves references

get_stack_trace

Sends the stack trace command T to the remote debugger and returns it as a string if called in scalar context. Returns the prompt number and the stack trace string when called in array context.

run

  $d->run;

Will run till the next breakpoint or watch or the end of the script. (Like pressing c in the debugger).

  $d->run($param)

set_breakpoint

 $d->set_breakpoint($file, $line, $condition);

execute_code

  $d->execute_code($some_code_to_execute);

get_value

 my $value = $d->get_value($x);

If $x is a scalar value, $value will contain that value. If it is a reference to a SCALAR, ARRAY or HASH then $value should be the value of that reference?

Actually I think this is an internal method....

In SCALAR context will return all the buffer collected since the last command.

In LIST context will return ($prompt, $module, $file, $row, $content) Where $prompt is the what the standard debugger uses for prompt. Probably not too interesting. $file and $row describe the location of the next instructions. $content is the actual line - this is probably not too interesting as it is in the editor. $module is just the name of the module in which the current execution is.

See Also ^

GRID::Machine::remotedebugtut

COPYRIGHT ^

Copyright 2008-2009 Gabor Szabo. http://www.szabgab.com/

LICENSE ^

This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself.

WARRANTY ^

There is no warranty whatsoever. If you lose data or your hair because of this program, that's your problem.

CREDITS and THANKS ^

Originally started out from the remoteport.pl script from Pro Perl Debugging written by Richard Foley.