diff options
author | David Schulz <david.schulz@qt.io> | 2020-11-04 09:44:17 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2020-11-06 08:13:35 +0000 |
commit | 30b6147e80ae81c075a4704b4924192252e6349b (patch) | |
tree | afb13073ace5fd65c0982713f66e2a9ef70f5830 | |
parent | f0048ae9515d9d1aa67fd82d37b815d2307e71ae (diff) |
Debugger: fix dumper for msvc release builds
... for std::vector and std::string.
Change-Id: I5c823b6c1b7b510344eeea4e1d5db0791d5c8e53
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | share/qtcreator/debugger/stdtypes.py | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index bf2f95fcf2..6c69c4cefd 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -730,13 +730,24 @@ def qdumpHelper__std__string__QNX(d, value, charType, format): def qdumpHelper__std__string__MSVC(d, value, charType, format): - (proxy, buffer, size, alloc) = value.split("p16spp") + try: + (proxy, buffer, size, alloc) = value.split("p16spp") + d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) + except RuntimeError: + proxy = None + (buffer, size, alloc) = value.split("16spp") + d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) _BUF_SIZE = int(16 / charType.size()) - d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) if _BUF_SIZE <= alloc: - (proxy, data) = value.split("pp") + if proxy is None: + data = value.extractPointer() + else: + (proxy, data) = value.split("pp") else: - data = value.address() + d.ptrSize() + if proxy is None: + data = value.address() + else: + data = value.address() + d.ptrSize() d.putCharArrayHelper(data, size, charType, format) @@ -1099,8 +1110,18 @@ def qdumpHelper__std__vector__QNX(d, value): (proxy, start, last, end) = value.split("pppp") size = (last - start) // innerType.size() - d.check(0 <= size and size <= 1000 * 1000 * 1000) - d.check(last <= end) + try: + d.check(0 <= size and size <= 1000 * 1000 * 1000) + d.check(last <= end) + except RuntimeError: + if isBool: + (start, last, end, size) = value.split("pppi") + else: + (start, last, end) = value.split("ppp") + size = (last - start) // innerType.size() + d.check(0 <= size and size <= 1000 * 1000 * 1000) + d.check(last <= end) + if size > 0: d.checkPointer(start) d.checkPointer(last) |