forked from qt-creator/qt-creator
Debugger: Fix editing of std::{string,vector} values
Change-Id: I3ff3f032af9ca54f2c48fe6e611fee73691e5ea2 Reviewed-by: Ulf Hermann <ulf.hermann@digia.com> Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
@@ -420,7 +420,7 @@ class LocalItem:
|
||||
#######################################################################
|
||||
|
||||
def bbedit(args):
|
||||
theDumper.bbedit(args.split(","))
|
||||
theDumper.bbedit(args)
|
||||
|
||||
registerCommand("bbedit", bbedit)
|
||||
|
||||
@@ -706,7 +706,8 @@ class Dumper(DumperBase):
|
||||
if type.find(":") >= 0:
|
||||
type = "'" + type + "'"
|
||||
# 'class' is needed, see http://sourceware.org/bugzilla/show_bug.cgi?id=11912
|
||||
exp = "((class %s*)%s)->%s(%s)" % (type, value.address, func, arg)
|
||||
#exp = "((class %s*)%s)->%s(%s)" % (type, value.address, func, arg)
|
||||
exp = "((%s*)%s)->%s(%s)" % (type, value.address, func, arg)
|
||||
#warn("CALL: %s" % exp)
|
||||
result = None
|
||||
try:
|
||||
@@ -903,6 +904,15 @@ class Dumper(DumperBase):
|
||||
# Try _some_ fallback (good enough for the std::complex dumper)
|
||||
return gdb.parse_and_eval("{%s}%s" % (referencedType, address))
|
||||
|
||||
def setValue(self, address, type, value):
|
||||
cmd = "set {%s}%s=%s" % (type, address, value)
|
||||
gdb.execute(cmd)
|
||||
|
||||
def setValues(self, address, type, values):
|
||||
cmd = "set {%s[%s]}%s={%s}" \
|
||||
% (type, len(values), address, ','.join(map(str, values)))
|
||||
gdb.execute(cmd)
|
||||
|
||||
def selectedInferior(self):
|
||||
try:
|
||||
# gdb.Inferior is new in gdb 7.2
|
||||
@@ -1659,22 +1669,25 @@ class Dumper(DumperBase):
|
||||
|
||||
return namespace
|
||||
|
||||
def bbedit(self, type, expr, value):
|
||||
type = b16decode(type)
|
||||
def bbedit(self, args):
|
||||
(typeName, expr, data) = args.split(',')
|
||||
typeName = b16decode(typeName)
|
||||
ns = self.qtNamespace()
|
||||
if type.startswith(ns):
|
||||
type = type[len(ns):]
|
||||
type = type.replace("::", "__")
|
||||
pos = type.find('<')
|
||||
if typeName.startswith(ns):
|
||||
typeName = typeName[len(ns):]
|
||||
typeName = typeName.replace("::", "__")
|
||||
pos = typeName.find('<')
|
||||
if pos != -1:
|
||||
type = type[0:pos]
|
||||
typeName = typeName[0:pos]
|
||||
expr = b16decode(expr)
|
||||
value = b16decode(value)
|
||||
#warn("EDIT: %s %s %s %s: " % (pos, type, expr, value))
|
||||
if self.qqEditable.has_key(type):
|
||||
self.qqEditable[type](expr, value)
|
||||
data = b16decode(data)
|
||||
if typeName in self.qqEditable:
|
||||
#self.qqEditable[typeName](self, expr, data)
|
||||
value = gdb.parse_and_eval(expr)
|
||||
self.qqEditable[typeName](self, value, data)
|
||||
else:
|
||||
gdb.execute("set (%s)=%s" % (expr, value))
|
||||
cmd = "set variable (%s)=%s" % (expr, data)
|
||||
gdb.execute(cmd)
|
||||
|
||||
def hasVTable(self, type):
|
||||
fields = type.fields()
|
||||
|
||||
Reference in New Issue
Block a user