diff options
author | hjk <hjk@theqtcompany.com> | 2015-04-30 15:52:33 +0200 |
---|---|---|
committer | hjk <hjk@theqtcompany.com> | 2015-05-06 06:19:00 +0000 |
commit | e855de40377f135c5770637036acd45df63880d7 (patch) | |
tree | 80a801781145e823cb5179b60fb8f818ea280aca | |
parent | 74066f25b404ea32fd7d050e015134a7c1a57ce3 (diff) |
Debugger: Fix GDB hanging
This partially reverts commit e33da6a6b3c1b85d7bb6e961a60803eaf71afce5.
GDB seems to hang while executing str(some_pointer) in some setups.
Task-number: QTCREATORBUG-14374
Change-Id: Ia678533b9122e505b21ef6659d404239995ddb81
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
-rw-r--r-- | share/qtcreator/debugger/dumper.py | 17 | ||||
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 8 | ||||
-rw-r--r-- | share/qtcreator/debugger/lldbbridge.py | 4 |
3 files changed, 15 insertions, 14 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 6a3e2b5afc..84b5f0fffe 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 7eae19cbc2..d219689109 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 21066a5383..40f5dc938e 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) |