wiki:Features/Perl5Debugger

Version 55 (modified by bowtie, 2 years ago) (diff)

--

<-back

Debug2 in Padre trunk 0.93 r17526

If you want to see this in Padre trunk.

  • Breakpoints up and working
  • Debug output up and working
  • Debugger up and working

critiques welcome

Tips

  • Turn on $OUTPUT_AUTOFLUSH
  • Try break-pointing 1; at end of each file if you want to poke about with "p" before return or end
  • Be patient;
    • let Padre finish background tasks before launching debug
    • let each action complete, before launching next
    • remember it's using socket communications, hence ip time out :(

  • The three Shows relate to the Panels below.
  • Launch (L), Breakpoints (b) and Quit (q) as per tool-bar
  • Visit Debug Wiki, is here.

debug menu

Tool-Bar

tool-bar_icons

  • we only need 3 buttons on the tool bar, ( 3 on right )
    • launch debugger ( launches Breakpoints & Debugger, enables tool-bar quit and then runs debug against current file )
    • breakpoint toggle adds blue dotdotdot margin marker. (works with or without Breakpoints panel visible, so you can add BP's as you go)
    • quit debugger ( initially greyed out )

Breakpoints

breakpoints

Top icons

  • gray cross ( Delete MARKER_NOT_BREAKABLE Current File Only )
  • refresh Ctrl-List
  • Breakpoints ( Toggle ) also updates Ctrl-List and Margin Markers ( the blue dotdotdot co exist with diff markers )

Middle

  • Current File (BLUE)
  • MARKER_NOT_BREAKABLE (GRAY) ( dotdotdot margin markers are also gray )
  • Project files (GREEN)

Bottom

  • check Project show all files in current project with breakpoints
  • if check projects, show delete all breakpoints in this project only

NB Breakpoints are stored as absolute paths (debug will open files based on absolutes paths)

If you want to Peek inside the DB use Cookbook Recipe 04

debug breakpoints

Debugger

When you "run debug" :)

  • quit(q) is always visible, ( toolbar quit should now be enabled )
  • the debugger will load breakpoints against the current file and it's project files, when it is load by the perl debug program, if you get it wrong, just quit adjust breakpoints as you go with b|B or quit and adjust then re run.
  • new icons will only be visible when debug is running
    • step-in(s), step-out(n), step-over(r), run-till(c), glasses(p)
      • glasses, as per previous version, shown in black text ( if you select $_ remember DWISNWIM ) this is a persistent p :)
  • when perl debug is running the Debugger Output panel will be opened, initially with the perl debug help screen.
  • note the green SMALLRECT in margin, showing debug position, as previously
    • Tip if you want to delay closing of debugger output, breakpoint the 1; at end of your file :)

why blue, I here you ask?, well others use yellow and red, but we have a wonderful blue Morpho butterfly :) hence blue

debuggerdebugger2

  • Show
    • show local variables(BLUE) is fixed to (y 0) local, as I don't know how to work out what level the debugger is at and how many levels there are, silly me
    • show global variables(GRAY) is doing X !(INC|ENV|SIG) against a current file which is also part of a perl project.
      • I have been getting perl debug errors, see POD below, so you might notice it is automaticly disabled when I think it is unsafe, then re-enable.
      • If you want to see @ISA|@INC|%ENV|%SIG use the p|x button.
  • Debugger-Output Options
    • My premises is that we are just wrapping the command line debugger, in a nice way, hence we will use the existing perl debug command language thus subliminally teaching the perl debug CLI instructions
    • These options all display in the Debug-Output panel.
      • trace is a toggle against next action
      • . => return to the executed line
      • v => view around line
      • L => list all actions
      • p|x => evaluate expression
        • output shows 'expression = result', tip turn Trace off
        • works with $ @ % also 2 + 3
        • if empty returns $_ if exists or error )
      • b|B => running Breakpoints, use .vL to see for your self, (current file)
      • M => display loaded modules
      • T => stack back-trace
      • E => display thread id's
      • o => Display all options
  • Musings
    • -,l ignored as we are in an IDE
    • S dropped in place of M so we can see version and location
    • H just ignored
    • i don't work for silly me

Debugger Output

The output window is only shown when debug is running

  • See below ( only displays current output )
  • red text, I wonder what the inspiration was for this!

Screen Shot

Debug2

debug4

debug3

  • NB look at the wasted screen real-estate in the bottom right hand corner, I suggest that we should extend the right hand panel down into this space?

POD from Main.pm

=pod

=head1 STATUS

waiting until this Plug-in is working before migrating into Padre ( => 0.93 ) 
don't want to muck trunk.

To view Padre::DB::DebugBreakpoints use P-P-Cookbook::Recipie04 in trunk

We can now add and delete breakpoints via icon in debug simulation and Breakpoint panel.

Load breakpoints for current file, on load of Breakpoint panel.

Get breakpoint panel to only show current file and current project bp's only, 
inspired by vcs options

the debugger loads breakpoints from DB when started, for all files in current project. 
when debugger loads a new file ( current ) the current files BP's are add to the debugger, 
use L to see this.

changed breakpoint margin marker to ... so as to co-exist with diff margin markers,
and avoid information contamination due to colour washout of previous SMALLRECT.
Add Gray for not active with switched by debugger, also added new home made icons for step_....

add functionality from trunk so all icons mimic current debug implementation

look at displaying variables yes, but in a nice table (y 0) working

debug-output only visable when debugger running, on start of new debug first displays debugger help

Added butons with color leters to corespond to debugers actions.

=head1 FeedBack

what options should be in Debugger Panel / Debug-Output Options

room for 3 more using coloured letters



=head1 BUGS AND LIMITATIONS 

normal editor modifications do not update the DB,
( due to DB storing absolute values and editor is relative )
will need to look in future at features and background task to do this.

Current thinking would be to compare bp time-stamp to History time-stamp if it had one

=head2 debug options X & V sometimes produce the following

    You can't FIRSTKEY with the %~ hash at /home/kevin/perl5/perlbrew/perls/perl-5.14.1/lib/5.14.1/dumpvar.pl line 380
        ...propagated at /home/kevin/perl5/perlbrew/perls/perl-5.14.1/lib/5.14.1/perl5db.pl line 2438.
     at /home/kevin/perl5/perlbrew/perls/perl-5.14.1/lib/5.14.1/perl5db.pl line 2438
        DB::DB called at sandbox 06 line 29
    Debugged program terminated.  Use q to quit or R to restart,
      use o inhibit_exit to avoid stopping after program termination,
      h q, h R or h o to get additional info.

=head2 entities in file names

    Printing in line 636 of /home/kevin/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Debug/Client.pm:
    "/usr/src/Padre/Pad�e-Plugin-Debug/scripts/ExSewi.pm"
    Printing in line 146 of /usr/src/Padre/Padre-Plugin-Debug/lib/Padre/Plugin/Debug/Debugger.pm:
    "/usr/src/Padre/Pad�e-Plugin-Debug/scripts/ExSewi.pm"
    No such file or directory when trying to open '/usr/src/Padre/Pad�e-Plugin-Debug/scripts/ExSewi.pm' at /usr/src/Padre/Padre/lib/Padre/Wx/Main.pm line 4043.


=head1 TODO 

get panels to integrate with Padre, play nice=yes, still not finished

re-look at panel layout

Add methods to Debug::Client in trunk as and where needed

Change focus to Debugger-Output in bottom panel 

=head2 Tests & Notes

feedback required please

=head1 Method 


=cut


Description

Run your code under a debugger with real-time display of results

TBD

  • Debugger supports Stepping, Breakpoints, Watches, Variable evaluation, Stack module #11

Planning for a new version of the debugger:

  • The debugger can be launched by any of the following: Run / Step In / Step Over / Step Out / Run till breakpoint
    • Run would stop at the first statement and it will be grayed out once the debugger is running
    • Once the debugger is running the saved breakpoints of all the files belonging to this thing will be sent over.
      • The question what does 'this thing' mean? Which files belong to the current run?
      • Files that are currently open in the editor? File that belong to the current session? File in the current project?
  • Movement: Step In / Step Over / Step Out / Run till breakpoint
    • They do the corresponding action of the built in debugger
  • Jump to current execution line ???
  • Set a breakpoint (this should save the breakpoint in a config file and if the debugger is currently running then set the breakpoint in the debugger as well)
    • How should a breakpoint remembered? Filename and line number? Filename and sub name?
  • Remove breakpoint
  • List all breakpoints ???
  • Show trace - shows the current trace - it should open a window (maybe in the right-side window of the debugger) and constantly update the trace until the user turns it off.
  • Display value - the selected variable, or the one that is under the cursor will be added to the right side where its value will be show every time the debugger pauses the execution
  • Show Value now - show the value of the currently selected variable
  • Evaluate Expression... opens a window where you can type in arbitrary perl expression for example:
    • print 2 + 3
    • $z = 42
    • print $z
  • Quit debugger ???
  • Set watch - The user should be able to type in an arbitrary expression (if there was something selected then this will be the default) When that expression changes value the debugger will stop The expression should be saved belonging to the main script that is being executed. When the debugger is launched again these watchpoints need to be set again (later we could display them to the user and ask the user if she wants to set them or not)
  • Remove watch - remove an expression from the watch list (and from the saved watches)

Remember in database:

filename - breakpoint - line number - condition main-file - expression to display (e.g. a variable name or a more complex expression) main-file - show stack trace on/off

main-file - a history of expressions evaluated? main-file - a set of watches (conditional, non-location breakpoints)

Tickets

Debugger for Perl 5

Ticket Resolution Status Type Priority Summary Owner Reporter
#1507 new defect minor Debugger causing Padre crash - MacOSx bowtie ron
#1485 fixed closed defect major debugger RAW command does not update state properly bowtie SvenDowideit
#1480 reopened defect major debugger hangs bowtie vsespb
#1471 reopened defect major Can I see a call stack? SvenDowideit SvenDowideit
#1470 new defect major The debugger fails to find the file being stepped into SvenDowideit SvenDowideit
#1464 new enhancement major Add a Debug Launch dialogue SvenDowideit SvenDowideit
#1442 new enhancement major Perl-Arguments : startup options per file pandelis
#1420 fixed closed defect minor Start Padre with Debugger Panel active ... bowtie dolman
#1417 assigned defect minor Debugger hangs with 'Show Local Variables' and very deep data-structures bowtie whumann
#1416 fixed closed defect minor Debug::Client::set_breakpoint ignores some errors bowtie whumann
#1415 fixed closed defect trivial Debugger stepping into anonymous subs may crash Padre bowtie whumann
#1412 fixed closed enhancement trivial Evaluate Expression in the debugger bowtie szabgab
#1411 assigned enhancement trivial Remove value from display bowtie szabgab
#1410 fixed closed enhancement minor Display Value should show value immediately bowtie szabgab
#1408 not relevant closed enhancement minor How to examine/inspect Unicode strings? szabgab
#1403 not relevant closed enhancement minor Debugger key bindings (n,s) do not function bowtie brewer
#1401 duplicate closed defect critical crash: Can't call method "get_h_var" on an undefined value at …/Padre/Wx/Panel/Debugger.pm line 904. daxim
#1389 fixed closed defect trivial Breakpoints visual indicators aren't restored on Padre restart bowtie tome
#1388 fixed closed defect minor Using breakpoints toolbar item on un-named file causes crash bowtie tome
#1387 fixed closed defect minor Bad Query/Potential SQL injection in Padre/Breakpoints.pm bowtie tome
#1357 fixed closed defect trivial "Debugger" menu is shown for non-Perl files alias, adamk zenogantner
#1211 not relevant closed defect major Hot keys for Debug do not work fellipecm
#1086 fixed closed enhancement major Debugger -> Display Value should support any Perl expression dandv
#1085 fixed closed defect major "Debug -> Evaluate expression" doesn't display its output dandv
#1084 reopened enhancement minor Tooltip expression evaluation bowtie dandv
#1083 fixed closed enhancement minor It should be possible to set breakpoints before starting the debugger szabgab dandv
#1036 not a bug closed defect critical Debugged scripts can't find modules in the current directory dandv
#1035 not a bug closed defect critical Padre hangs while debugged script hangs szabgab dandv
#1034 fixed closed defect major New tab opened when debugging script with errors szabgab dandv
#1005 not relevant closed defect minor Uninitialized values when starting debugger on a file with errors zenogantner
#931 not relevant closed defect major debugger: show watch values immediately after adding dam
#930 not relevant closed enhancement minor debugger: watch non-scalar variables dam
#929 not relevant closed enhancement minor debugger: add watch under cursor dam
#928 not relevant closed enhancement minor debugger: ability to remove watch items dam
#882 not relevant closed defect major debugging for Wx-scripts doesn't work bowtie mtbf40
#833 fixed closed defect major Syntax error crash padre when trying to debug szabgab vrobin
#812 not relevant closed defect major Win32::GUI programs require 'external window' option azawawi Floyd-ATC
#333 fixed closed defect major too much debug information azawawi jquelin
#321 fixed closed enhancement major API for adding entries to right click menu pmakholm
#11 fixed closed enhancement major Add debugger from within the editor szabgab szabgab

Debug::Client

Ticket Resolution Status Type Priority Summary Owner Reporter
#1513 new defect major Unable to use debugger in script that uses Lingua::Wordnet Perl module bowtie, szabgab Plecto
#1494 fixed closed defect major Debug-Client-0.24 tests hang bowtie, szabgab Schwern
#1469 fixed closed defect major Debug::Client 0.21_12 hangs on Windows bowtie, szabgab chorny
#1427 fixed closed enhancement minor Debug::Client 0.20 test failures against win32 or not! bowtie bowtie
#1370 fixed closed defect minor Debug::Client, @list context request fails against perl-5.15.6 (3 of n) bowtie bowtie
#1368 fixed closed defect major Debug::Client tests fail against perl-5.15.6 (2 of n) bowtie bowtie
#1367 fixed closed defect minor Debug::Client tests fail against perl-5.15.6 (1 of n) bowtie bowtie
#832 not relevant closed defect major GetOptions( spawns unsavedX tab and crash Padre in StepOver Debugging szabgab vrobin
#831 fixed closed defect minor CPAN Install, test failing caused by Term::Readline szabgab vrobin

Test

TODO

  • Colours from themes, thanks subT
  • Conditional Breakpoints
  • Watches
  • Actions


__END__

<-back

Attachments