Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Under the Perl debugger

by mpersico (Monk)
on Mar 14, 2016 at 20:27 UTC ( [id://1157716]=perlquestion: print w/replies, xml ) Need Help??

mpersico has asked for the wisdom of the Perl Monks concerning the following question:

What is the canonical method of determining if the currently executing code is running under a debugger? I've tried checking
@{"_<$script"};
which works in the script itself (where $script is set to $0) but when put that in a module, it doesn't work.

FYI, I've searched various combinations for 'under perl debug' and come up empty, so if this is an obvious RTFM, my apologies. I could have sworn I'd seen this answered here before.

Replies are listed 'Best First'.
Re: Under the Perl debugger
by Lotus1 (Vicar) on Mar 14, 2016 at 20:56 UTC

    I found this node and this link and this.

    if ( defined (&DB::DB ) ) {

    When you use the -d switch &DB::DB is called before each line.

Re: Under the Perl debugger
by thomas895 (Deacon) on Mar 14, 2016 at 20:35 UTC

    Try checking if $INC{'perl5db.pl'} is set.

    Edit: And if you use ptkdb, simply check for $INC{'Devel/ptkdb.pm'}.

    -Thomas
    "Excuse me for butting in, but I'm interrupt-driven..."

      DUH! I started by looking for perl5db.pl when I was running under Devel::ptkdb, forgetting that any other debugger is loaded INSTEAD of perl5db.pl, not of ON TOP OF perl5db.pl.

      I had also thought that I could use the current value of $DB::single to determine if I was in the debugger; that way I could get a value for the function no matter what debugger you are running. For some reason, however, I only see its value as zero, even under -d.

      Anyway, here is what I am using for now:

      sub am_i_debugging { print "$DB::single\n"; return (the_debugger_is()) ? 1 : 0; } sub the_debugger_is { return '-d:ptkdb' if(exists $INC{'Devel/ptkdb.pm'}); return '-d' if(exists $INC{'perl5db.pl'}); return ''; } print( join("\n", am_i_debugging(), the_debugger_is(), ''));
        No!

        As already said, checking &DB::DB is the way to go. There are some IDEs and tools patching and renaming the debugger.

        Cheers Rolf
        (addicted to the Perl Programming Language and ☆☆☆☆ :)
        Je suis Charlie!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1157716]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (5)
As of 2024-04-25 14:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found