summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2013-10-24 17:38:57 +0200
committerhjk <hjk121@nokiamail.com>2013-10-24 18:19:54 +0200
commitab92c14bbedbc1acfc63d189989b1ee427411b6a (patch)
treed1d2615a2d40e8357d017daa40d850eb6e7d02af /share
parent6c673a042f5fc9ec40dfa4430acc994924aa4ee8 (diff)
downloadqt-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.py15
-rw-r--r--share/qtcreator/debugger/stdtypes.py5
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():