pykd/samples/dbg/dbgcore.py

70 lines
1.7 KiB
Python
Raw Normal View History

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