You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs-cvs@perl.apache.org by st...@apache.org on 2003/05/28 08:43:02 UTC

cvs commit: modperl-docs/src/docs/2.0/devel/debug/code .debug-inline

stas        2003/05/27 23:43:02

  Modified:    src/docs/2.0/devel/debug c.pod
  Added:       src/docs/2.0/devel/debug/code .debug-inline
  Log:
  add a gdb script to debug Inline.pm-generated so's
  
  Revision  Changes    Path
  1.12      +11 -0     modperl-docs/src/docs/2.0/devel/debug/c.pod
  
  Index: c.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/devel/debug/c.pod,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- c.pod	22 Apr 2003 06:26:21 -0000	1.11
  +++ c.pod	28 May 2003 06:43:02 -0000	1.12
  @@ -269,6 +269,17 @@
   When I<filter/api> test is running it calls
   mpxs_Apache__Filter_print() which is when the breakpoint is reached.
   
  +=item * Debugging code in shared objects created by C<Inline.pm>
  +
  +This is not strictly related to mod_perl, but sometimes when trying to
  +reproduce a problem (e.g. for a p5p bug-report) outside mod_perl, the
  +code has to be written in C. And in certain cases, Inline can be just
  +the right tool to do it quickly. However if you want to interactively
  +debug the library that it creates, it might get tricky. So similar to
  +the previous sections, here is a gdb F<code/.debug-inline> startup
  +script that will save you a lot of time. All the details and a sample
  +perl script are inside the gdb script.
  +
   =back
   
   
  
  
  
  1.1                  modperl-docs/src/docs/2.0/devel/debug/code/.debug-inline
  
  Index: .debug-inline
  ===================================================================
  
  # save this file as .debug and execute this as:
  # gdb -command=.debug
  # or if you prefer gui
  # ddd -command=.debug
  #
  # NOTE: Adjust the path to the perl executable
  # also this perl should be built with debug enabled
  file /usr/bin/perl
  
  # If you need to debug with gdb a live script and not a library, you
  # are going to have a hard time to set any breakpoint in the C code.
  # the workaround is force Inline to compile and load .so, by putting
  # all the code in the BEGIN {} block and call Inline->init from there.
  #
  # you also need to prevent from Inline deleting autogenerated .xs so
  # you can step through the C source code, and of course you need to
  # add '-g' so .so won't be stripped of debug info
  #
  # here is a sample perl script that can be used with this gdb script
  #
  # test.pl
  # #-----#
  # use strict;
  # use warnings;
  #
  # BEGIN {
  # use Inline Config =>
  #     #FORCE_BUILD => 1,
  #     CLEAN_AFTER_BUILD => 0;
  #
  # use Inline C => Config =>
  #     OPTIMIZE => '-g';
  #
  # use Inline C => <<END;
  # void my_bp() {
  #     dTHX;
  #     Perl_warn(aTHX_ "starting debug\n");
  # }
  # END
  #
  # Inline->init;
  #
  # }
  #
  # my_bp();
  
  tb main
  # NOTE: adjust the name of the script that you run
  run test.pl
  
  # when Perl_runops_debug breakpoint is hit Inline will already load
  # the autogenerated .so, so we can set the bp in it (that's only if
  # you have run 'Inline->init' inside the BEGIN {} block
  
  b S_run_body
  continue
  b Perl_runops_debug
  continue
  
  # here you set your breakpoints
  b my_bp
  continue
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: docs-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: docs-cvs-help@perl.apache.org