forked from qt-creator/qt-creator
Debugger: Fix assignment to QString etc with LLDB
Task-number: QTCREATORBUG-21353 Change-Id: Ie3655738c249240d9fbf17e054fc8f79a284efd4 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -1741,12 +1741,38 @@ class Dumper(DumperBase):
|
||||
value = frame.FindVariable(exp)
|
||||
return value
|
||||
|
||||
def setValue(self, address, typename, value):
|
||||
sbtype = self.lookupNativeType(typename)
|
||||
error = lldb.SBError()
|
||||
sbaddr = lldb.SBAddress(address, self.target)
|
||||
sbvalue = self.target.CreateValueFromAddress('x', sbaddr, sbtype)
|
||||
sbvalue.SetValueFromCString(str(value), error)
|
||||
|
||||
def setValues(self, address, typename, values):
|
||||
sbtype = self.lookupNativeType(typename)
|
||||
sizeof = sbtype.GetByteSize()
|
||||
error = lldb.SBError()
|
||||
for i in range(len(values)):
|
||||
sbaddr = lldb.SBAddress(address + i * sizeof, self.target)
|
||||
sbvalue = self.target.CreateValueFromAddress('x', sbaddr, sbtype)
|
||||
sbvalue.SetValueFromCString(str(values[i]), error)
|
||||
|
||||
def assignValue(self, args):
|
||||
self.reportToken(args)
|
||||
error = lldb.SBError()
|
||||
exp = self.hexdecode(args['exp'])
|
||||
expr = self.hexdecode(args['expr'])
|
||||
value = self.hexdecode(args['value'])
|
||||
lhs = self.findValueByExpression(exp)
|
||||
simpleType = int(args['simpleType'])
|
||||
lhs = self.findValueByExpression(expr)
|
||||
typeName = lhs.GetType().GetName()
|
||||
typeName = typeName.replace('::', '__')
|
||||
pos = typeName.find('<')
|
||||
if pos != -1:
|
||||
typeName = typeName[0:pos]
|
||||
if typeName in self.qqEditable and not simpleType:
|
||||
expr = self.parseAndEvaluate(expr)
|
||||
self.qqEditable[typeName](self, expr, value)
|
||||
else:
|
||||
lhs.SetValueFromCString(value, error)
|
||||
self.reportResult(self.describeError(error), args)
|
||||
|
||||
|
||||
@@ -705,12 +705,14 @@ void LldbEngine::fetchStack(int limit)
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
void LldbEngine::assignValueInDebugger(WatchItem *,
|
||||
void LldbEngine::assignValueInDebugger(WatchItem *item,
|
||||
const QString &expression, const QVariant &value)
|
||||
{
|
||||
DebuggerCommand cmd("assignValue");
|
||||
cmd.arg("exp", toHex(expression));
|
||||
cmd.arg("expr", toHex(expression));
|
||||
cmd.arg("value", toHex(value.toString()));
|
||||
cmd.arg("type", toHex(item->type));
|
||||
cmd.arg("simpleType", isIntOrFloatType(item->type));
|
||||
cmd.callback = [this](const DebuggerResponse &) { updateLocals(); };
|
||||
runCommand(cmd);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user