Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
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 wandering the Monastery: (4)
As of 2024-04-25 16:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found