You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gump.apache.org by le...@apache.org on 2005/07/07 11:21:31 UTC

svn commit: r209576 - in /gump/branches/Gump3: gump pygump/python/gump/engine/__init__.py pygump/python/gump/engine/algorithm.py pygump/python/gump/engine/walker.py pygump/python/main.py

Author: leosimons
Date: Thu Jul  7 02:21:29 2005
New Revision: 209576

URL: http://svn.apache.org/viewcvs?rev=209576&view=rev
Log:
Make it drop-dead-easy to attach a debugger to gump3.

 * gump,
   pygump/python/main.py: implement two new commandline options for debugging, --attach-pdb and --attach-wingdb.

 * pygump/python/gump/engine/__init__.py: add in debugger hooks that print some very basic help and pointers, the attach either pdb or wing.

 * pygump/python/gump/engine/walker.py,
   pygump/python/gump/engine/algorithm.py: comment on some interesting places to attach debuggers.

Modified:
    gump/branches/Gump3/gump
    gump/branches/Gump3/pygump/python/gump/engine/__init__.py
    gump/branches/Gump3/pygump/python/gump/engine/algorithm.py
    gump/branches/Gump3/pygump/python/gump/engine/walker.py
    gump/branches/Gump3/pygump/python/main.py

Modified: gump/branches/Gump3/gump
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/gump?rev=209576&r1=209575&r2=209576&view=diff
==============================================================================
--- gump/branches/Gump3/gump (original)
+++ gump/branches/Gump3/gump Thu Jul  7 02:21:29 2005
@@ -99,6 +99,25 @@
       parameter. Using this command will actually start the command line
       debugger pdb to run gump in, whereas the '--debug' option customizes
       the log verbosity gump will use.
+      
+      This command otherwise accepts the same arguments as the 'run'
+      command.
+"
+      ;;
+    debug-with-wing)
+      echo "
+      Run pygump in debug mode.
+      
+      Usage:
+        $0 debug [gump.py-args ...]
+    
+      This is not the same as executing the 'run' command with a '--debug'
+      parameter. Using this command will actually start the debug connector
+      for the Wing IDE and attach it to the gump process, whereas the
+      '--debug' option customizes the log verbosity gump will use.
+
+      This command otherwise accepts the same arguments as the 'run'
+      command.
 "
       ;;
     test)
@@ -199,7 +218,8 @@
       Available commands are:
      
         run             -- run pygump
-        debug           -- run pygump in debug mode
+        debug           -- run pygump in debug mode, attaching pdb
+        debug-with-wing -- run pygump in debug mode, attaching the Wing IDE
         test            -- run the pygump unit tests
         dynagump        -- run the dynagump web application server
         webgump         -- run the webgump application server
@@ -622,7 +642,13 @@
 # Run pygump in the debugger
 function debug
 {
-  do_run "from main import main; import pdb; pdb.run('main()')" $@
+  run --attach-pdb $@
+}
+
+# Run pygump in the Wing IDE debugger
+function debug_with_wing
+{
+  run --attach-wingdb $@
 }
 
 # Prematurely shut down pygump
@@ -802,6 +828,9 @@
       ;;
     debug)
       debug $@
+      ;;
+    debug-with-wing)
+      debug_with_wing $@
       ;;
     kill)
       kill $@

Modified: gump/branches/Gump3/pygump/python/gump/engine/__init__.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/engine/__init__.py?rev=209576&r1=209575&r2=209576&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/engine/__init__.py (original)
+++ gump/branches/Gump3/pygump/python/gump/engine/__init__.py Thu Jul  7 02:21:29 2005
@@ -112,7 +112,77 @@
                      dom_implementation,
                      pre_process_visitor, visitor, post_process_visitor,
                      config.paths_workspace, mergefile, dropfile)
-    
+
+    # Debugging sessions start right here
+    if settings.attach_wing:
+        print "=" * 78
+        print """
+!!!ENABLING WING IDE DEBUGGER!!!
+
+You are entering a WING IDE debug session. If you set up Wing correctly and
+specified the WINGHOME environment variable, wing should attach to gump in
+a moment.
+
+An overview of debugging external processes with Wing is at
+
+  http://wingware.com/doc/debug/debugging-externally-launched-code
+
+With the complete documentation for the Wing debugger at
+
+  http://wingware.com/doc/debug/index
+
+Note that you can get a free copy of the Wing IDE for open source development.
+Details are at
+
+  http://wingware.com/store/prices#discounts
+        """
+        print "=" * 78
+        import wingdbstub
+        wingdbstub.debugger.StartDebug(1)
+
+    if settings.attach_pdb:
+        print "=" * 78
+        print """
+!!!ENABLING COMMANDLINE DEBUGGER!!!
+
+You are entering a PDB debug session. If you didn't want this, simply type
+'continue' at the prompt that follows, then enter, then 'quit' when the
+prompt returns.
+
+Python's debugger is completely commmand-line based. An overview of
+the available commands is at
+
+  http://www.python.org/doc/current/lib/debugger-commands.html
+
+You get basic information on these commands by typing 'help'. It's a good
+idea to set some breakpoints within the run() method of the Engine class and
+some breakpoints within for example the Walker class and/or the Algorithm
+classes. Throughout the code, some useful spots to start debugging have been
+marked with "# DEBUG TIP". For example, the following sequence of commands may
+be useful for getting your feed wet (though note the line numbers are probably
+out-of-sync with the current layout of the sourcefiles):
+
+(Pdb) break gump/engine/__init__.py:235
+(Pdb) break gump/engine/__init__.py:259
+(Pdb) break gump/engine/algorithm.py:203
+(Pdb) break gump/engine/algorithm.py:230
+(Pdb) break gump/engine/walker.py:52
+(Pdb) break
+(Pdb) where
+(Pdb) continue
+(Pdb) where
+(Pdb) continue
+(Pdb) where
+(Pdb) continue
+(Pdb) where
+       ... (until you're bored)
+(Pdb) clear 1 2 3 4 5
+(Pdb) continue
+        """
+        print "=" * 78
+        import pdb
+        pdb.set_trace()
+
     # run it
     engine.run()
     
@@ -209,6 +279,7 @@
     def run(self):
         """Perform a gump run. What actually goes on during a gump run is
         largely determined by the components we're using."""
+        # DEBUG TIP: good place to start debugging :-)
         try:
             # * merge workspace into big DOM tree
             (domtree, dropped_nodes) = self.workspace_loader.get_workspace_tree(self.workspace)
@@ -231,6 +302,7 @@
             #   no circular dependencies)
             self.workspace_verifier.verify(workspace)
             
+            # DEBUG TIP: good place to look at the plugin flow control
             # * Pfew! All done. Now actually start *doing* stuff.
             self.walker.walk(workspace, self.pre_process_visitor, 'pre_process')
             # (visited_repositories, visited_modules, visited_projects) = \

Modified: gump/branches/Gump3/pygump/python/gump/engine/algorithm.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/engine/algorithm.py?rev=209576&r1=209575&r2=209576&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/engine/algorithm.py (original)
+++ gump/branches/Gump3/pygump/python/gump/engine/algorithm.py Thu Jul  7 02:21:29 2005
@@ -116,6 +116,8 @@
                         "{{{initialization stage}}}", type, value, traceback)
 
     def _visit_workspace(self, workspace):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         for visitor in self.list:
             try: visitor._visit_workspace(workspace)
             except:
@@ -123,6 +125,8 @@
                 self.error_handler.handle(visitor, workspace, type, value, traceback)
 
     def _visit_repository(self, repository):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         for visitor in self.list:
             try: visitor._visit_repository(repository)
             except:
@@ -130,6 +134,8 @@
                 self.error_handler.handle(visitor, repository, type, value, traceback)
 
     def _visit_module(self, module):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         for visitor in self.list:
             try: visitor._visit_module(module)
             except:
@@ -137,6 +143,8 @@
                 self.error_handler.handle(visitor, module, type, value, traceback)
 
     def _visit_project(self, project):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         for visitor in self.list:
             try: visitor._visit_project(project)
             except:
@@ -144,6 +152,8 @@
                 self.error_handler.handle(visitor, project, type, value, traceback)
 
     def _finalize(self, workspace):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         for visitor in self.list:
             try:
                 visitor._finalize(workspace)
@@ -187,6 +197,8 @@
           self.persistence_helper = persistence_helper
         
     def _visit_module(self, module):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         # run the delegates
         try:
             for visitor in self.list:
@@ -212,6 +224,8 @@
         #        mark_skip(project)
             
     def _visit_project(self, project):
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         # check for dependencies that failed to build
         for relationship in project.dependencies:
             if check_failure(relationship.dependency):

Modified: gump/branches/Gump3/pygump/python/gump/engine/walker.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/engine/walker.py?rev=209576&r1=209575&r2=209576&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/engine/walker.py (original)
+++ gump/branches/Gump3/pygump/python/gump/engine/walker.py Thu Jul  7 02:21:29 2005
@@ -47,6 +47,8 @@
         Returns a tuple containing the repositories visited, the modules
         visited, and the projects visited, in the order they were visited.
         """
+        # DEBUG TIP: This is a good function to monitor if you want to figure
+        #   out flow control
         visited_repositories = []
         visited_modules = []
         visited_projects = []

Modified: gump/branches/Gump3/pygump/python/main.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/main.py?rev=209576&r1=209575&r2=209576&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/main.py (original)
+++ gump/branches/Gump3/pygump/python/main.py Thu Jul  7 02:21:29 2005
@@ -150,6 +150,16 @@
                       dest="irc",
                       default=False,
                       help="enable an IRCbot during this run using nickname@irc.freenode.net/channel")
+    parser.add_option("--attach-pdb",
+                      action="store_true",
+                      dest="attach_pdb",
+                      default=False,
+                      help="Run within the Python Debugger (PDB)")
+    parser.add_option("--attach-wingdb",
+                      action="store_true",
+                      dest="attach_wing",
+                      default=False,
+                      help="Run within the Wing IDE Debugger")
                       
     return parser
 
@@ -424,8 +434,19 @@
     
     options.version = GUMP_VERSION
     
+    # check for debug info
+    if options.attach_wing:
+        try:
+            winghome = os.environ["WINGHOME"]
+        except:
+            print "ERROR: debug environment not set up properly. Please set WINGHOME to the"
+            print "       directory containing your Wing IDE installation."  
+            sys.exit(2)
+
     # create logger
     log = _Logger(options.logdir)
+    
+    # fire it up!
     exitcode = 0
     try:
         if options.debug: