aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/debugger/gdbbridge.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/debugger/gdbbridge.py')
-rw-r--r--share/qtcreator/debugger/gdbbridge.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index c81bca1dd5..824f4c50f7 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -1303,6 +1303,7 @@ class Dumper(DumperBase):
gdb.execute('continue')
def fetchStack(self, args):
+
def fromNativePath(string):
return string.replace('\\', '/')
@@ -1319,7 +1320,11 @@ class Dumper(DumperBase):
frame = gdb.newest_frame()
ns = self.qtNamespace()
needle = self.qtNamespace() + 'QV4::ExecutionEngine'
- pat = '%sqt_v4StackTraceForEngine((void*)0x%x)'
+ pats = [
+ '{0}qt_v4StackTraceForEngine((void*)0x{1:x})',
+ '{0}qt_v4StackTrace((({0}QV4::ExecutionEngine *)0x{1:x})->currentContext())',
+ '{0}qt_v4StackTrace((({0}QV4::ExecutionEngine *)0x{1:x})->currentContext)',
+ ]
done = False
while i < limit and frame and not done:
block = None
@@ -1336,8 +1341,19 @@ class Dumper(DumperBase):
dereftype = typeobj.target().unqualified()
if dereftype.name == needle:
addr = toInteger(value)
- expr = pat % (ns, addr)
- res = str(gdb.parse_and_eval(expr))
+ res = None
+ for pat in pats:
+ try:
+ expr = pat.format(ns, addr)
+ res = str(gdb.parse_and_eval(expr))
+ break
+ except:
+ continue
+
+ if res is None:
+ done = True
+ break
+
pos = res.find('"stack=[')
if pos != -1:
res = res[pos + 8:-2]