Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
#=======================================================================================================================
class InternalStepThread(InternalThreadCommand):
def __init__(self, thread_id, cmd_id):
self.thread_id = thread_id
self.cmd_id = cmd_id
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = self.cmd_id
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalSetNextStatementThread
#=======================================================================================================================
class InternalSetNextStatementThread(InternalThreadCommand):
def __init__(self, thread_id, cmd_id, line, func_name):
self.thread_id = thread_id
self.cmd_id = cmd_id
self.line = line
self.func_name = func_name
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = self.cmd_id
t.additionalInfo.pydev_next_line = int(self.line)
t.additionalInfo.pydev_func_name = self.func_name
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalTerminateThread
#=======================================================================================================================
class InternalTerminateThread(InternalThreadCommand):
def __init__(self, thread_id):
self.thread_id = thread_id
def doIt(self, dbg):
PydevdLog(1, "killing ", str(self.thread_id))
cmd = dbg.cmdFactory.makeThreadKilledMessage(self.thread_id)
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalRunThread
#=======================================================================================================================
class InternalRunThread(InternalThreadCommand):
def __init__(self, thread_id):
self.thread_id = thread_id
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = None
t.additionalInfo.pydev_step_stop = None
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalStepThread
#=======================================================================================================================
class InternalStepThread(InternalThreadCommand):
def __init__(self, thread_id, cmd_id):
self.line = line
self.func_name = func_name
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = self.cmd_id
t.additionalInfo.pydev_next_line = int(self.line)
t.additionalInfo.pydev_func_name = self.func_name
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalGetVariable
#=======================================================================================================================
class InternalGetVariable(InternalThreadCommand):
""" gets the value of a variable """
def __init__(self, seq, thread_id, frame_id, scope, attrs):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
self.scope = scope
self.attributes = attrs
def doIt(self, dbg):
""" Converts request into python variable """
try:
xml = ""
valDict = pydevd_vars.resolveCompoundVariable(self.thread_id, self.frame_id, self.scope, self.attributes)
keys = valDict.keys()
if hasattr(keys, 'sort'):
keys.sort() #Python 3.0 does not have it
result = pydevd_vars.evaluateExpression(self.thread_id, self.frame_id, self.expression, self.doExec)
xml = ""
xml += pydevd_vars.varToXML(result, self.expression)
xml += ""
cmd = dbg.cmdFactory.makeEvaluateExpressionMessage(self.sequence, xml)
dbg.writer.addCommand(cmd)
except:
exc = GetExceptionTracebackStr()
sys.stderr.write('%s\n' % (exc,))
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Error evaluating expression " + exc)
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalGetCompletions
#=======================================================================================================================
class InternalGetCompletions(InternalThreadCommand):
""" Gets the completions in a given scope """
def __init__(self, seq, thread_id, frame_id, act_tok):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
self.act_tok = act_tok
def doIt(self, dbg):
""" Converts request into completions """
try:
remove_path = None
try:
frame = pydevd_vars.findFrame(self.thread_id, self.frame_id)
finally:
if remove_path is not None:
sys.path.remove(remove_path)
except:
exc = GetExceptionTracebackStr()
sys.stderr.write('%s\n' % (exc,))
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Error evaluating expression " + exc)
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalEvaluateConsoleExpression
#=======================================================================================================================
class InternalEvaluateConsoleExpression(InternalThreadCommand):
""" Execute the given command in the debug console """
def __init__(self, seq, thread_id, frame_id, line):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
self.line = line
def doIt(self, dbg):
""" Create an XML for console output, error and more (true/false)
<output></output>
true/false
"""
else:
#pydevd_vars.dumpFrames(self.thread_id)
#don't print this error: frame not found: means that the client is not synchronized (but that's ok)
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Frame not found: %s from thread: %s" % (self.frame_id, self.thread_id))
dbg.writer.addCommand(cmd)
except:
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Error resolving frame: %s from thread: %s" % (self.frame_id, self.thread_id))
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalEvaluateExpression
#=======================================================================================================================
class InternalEvaluateExpression(InternalThreadCommand):
""" gets the value of a variable """
def __init__(self, seq, thread_id, frame_id, expression, doExec):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
self.expression = expression
self.doExec = doExec
def doIt(self, dbg):
""" Converts request into python variable """
try:
result = pydevd_vars.evaluateExpression(self.thread_id, self.frame_id, self.expression, self.doExec)
xml = ""
xml += pydevd_vars.varToXML(result, self.expression)
xml += ""
keys = sorted(keys, key=str) #Jython 2.1 does not have it (and all must be compared as strings).
for k in keys:
xml += pydevd_vars.varToXML(valDict[k], str(k))
xml += ""
cmd = dbg.cmdFactory.makeGetVariableMessage(self.sequence, xml)
dbg.writer.addCommand(cmd)
except Exception:
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Error resolving variables " + GetExceptionTracebackStr())
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalChangeVariable
#=======================================================================================================================
class InternalChangeVariable(InternalThreadCommand):
""" changes the value of a variable """
def __init__(self, seq, thread_id, frame_id, scope, attr, expression):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
self.scope = scope
self.attr = attr
self.expression = expression
def doIt(self, dbg):
""" Converts request into python variable """
try:
pydevd_vars.changeAttrExpression(self.thread_id, self.frame_id, self.attr, self.expression)
cmd = dbg.cmdFactory.makeVariableChangedMessage(self.sequence)
dbg.writer.addCommand(cmd)
except Exception:
def doIt(self, dbg):
""" Converts request into python variable """
try:
pydevd_vars.changeAttrExpression(self.thread_id, self.frame_id, self.attr, self.expression)
cmd = dbg.cmdFactory.makeVariableChangedMessage(self.sequence)
dbg.writer.addCommand(cmd)
except Exception:
cmd = dbg.cmdFactory.makeErrorMessage(self.sequence, "Error changing variable attr:%s expression:%s traceback:%s" % (self.attr, self.expression, GetExceptionTracebackStr()))
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalGetFrame
#=======================================================================================================================
class InternalGetFrame(InternalThreadCommand):
""" gets the value of a variable """
def __init__(self, seq, thread_id, frame_id):
self.sequence = seq
self.thread_id = thread_id
self.frame_id = frame_id
def doIt(self, dbg):
""" Converts request into python variable """
try:
frame = pydevd_vars.findFrame(self.thread_id, self.frame_id)
if frame is not None:
xml = ""
xml += pydevd_vars.frameVarsToXML(frame)
del frame
xml += ""
cmd = dbg.cmdFactory.makeGetFrameMessage(self.sequence, xml)
class InternalRunThread(InternalThreadCommand):
def __init__(self, thread_id):
self.thread_id = thread_id
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = None
t.additionalInfo.pydev_step_stop = None
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalStepThread
#=======================================================================================================================
class InternalStepThread(InternalThreadCommand):
def __init__(self, thread_id, cmd_id):
self.thread_id = thread_id
self.cmd_id = cmd_id
def doIt(self, dbg):
t = PydevdFindThreadById(self.thread_id)
if t:
t.additionalInfo.pydev_step_cmd = self.cmd_id
t.additionalInfo.pydev_state = STATE_RUN
#=======================================================================================================================
# InternalSetNextStatementThread
#=======================================================================================================================
class InternalSetNextStatementThread(InternalThreadCommand):
def __init__(self, thread_id, cmd_id, line, func_name):
self.thread_id = thread_id
on specific threads. These are the InternalThreadCommands that get
get posted to PyDB.cmdQueue.
"""
def canBeExecutedBy(self, thread_id):
'''By default, it must be in the same thread to be executed
'''
return self.thread_id == thread_id
def doIt(self, dbg):
raise NotImplementedError("you have to override doIt")
#=======================================================================================================================
# InternalTerminateThread
#=======================================================================================================================
class InternalTerminateThread(InternalThreadCommand):
def __init__(self, thread_id):
self.thread_id = thread_id
def doIt(self, dbg):
PydevdLog(1, "killing ", str(self.thread_id))
cmd = dbg.cmdFactory.makeThreadKilledMessage(self.thread_id)
dbg.writer.addCommand(cmd)
#=======================================================================================================================
# InternalRunThread
#=======================================================================================================================
class InternalRunThread(InternalThreadCommand):
def __init__(self, thread_id):
self.thread_id = thread_id