this patch allows us to provide a manually crafted debug script, which
cannot be automatically created.

  % t/TEST -d -commands=.my_gdb_script

note that I didn't use a more suitable name like -debug_script, since Doug
vigorously wants to be able to run -d :), so no new option can start with
-d. the mnemonics for -commands is coming from gdb itself:

  % gdb -commands filename

if you can think of a better name that hints that this is a debug option,
please speak up.

p.s. all the recent patches are a result of my frustration with not being
able to debug normally :( help me to solve the problem and I'll cease
sending these convenience patches :) please!!!

Index: Apache-Test/lib/Apache/TestRun.pm
===================================================================
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.69
diff -u -r1.69 TestRun.pm
--- Apache-Test/lib/Apache/TestRun.pm   2001/11/22 03:11:38     1.69
+++ Apache-Test/lib/Apache/TestRun.pm   2001/11/22 08:27:59
@@ -17,7 +17,7 @@
 my @std_run      = qw(start-httpd run-tests stop-httpd);
 my @others       = qw(verbose configure clean help ssl http11);
 my @flag_opts    = (@std_run, @others);
-my @string_opts  = qw(order);
+my @string_opts  = qw(order commands);
 my @ostring_opts = qw(proxy ping);
 my @debug_opts   = qw(debug);
 my @num_opts     = qw(times);
@@ -41,6 +41,7 @@
    'postamble'       => 'config to add at the end of httpd.conf',
    'ping[=block]'    => 'test if server is running or port in use',
    'debug[=name]'    => 'start server under debugger name (e.g. gdb, ddd, 
...)',
+   'commands=file'   => 'use the file with gdb commands file in debug mode',
    'breakpoint=bp'   => 'set breakpoints (multiply bp can be set)',
    'header'          => "add headers to (".join('|', @request_opts).") 
request",
    'http11'          => 'run all tests with HTTP/1.1 (keep alive) requests',
@@ -202,8 +203,8 @@
         $opts{debug} = 1;
     }

-    # breakpoint automatically turns the debug mode on
-    if (@{ $opts{breakpoint} }) {
+    # breakpoint/commands automatically turns the debug mode on
+    if (@{ $opts{breakpoint} } || exists $opts{commands}) {
         $opts{debug} ||= 1;
     }

@@ -683,7 +684,7 @@
     my $opts = $self->{opts};
     my $debug_opts = {};

-    for (qw(debugger breakpoint)) {
+    for (qw(debugger breakpoint commands)) {
         $debug_opts->{$_} = $opts->{$_};
     }

Index: Apache-Test/lib/Apache/TestServer.pm
===================================================================
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestServer.pm,v
retrieving revision 1.41
diff -u -r1.41 TestServer.pm
--- Apache-Test/lib/Apache/TestServer.pm        2001/11/22 03:13:04     1.41
+++ Apache-Test/lib/Apache/TestServer.pm        2001/11/22 08:27:59
@@ -152,25 +152,41 @@
     my $config      = $self->{config};
     my $args        = $self->args;
     my $one_process = $self->version_of(\%one_process);
+    my $server_root = $config->{vars}->{serverroot};

-    my $file = catfile $config->{vars}->{serverroot}, '.gdb-test-start';
-    my $fh   = $config->genfile($file);
+    my $file = '';
+    # try to find the user-defined debug script as is, in t/ and t/../
+    if (my $commands = $opts->{commands}) {
+        for my $try_file ($commands,
+                          map {catfile $server_root, $_, $commands} qw(. ..)) {
+            next unless -e $try_file;
+            $file = $try_file;
+            warning "using $file debug script";
+        }
+        warning "cannot find $commands" unless $file;
+    }
+
+    # provide the default debug script
+    unless ($file) {
+        $file = catfile $server_root, '.gdb-test-start';
+        my $fh = $config->genfile($file);

-    print $fh default_gdbinit();
+        print $fh default_gdbinit();

-    if (@breakpoints) {
-        print $fh "b ap_run_pre_config\n";
-        print $fh "run $one_process $args\n";
-        print $fh "finish\n";
-        for (@breakpoints) {
-            print $fh "b $_\n"
+        if (@breakpoints) {
+            print $fh "b ap_run_pre_config\n";
+            print $fh "run $one_process $args\n";
+            print $fh "finish\n";
+            for (@breakpoints) {
+                print $fh "b $_\n"
+            }
+            print $fh "continue\n";
         }
-        print $fh "continue\n";
-    }
-    else {
-        print $fh "run $one_process $args\n";
+        else {
+            print $fh "run $one_process $args\n";
+        }
+        close $fh;
     }
-    close $fh;

     my $command;
     my $httpd = $config->{vars}->{httpd};

_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:[EMAIL PROTECTED]  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/

Reply via email to