Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
ptkdb(3)	      User Contributed Perl Documentation	      ptkdb(3)

       Devel::ptkdb - Perl debugger using a Tk GUI

	 ptkdb is a debugger for perl that uses	perlTk for a user interface.
	 Features include:

	   Hot Variable	Inspection
	   Breakpoint Control Panel
	   Expression List
	   Subroutine Tree

       To debug	a script using ptkdb invoke perl like this:

	   perl	-d:ptkdb

	   perl	-d:ptkdb

Code Pane
       Line Numbers
	    Line numbers are presented on the left side	of the window. Lines that
	    have lines through them are	not breakable. Lines that are plain text
	    are	breakable. Clicking on these line numbers will insert a
	    breakpoint on that line and	change the line	number color to
	    $ENV{'PTKDB_BRKPT_COLOR'} (Defaults	to Red). Clicking on the number
	    again will remove the breakpoint.  If you disable the breakpoint with
	    the	controls on the	BrkPt notebook page the	color will change to
	    $ENV{'PTKDB_DISABLEDBRKPT_COLOR'}(Defaults to Green).

       Cursor Motion
	   If you place	the cursor over	a variable (i.e. $myVar, @myVar, or
	   %myVar) and pause for a second the debugger will evaluate the
	   current value of the	variable and pop a balloon up with the
	   evaluated result. This feature is not available with	Tk400.

	   If Data::Dumper(standard with perl5.00502)is	available it will be
	   used	to format the result.  If there	is an active selection,	the
	   text	of that	selection will be evaluated.

Notebook Pane
	  This is a list of expressions	that are evaluated each	time the
	  debugger stops. The results of the expresssion are presented
	  heirarchically for expression	that result in hashes or lists.	 Double
	  clicking on such an expression will cause it to collapse; double
	  clicking again will cause the	expression to expand. Expressions are
	  entered through B<Enter Expr>	entry, or by Alt-E when	text is
	  selected in the code pane.

	  The B<Quick Expr> entry, will	take an	expression, evaluate it, and
	  replace the entries contents with the	result.	 The result is also
	  transfered to	the 'clipboard'	for pasting.

	  Displays a list of all the packages invoked with the script
	  heirarchially. At the	bottom of the heirarchy	are the	subroutines
	  within the packages.	Double click on	a package to expand
	  it. Subroutines are listed by	their full package names.

	  Presents a list of the breakpoints current in	use. The pushbutton
	  allows a breakpoint to be 'disabled' without removing	it. Expressions
	  can be applied to the	breakpoint.  If	the expression evaluates to be
	  'true'(results in a defined value that is not	0) the debugger	will
	  stop the script.  Pressing the 'Goto'	button will set	the text pane
	  to that file and line	where the breakpoint is	set.  Pressing the
	  'Delete' button will delete the breakpoint.

   File	Menu
	   Presents a dialog box telling you about the version of ptkdb.  It
	   recovers your OS name, version of perl, version of Tk, and some
	   other information

	   Presents a list of files that are part of the invoked perl script.
	   Selecting a file from this list will	present	this file in the text

       Save Config...
	   Requires Data::Dumper. Prompts for a	filename to save the
	   configuration to. Saves the breakpoints, expressions, eval text and
	   window geometry. If the name	given as the default is	used and the
	   script is reinvoked,	this configuration will	be reloaded

	       B<NOTE:>	 You may find this preferable to using

       Restore Config...
	   Requires Data::Dumper.  Prompts for a filename to restore a
	   configuration saved with the	"Save Config..." menu item.

       Goto Line...
	   Prompts for a line number.  Pressing	the "Okay" button sends	the
	   window to the line number entered.  item Find Text...

	   Prompts for text to search for.  Options include forward search,
	   backwards search, and regular expression searching.

	    Causes the debugger	and the	target script to exit.

   Control Menu
       Run The debugger	allows the script to run to the	next breakpoint	or
	   until the script exits.  item Run To	Here

	   Runs	the debugger until it comes to wherever	the insertion cursor
	   in text window is placed.

       Set Breakpoint
	   Sets	a breakpoint on	the line at the	insertion cursor.  item	Clear

	   Remove a breakpoint on the at the insertion cursor.

       Clear All Breakpoints
	   Removes all current breakpoints

       Step Over
	   Causes the debugger to step over the	next line.  If the line	is a
	   subroutine call it steps over the call, stopping when the
	   subroutine returns.

       Step In
	   Causes the debugger to step into the	next line.  If the line	is a
	   subroutine call it steps into the subroutine, stopping at the first
	   executable line within the subroutine.

	   Runs	the script until it returns from the currently executing

	   Saves the breakpoints and expressions in a temporary	file and
	   restarts the	script from the	beginning.  CAUTION: This feature will
	   not work properly with debugging of CGI Scripts.

       Stop On Warning
	   When	"-w" is	enabled	the debugger will stop when warnings such as,
	   "Use	of uninitialized value at	line N"	are
	   encountered.	 The debugger will stop	on the NEXT line of execution
	   since the error can't be detected until the current line has

	   This	feature	can be turned on at startup by adding:

	   $DB::ptkdb::stop_on_warning = 1 ;

	   to a	.ptkdbrc file

   Data	Menu
       Enter Expression
	   When	an expression is entered in the	"Enter Expression:" text box,
	   selecting this item will enter the expression into the expression
	   list.  Each time the	debugger stops this expression will be
	   evaluated and its result updated in the list	window.

       Delete Expression
	    Deletes the	highlighted expression in the expression window.

       Delete All Expressions
	    Delete all expressions in the expression window.

       Expression Eval Window
	   Pops	up a two pane window. Expressions of virtually unlimitted
	   length can be entered in the	top pane.  Pressing the	'Eval' button
	   will	cause the expression to	be evaluated and its placed in the
	   lower pane. If Data::Dumper is available it will be used to format
	   the resulting text.	Undo is	enabled	for the	text in	the upper

	   HINT:  You can enter	multiple expressions by	separating them	with

       Use Data::Dumper	for Eval Window
	   Enables or disables the use of Data::Dumper for formatting the
	   results of expressions in the Eval window.

   Stack Menu
       Maintains a list	of the current subroutine stack	each time the debugger
       stops. Selecting	an item	from this menu will set	the text in the	code
       window to that particular subourtine entry point.

   Bookmarks Menu
       Maintains a list	of bookmarks.  The booksmarks are saved	in

       Add Bookmark
	   Adds	a bookmark to the bookmark list.

       Here is a list of the current active XResources options.	Several	of
       these can be overridden with environmental variables. Resources can be
       added to	.Xresources or .Xdefaults depending on your X configuration.
       To enable these resources you must either restart your X	server or use
       the xrdb	-override resFile command.  xfontsel can be used to select

	   * Perl Tk Debugger XResources.
	   * Note... These resources are subject to change.
	   * Use 'xfontsel' to select different	fonts.
	   * Append these resource to ~/.Xdefaults | ~/.Xresources
	   * and use xrdb -override ~/.Xdefaults | ~/.Xresources
	   * to	activate them.
	   /* Set Value	to se to place scrollbars on the right side of windows
	 CAUTION:  extra whitespace at the end of the line is causing
	   failures with Tk800.011.

	   sw -> puts scrollbars on left, se puts scrollars on the right

	   ptkdb*scrollbars: sw
	   /* controls where the code pane is oriented,	down the left side, or across the top */
	   /* values can be set	to left, right,	top, bottom */
	   ptkdb*codeside: left

	   * Background	color for the balloon
	   * CAUTION:  For certain versions of Tk trailing
	   * characters	after the color	produces an error
	   ptkdb.frame2.frame1.rotext.balloon.background: green
	   ptkdb.frame2.frame1.rotext.balloon.font: fixed			/* Hot Variable	Balloon	Font */

	   ptkdb.frame*font: fixed			     /*	Menu Bar */
	   ptkdb.frame.menubutton.font:	fixed		     /*	File menu */
	   ptkdb.frame2.frame1.rotext.font: fixed	     /*	Code Pane */
	   ptkdb.notebook.datapage.frame1.hlist.font: fixed  /*	Expression Notebook Page */

	   ptkdb.notebook.subspage*font: fixed		     /*	Subroutine Notebook Page */
	   ptkdb.notebook.brkptspage*entry.font: fixed	     /*	Delete Breakpoint Buttons */
	   ptkdb.notebook.brkptspage*button.font: fixed	     /*	Breakpoint Expression Entries */
	   ptkdb.notebook.brkptspage*button1.font: fixed     /*	Breakpoint Expression Entries */
	   ptkdb.notebook.brkptspage*checkbutton.font: fixed /*	Breakpoint Checkbuttons	*/
	   ptkdb.notebook.brkptspage*label.font: fixed	     /*	Breakpoint Checkbuttons	*/

	   ptkdb.toplevel.frame.textundo.font: fixed	     /*	Eval Expression	Entry Window */
	   ptkdb.toplevel.frame1.text.font: fixed	     /*	Eval Expression	Results	Window */
	   ptkdb.toplevel.button.font:	fixed		     /*	"Eval..." Button */
	   ptkdb.toplevel.button1.font:	fixed		     /*	"Clear Eval" Button */
	   ptkdb.toplevel.button2.font:	fixed		     /*	"Clear Results"	Button */
	   ptkdb.toplevel.button3.font:	fixed		     /*	"Clear Dismiss"	Button */

	   * Background	color for where	the debugger has stopped
	   ptkdb*stopcolor: blue

	   * Background	color for set breakpoints
	   ptkdb*breaktagcolor*background: yellow
	   ptkdb*disabledbreaktagcolor*background: white
	   * Font for where the	debugger has stopped
	   ptkdb*stopfont: -*-fixed-bold-*-*-*-*-*-*-*-*-*-*-*

	   * Background	color for the search tag
	   ptkdb*searchtagcolor: green

Environmental Variables
	   Sets	the background color of	a set breakpoint

	   Sets	the background color of	a disabled breakpoint

	   Sets	the font of the	Text in	the code pane.

	   Sets	which side the code pane is packed onto.  Defaults to 'left'.
	   Can be set to 'left', 'right', 'top', 'bottom'.

	   Overrides the Xresource ptkdb*codeside: side.

	    Sets the font used in the expression notebook page.

	    Sets the font used in the Expression Eval Window

	    Sets the value used	for Data::Dumper 'indent' setting. See man Data::Dumper

	    A non-zero value Sets the scrollbars of all	windows	to be on the
	    right side of the window. Useful for Windows users using ptkdb in an
	    XWindows environment.

	   Sets	the format of line numbers on the left side of the window.
	   Default value is %05d.  useful if you have a	script that contains
	   more	than 99999 lines.

	   Sets	the X display that the ptkdb window will appear	on when
	   invoked.  Useful for	debugging CGI scripts on remote	systems.

	   Sets	the path of the	bookmarks file.	 Default is

	   Sets	the color that highlights the line where the debugger is

       If this file is present in ~/ or	in the directory where perl is invoked
       the file	will be	read and executed as a perl script before the debugger
       makes its initial stop at startup.  There are several 'api' calls that
       can be used with	such scripts. There is an internal variable
       $DB::no_stop_at_start that may be set to	non-zero to prevent the
       debugger	from stopping at the first line	of the script.	This is	useful
       for debugging CGI scripts.

       There is	a system ptkdbrc file in $PREFIX/lib/perl5/$VERS/Devel/ptkdbrc

       brkpt($fname, @lines)
	   Sets	breakspoints on	the list of lines in $fname.  A	warning
	   message is generated	if a line is not breakable.

       condbrkpt($fname, @($line, $expr) )
	   Sets	conditional breakpoints	in $fname on pairs of $line and	$expr.
	   A warning message is	generated if a line is not breakable.  NOTE:
	   the validity	of the expression will not be determined until
	   execution of	that particular	line.

	   Sets	a breakpoint on	each subroutine	name listed. A warning message
	   is generated	if a subroutine	does not exist.	 NOTE: for a script
	   with	no other packages the default package is "main::" and the
	   subroutines would be	"main::mySubs".

	   Uses	the list of @regExprs as a list	of regular expressions to set
	   breakpoints.	 Sets breakpoints on every subroutine that matches any
	   of the listed regular expressions.

       textTagConfigure(tag, ?option?, ?value?)
	   Allows the user to format the text in the code window. The option
	   value pairs are the same values as the option for the tagConfigure
	   method documented in	Tk::Text. Currently the	following tags are in

	       'code'		    Format for code in the text	pane
	       'stoppt'		    Format applied to the line where the debugger is currently stopped
	       'breakableLine'	    Format applied to line numbers where the code is 'breakable'
	       'nonbreakableLine'   Format applied to line numbers where the code is no	breakable
	       'breaksetLine'	    Format applied to line numbers were	a breakpoint is	set
	       'breakdisabledLine'  Format applied to line numbers were	a disabled breakpoint is set
	       'search_tag'	    Format applied to text when	located	by a search.


	    # Turns off	the overstrike on lines	that you can't set a breakpoint	on
	    # and makes	the text color yellow.
	       textTagConfigure('nonbreakableLine', -overstrike	=> 0, -foreground => "yellow") ;

	   Add a list of expressions to	the 'Exprs' window. NOTE: use the
	   single quote	character \' to	prevent	the expression from being
	   "evaluated" in the string context.


	       # Adds the $_ and @_ expressions	to the active list

	       add_exprs('$_', '@_') ;

   Debugging Other perlTk Applications
       ptkdb can be used to debug other	perlTk applications if some cautions
       are observed. Basically,	do not click the mouse in the application's
       window(s) when you've entered the debugger and do not click in the
       debugger's window(s) while the application is running.  Doing either
       one is not necessarily fatal, but it can	confuse	things that are	going
       on and produce unexpected results.

       Be aware	that most perlTk applications have a central event loop.  User
       actions,	such as	mouse clicks, key presses, window exposures, etc will
       generate	'events' that the script will process. When a perlTk
       application is running, its 'MainLoop' call will	accept these events
       and then	dispatch them to appropriate callbacks associated with the
       appropriate widgets.

       Ptkdb has its own event loop that runs whenever you've stopped at a
       breakpoint and entered the debugger. However, it	can accept events that
       are generated by	other perlTk windows and dispatch their	callbacks.
       The problem here	is that	the application	is supposed to be 'stopped',
       and logically the application should not	be able	to process events.

       A future	version	of ptkdb will have an extension	that will 'filter'
       events so that application events are not processed while the debugger
       is active, and debugger events will not be processed while the target
       script is active.

   Debugging CGI Scripts
       One advantage of	ptkdb over the builtin debugger(-d) is that it can be
       used to debug CGI perl scripts as they run on a web server. Be sure
       that that your web server's perl	instalation includes Tk.

       Change your

	 #! /usr/local/bin/perl


	 #! /usr/local/bin/perl	-d:ptkdb

       TIP: You	can debug scripts remotely if you're using a unix based
       Xserver and where you are authoring the script has an Xserver.  The
       Xserver can be another unix workstation,	a Macintosh or Win32 platform
       with an appropriate XWindows package.  In your script insert the
       following BEGIN subroutine:

	   sub BEGIN {
	     $ENV{'DISPLAY'} = "myHostname:0.0"	;

       Be sure that your web server has	permission to open windows on your
       Xserver (see the	xhost manpage).

       Access your web page with your browswer and 'submit' the	script as
       normal.	The ptkdb window should	appear on myHostname's monitor.	At
       this point you can start	debugging your script.	Be aware that your
       browser may timeout waiting for the script to run.

       To expedite debugging you may want to setup your	breakpoints in advance
       with a .ptkdbrc file and	use the	$DB::no_stop_at_start variable.	 NOTE:
       for debugging web scripts you may have to have the .ptkdbrc file
       installed in the	server account's home directory	(~www) or whatever
       username	your webserver is running under.  Also try installing a
       .ptkdbrc	file in	the same directory as the target script.

       Breakpoint Controls
	   If the size of the right hand pane is too small the breakpoint
	   controls are	not visible.  The breakpoints are still	there, the
	   window may have to be enlarged in order for them to be visible.

       Balloons	and Tk400
	   The Balloons	in Tk400 will not work with ptkdb.  All	other
	   functions are supported, but	the Balloons require Tk800 or higher.

       Andrew E. Page,

       Matthew Persico	  For suggestions, and beta testing.

       Please report bugs through the following	URL:

perl v5.32.1			  2004-04-01			      ptkdb(3)

NAME | DESCRIPTION | SYNOPSIS | Usage | Code Pane | Notebook Pane | Menus | Options | Environmental Variables | FILES | NOTES | KNOWN PROBLEMS | AUTHOR | ACKNOWLEDGEMENTS | BUG REPORTING

Want to link to this manual page? Use this URL:

home | help