import sys, string import traceback from win32com.axdebug import axdebug from win32com.client.util import Enumerator import pythoncom def DumpDebugApplicationNode(node, level = 0): # Recursive dump of a DebugApplicationNode spacer = " " * level for desc, attr in [("Node Name", axdebug.DOCUMENTNAMETYPE_APPNODE), ("Title", axdebug.DOCUMENTNAMETYPE_TITLE), ("Filename", axdebug.DOCUMENTNAMETYPE_FILE_TAIL), ("URL", axdebug.DOCUMENTNAMETYPE_URL), ]: try: info = node.GetName(attr) except pythoncom.com_error: info = "" print "%s%s: %s" % (spacer, desc, info) try: doc = node.GetDocument() except pythoncom.com_error: doc = None if doc: doctext = doc.QueryInterface(axdebug.IID_IDebugDocumentText) numLines, numChars = doctext.GetSize() # text, attr = doctext.GetText(0, 20, 1) text, attr = doctext.GetText(0, numChars, 1) print "%sText is %s, %d bytes long" % (spacer, repr(text[:40]+"..."), len(text)) else: print "%s%s" % (spacer, "") for child in Enumerator(node.EnumChildren()): DumpDebugApplicationNode(child, level+1) def dumpall(): dm=pythoncom.CoCreateInstance(axdebug.CLSID_MachineDebugManager,None,pythoncom.CLSCTX_ALL, axdebug.IID_IMachineDebugManager) e=Enumerator(dm.EnumApplications()) for app in e: print "Application: %s" % app.GetName() node = app.GetRootNode() # of type PyIDebugApplicationNode->PyIDebugDocumentProvider->PyIDebugDocumentInfo DumpDebugApplicationNode(node) if __name__=='__main__': try: dumpall() except: traceback.print_exc()