diff options
Diffstat (limited to 'share/qtcreator/debugger/stdtypes.py')
-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) |