From 30b6147e80ae81c075a4704b4924192252e6349b Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 4 Nov 2020 09:44:17 +0100 Subject: Debugger: fix dumper for msvc release builds ... for std::vector and std::string. Change-Id: I5c823b6c1b7b510344eeea4e1d5db0791d5c8e53 Reviewed-by: hjk Reviewed-by: Christian Stenger --- share/qtcreator/debugger/stdtypes.py | 33 +++++++++++++++++++++++++++------ 1 file 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) -- cgit v1.2.3