$usrctxt = "package $DB::package;"; # this won't let them modify, alas
local(*DB::dbline) = "::_<$DB::filename";
+
+ # we need to check for pseudofiles on Mac OS (these are files
+ # not attached to a filename, but instead stored in Dev:Pseudo)
+ # since this is done late, $DB::filename will be "wrong" after
+ # skippkg
+ if ($^O eq 'MacOS' && $#DB::dbline < 0) {
+ $DB::filename = 'Dev:Pseudo';
+ *DB::dbline = "::_<$DB::filename";
+ }
+
my ($stop, $action);
if (($stop,$action) = split(/\0/,$DB::dbline{$DB::lineno})) {
if ($stop eq '1') {
$name = "main" . $name if substr($name,0,2) eq "::";
my($fname, $from, $to) = ($DB::sub{$name} =~ /^(.*):(\d+)-(\d+)$/);
if ($from) {
- # XXX this needs local()-ization of some sort
- *DB::dbline = "::_<$fname";
+ local *DB::dbline = "::_<$fname";
++$from while $DB::dbline[$from] == 0 && $from < $to;
return $from;
}
package CLIENT;
use DB;
@ISA = qw(DB);
-
+
# these (inherited) methods can be called by the client
-
+
CLIENT->register() # register a client package name
CLIENT->done() # de-register from the debugging API
CLIENT->skippkg('hide::hide') # ask DB not to stop in this package
# These methods will be called at the appropriate times.
# Stub versions provided do nothing.
# None of these can block.
-
+
CLIENT->init() # called when debug API inits itself
CLIENT->stop(FILE,LINE) # when execution stops
CLIENT->idle() # while stopped (can be a client event loop)
=head1 AUTHOR
-Gurusamy Sarathy gsar@umich.edu
+Gurusamy Sarathy gsar@activestate.com
This code heavily adapted from an early version of perl5db.pl attributable
to Larry Wall and the Perl Porters.