diff options
author | Dominik Holland <dominik.holland@qt.io> | 2020-08-27 13:10:38 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@qt.io> | 2020-09-11 08:11:21 +0000 |
commit | a535196c418a7054c2fb1524ff1df9afb0961166 (patch) | |
tree | 9ebeb0393c0232679f5604469d37ece8045422da /share | |
parent | e35af70d9888eb7f30846d62eb32e02dbd94b10f (diff) |
Add support for multiple Qt versions in "Load QML Stack"
Enable the functionality for cdb again.
Change-Id: I75405f830dd208cc110d6682a45beedf2f4199cc
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'share')
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 22 |
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] |