pykd/samples/debug/debug.py

119 lines
2.6 KiB
Python
Raw Normal View History

#
#
#
from PySide.QtCore import *
from PySide.QtGui import *
import pykd
import widgets
class UpdateEvent( QEvent ):
def __init__(self):
QEvent.__init__(self, QEvent.Type(QEvent.User + 1))
class GoThread( QThread ):
def __init__(self, func):
QThread.__init__(self)
self.start()
self.func = func
def run(self):
self.func()
app.postEvent( mainForm, UpdateEvent() )
self.exit()
class MainForm( QMainWindow ):
updated = Signal()
def __init__( self ):
QMainWindow.__init__( self, None )
self.setWindowTitle("Pykd Debugger Sample")
self.setDockNestingEnabled( True )
self.goThread = None
self.fileMenu = QMenu( "&File" )
self.fileMenu.addAction( "Open process...", self.onOpenProcess )
self.fileMenu.addAction( "Exit", self.onExit )
self.menuBar().addMenu( self.fileMenu )
self.debugMenu = QMenu( "Debug" )
self.debugMenu.addAction( "Break", self.onBreak )
self.debugMenu.addAction( "Go", self.onGo )
self.debugMenu.addAction( "Step", self.onStep )
self.menuBar().addMenu( self.debugMenu )
self.viewMenu = QMenu( "View" )
self.menuBar().addMenu( self.viewMenu )
self.resize( 800, 600 )
widgets.register( self )
def stopGoThread( self ):
if self.goThread != None and self.goThread.isRunning():
self.goThread.quit()
self.goThread.wait(10000)
def event( self, ev ):
if ev.type() == QEvent.User + 1:
self.onUpdate()
return True
else:
return QMainWindow.event( self, ev )
def onOpenProcess( self ):
fileDlg = QFileDialog( self )
fileDlg.setNameFilter( self.tr("Executable (*.exe)" ) )
pykd.startProcess( fileDlg.getOpenFileName()[0] )
self.goThread = GoThread( pykd.go )
def onBreak( self ):
pykd.breakin()
def onGo( self ):
self.stopGoThread()
self.goThread = GoThread( pykd.go )
def onStep( self ):
self.stopGoThread()
self.goThread = GoThread( pykd.step )
def onExit( self ):
self.close()
def onUpdate( self ):
self.updated.emit()
def main():
global app
global mainForm
app = QApplication( [] )
mainForm = MainForm()
mainForm.show()
exitres = app.exec_()
if __name__ == "__main__":
main()