diff options
author | hjk <hjk121@nokiamail.com> | 2013-10-24 17:38:57 +0200 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2013-10-24 18:19:54 +0200 |
commit | ab92c14bbedbc1acfc63d189989b1ee427411b6a (patch) | |
tree | d1d2615a2d40e8357d017daa40d850eb6e7d02af /share | |
parent | 6c673a042f5fc9ec40dfa4430acc994924aa4ee8 (diff) | |
download | qt-creator-ab92c14bbedbc1acfc63d189989b1ee427411b6a.tar.gz |
Debugger: Fix std::complex dumper for LLDB
Change-Id: I5ffb0f60039bb05f8467e925e71cf710a0712791
Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'share')
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 15 | ||||
-rw-r--r-- | share/qtcreator/debugger/stdtypes.py | 5 |
2 files changed, 15 insertions, 5 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 8955c09612..2d0df4275a 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -1215,7 +1215,14 @@ class Dumper(DumperBase): return toInteger(value.address) def createPointerValue(self, address, pointeeType): - return gdb.Value(address).cast(pointeeType.pointer()) + # This might not always work: + # a Python 3 based GDB due to the bug addressed in + # https://sourceware.org/ml/gdb-patches/2013-09/msg00571.html + try: + return gdb.Value(address).cast(pointeeType.pointer()) + except: + # Try _some_ fallback (good enough for the std::complex dumper) + return gdb.parse_and_eval("(%s*)%s" % (pointeeType, address)) def intSize(self): return 4 @@ -1227,7 +1234,11 @@ class Dumper(DumperBase): return self.lookupType('void*').sizeof == 4 def createValue(self, address, referencedType): - return gdb.Value(address).cast(referencedType.pointer()).dereference() + try: + return gdb.Value(address).cast(referencedType.pointer()).dereference() + except: + # Try _some_ fallback (good enough for the std::complex dumper) + return gdb.parse_and_eval("{%s}%s" % (referencedType, address)) def readRawMemory(self, addr, size): mem = gdb.selected_inferior().read_memory(addr, size) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 428373ad32..4ca65badb0 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -79,9 +79,8 @@ def qdump__std____1__array(d, value): def qdump__std__complex(d, value): innerType = d.templateArgument(value.type, 0) - base = value.address.cast(innerType.pointer()) - real = base.dereference() - imag = (base + 1).dereference() + real = value.cast(innerType) + imag = d.createValue(d.addressOf(value) + innerType.sizeof, innerType) d.putValue("(%f, %f)" % (real, imag)); d.putNumChild(2) if d.isExpanded(): |