diff options
author | hjk <hjk@qt.io> | 2017-08-08 13:49:59 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2017-08-09 05:34:11 +0000 |
commit | 6ae77f7daadfa59123384c9130fe7ce1705dead8 (patch) | |
tree | a23e8c0776fdd7d594116742bd4e9bd5e8367801 | |
parent | 2c6be25dcd902cb2289f90ba52b9fc945771f2f7 (diff) | |
download | qt-creator-6ae77f7daadfa59123384c9130fe7ce1705dead8.tar.gz |
Debugger: Fix editing of std::{w,}string, QString, QByteArray
... as well as std::vector and QVector
Change-Id: I7fd33be9917a17414149813c28316166b8de9be7
Task-number: QTCREATORBUG-18681
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 6 | ||||
-rw-r--r-- | share/qtcreator/debugger/qttypes.py | 19 | ||||
-rw-r--r-- | share/qtcreator/debugger/stdtypes.py | 18 |
3 files changed, 26 insertions, 17 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 0f171a445f..17719ac77b 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -733,7 +733,7 @@ class Dumper(DumperBase): typeName = "'" + typeName + "'" # 'class' is needed, see http://sourceware.org/bugzilla/show_bug.cgi?id=11912 #exp = '((class %s*)%s)->%s(%s)' % (typeName, value.laddress, function, arg) - addr = value.laddress + addr = value.address() if addr is None: addr = self.pokeValue(value) #warn('PTR: %s -> %s(%s)' % (value, function, addr)) @@ -742,7 +742,7 @@ class Dumper(DumperBase): result = gdb.parse_and_eval(exp) #warn(' -> %s' % result) res = self.fromNativeValue(result) - if value.laddress is None: + if value.address() is None: self.releaseValue(addr) return res @@ -1048,7 +1048,7 @@ class Dumper(DumperBase): typeName = typeName[0:pos] if typeName in self.qqEditable and not simpleType: #self.qqEditable[typeName](self, expr, value) - expr = gdb.parse_and_eval(expr) + expr = self.parseAndEvaluate(expr) self.qqEditable[typeName](self, expr, value) else: cmd = 'set variable (%s)=%s' % (expr, value) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 1aa7a447ef..8c9df9e4dc 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -46,6 +46,11 @@ def qform__QByteArray(): return [Latin1StringFormat, SeparateLatin1StringFormat, Utf8StringFormat, SeparateUtf8StringFormat ] +def qedit__QByteArray(d, value, data): + d.call('void', value, 'resize', str(len(data))) + (base, size, alloc) = d.stringData(value) + d.setValues(base, 'char', [ord(c) for c in data]) + def qdump__QByteArray(d, value): data, size, alloc = d.byteArrayData(value) d.check(alloc == 0 or (0 <= size and size <= alloc and alloc <= 100000000)) @@ -1776,17 +1781,9 @@ def qdump__QVariant(d, value): def qedit__QVector(d, value, data): values = data.split(',') - size = len(values) - d.call('void', value, 'resize', str(size)) - innerType = value.type[0] - try: - # Qt 5. Will fail on Qt 4 due to the missing 'offset' member. - offset = value['d']['offset'] - base = value['d'].address() + offset - except: - # Qt 4. - base = value['p']['array'].pointer() - d.setValues(base, innerType, values) + d.call('void', value, 'resize', str(len(values))) + base, vsize, valloc = d.vectorDataHelper(d.extractPointer(value)) + d.setValues(base, value.type[0].name, values) def qform__QVector(): diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index b9e96d2167..75b7dbc2b9 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -888,10 +888,10 @@ def qedit__std__vector(d, value, data): import gdb values = data.split(',') n = len(values) - innerType = value.type[0] + innerType = value.type[0].name cmd = "set $d = (%s*)calloc(sizeof(%s)*%s,1)" % (innerType, innerType, n) gdb.execute(cmd) - cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (value.address, n, n) + cmd = "set {void*[3]}%s = {$d, $d+%s, $d+%s}" % (value.address(), n, n) gdb.execute(cmd) cmd = "set (%s[%d])*$d={%s}" % (innerType, n, data) gdb.execute(cmd) @@ -976,11 +976,23 @@ def qdump__std____debug__vector(d, value): def qedit__std__string(d, value, data): - d.call(value, "assign", '"%s"' % data.replace('"', '\\"')) + d.call('void', value, 'assign', '"%s"' % data.replace('"', '\\"')) def qedit__string(d, expr, value): qedit__std__string(d, expr, value) +def qedit__std____cxx11__string(d, expr, value): + qedit__std__string(d, expr, value) + +def qedit__std__wstring(d, value, data): + d.call('void', value, 'assign', 'L"%s"' % data.replace('"', '\\"')) + +def qedit__wstring(d, expr, value): + qedit__std__wstring(d, expr, value) + +def qedit__std____cxx11__wstring(d, expr, value): + qedit__std__wstring(d, expr, value) + def qdump__string(d, value): qdump__std__string(d, value) |