From a535196c418a7054c2fb1524ff1df9afb0961166 Mon Sep 17 00:00:00 2001 From: Dominik Holland Date: Thu, 27 Aug 2020 13:10:38 +0200 Subject: Add support for multiple Qt versions in "Load QML Stack" Enable the functionality for cdb again. Change-Id: I75405f830dd208cc110d6682a45beedf2f4199cc Reviewed-by: David Schulz Reviewed-by: hjk --- share/qtcreator/debugger/gdbbridge.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'share') 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] -- cgit v1.2.3