import pykd from PySide.QtCore import QThread from PySide.QtCore import QObject from PySide.QtCore import Signal class DbgThread( QThread ): def __init__(self, func): QThread.__init__(self) self.func = func def run(self): self.func() self.exit() class DbgCore( QObject ): targetBreak = Signal() targetRunning = Signal() targetAttached = Signal() targetDetached = Signal() def close(self): if self.processOpened: if self.thread != None: self.breakin() def openProcess( self, name ): pykd.startProcess( name ) self.processOpened = True self.targetAttached.emit() self.targetBreak.emit() def detachProcess(self): pykd.detachProcess() self.processOpened = False self.targetDetached.emit() def killProcess(self): pykd.killProcess() self.processOpened = False self.targetDetached.emit() def breakin( self ): pykd.breakin() def go( self ): self.thread = DbgThread( pykd.go ) self.thread.finished.connect( self.onDebugStop ) self.targetRunning.emit() self.thread.start() def step( self ): self.thread = DbgThread( pykd.step ) self.thread.finished.connect( self.onDebugStop ) self.targetRunning.emit() self.thread.start() def onDebugStop(self): self.thread.wait(100) self.thread = None self.targetBreak.emit() def __init__(self): QObject.__init__(self) self.thread = None self.processOpened = False