Using the PyWin Debugger

The PyWin Debugger is an interactive GUI that allows you to debug scripts running in Softimage using the power of Python debugging. The module that defines it is debugger, which is built on the pdb module (the standard Python debugger).

Debug Features

The PyWin Debugger provides the following debugging tools to help you debug your scripts:

Action | Toolbar | Menu | Hotkey
Setting and clearing breakpoints. |  | File > Debug > Toggle Breakpoint | F9
Stepping through scripts. |  | File > Debug > Step in File > Debug > Step out | F10 F11
Viewing the call stack (useful when you are debugging scripts called from within scripts). |  |  |
Setting and viewing variables. |  |  |
See what’s available in a Python module (Python Object Browser) or COM typelib (COM Browser) |  | Tools > Browser Tools > COM Browser |
Convert COM libraries into static dispatch Python modules |  | Tools > COM Makepy utility |
Display output from any programs that use win32traceutil |  | Tools > Trace Collector Debugging tool |

Invoking the PyWin Debugger

If you are using the recommended pywin32 extension for Python, the PyWin Debugger is already installed and waiting to be invoked. Because it is a Python module, you need to import it before you can use it:

    # This loads the debugger module...
    import pywin.debugger as dbg

    # This launches the GUI:
    dbg.brk()

An alternative call to the debugger is:

    dbg.set_trace()

| The context menu in the Script Editor provides an option to auto-insert this snippet:

Controlling Softimage from the Debugger

Because the PyWin Debugger interacts directly with Softimage you can control Softimage by typing commands in the Interactive Window. For example, if you type Application.LogMessage( "Debug this!" ) in the Debugger’s Interactive Window and press Enter, "Debug this!" is logged to the history pane in Softimage.

Enhancing AutoComplete

You can modify the interactive window in the PyWin debugger to have a Softimage object expose all its methods in the auto-complete prompt.

- Edit this file: %PythonPath%\Lib\site-packages\pythonwin\pywin\scintilla\view.py and add the following lines in the _AutoComplete function (use the context lines to find out where to put the code):

                # The object may be a COM object with typelib support - lets see if we can get its props.
                # (contributed by Stefan Migowsky)
                try:
                    # Get the automation attributes
                    items_dict.update(ob.__class__._prop_map_get_)
                    # See if there is an write only property
                    # could be optimized
                    items_dict.update(ob.__class__._prop_map_put_)
                    # append to the already evaluated list
                except AttributeError:
                    pass
     # BEGIN ADDED LINES
                # The object might be a pure COM dynamic dispatch with typelib support - lets see if we can get its props.
                if hasattr(ob, "_oleobj_"):
                    try:
                        for iTI in xrange(0,ob._oleobj_.GetTypeInfoCount()):
                            typeInfo = ob._oleobj_.GetTypeInfo(iTI)
                            typeAttr = typeInfo.GetTypeAttr()
                            for iFun in xrange(0,typeAttr.cFuncs):
                                funDesc = typeInfo.GetFuncDesc(iFun)
                                funName = typeInfo.GetNames(funDesc.memid)[0]
                                if not items_dict.has_key(funName):
                                    items_dict[funName] = 1
                    except:
                        pass
     # END ADDED LINES
            except:
                win32ui.SetStatusText("Error attempting to get object attributes - %s" % (`sys.exc_info()[0]`,))

Autodesk Softimage v7.5