aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2015-04-30 15:52:33 +0200
committerhjk <hjk@theqtcompany.com>2015-05-06 06:19:00 +0000
commite855de40377f135c5770637036acd45df63880d7 (patch)
tree80a801781145e823cb5179b60fb8f818ea280aca
parent74066f25b404ea32fd7d050e015134a7c1a57ce3 (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.py17
-rw-r--r--share/qtcreator/debugger/gdbbridge.py8
-rw-r--r--share/qtcreator/debugger/lldbbridge.py4
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)