diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 6a3e2b5afcf..84b5f0fffe9 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1040,21 +1040,8 @@ class DumperBase: return typeName = str(value.type) - innerType = value.type.target().unqualified() - innerTypeName = str(innerType) - goodPointer = False - try: - target = value.dereference() - str(target) # Dummy access. - if self.isLldb and target.GetError().Fail(): - pass - else: - goodPointer = True - except: - pass - - if not goodPointer: + if self.isBadPointer(value): # Failure to dereference a pointer should at least # show the value of a pointer. self.putValue(self.cleanAddress(value)) @@ -1063,6 +1050,8 @@ class DumperBase: return displayFormat = self.currentItemFormat(value.type) + innerType = value.type.target().unqualified() + innerTypeName = str(innerType) if innerTypeName == "void": #warn("VOID POINTER: %s" % displayFormat) diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index 7eae19cbc28..d2196891097 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -522,6 +522,14 @@ class Dumper(DumperBase): except: return None + def isBadPointer(self, value): + try: + target = value.dereference() + target.is_optimized_out # Access test. + return False + except: + return True + def makeValue(self, typeobj, init): typename = "::" + self.stripClassTag(str(typeobj)); # Avoid malloc symbol clash with QVector. diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 21066a53838..40f5dc938ee 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -365,6 +365,10 @@ class Dumper(DumperBase): #self.warn(" -> %s" % result) return result + def isBadPointer(self, value): + target = value.dereference() + return target.GetError().Fail() + def makeValue(self, type, *args): thread = self.currentThread() frame = thread.GetFrameAtIndex(0)