Dumper: robustify msvc std vector/string dumpers

By looking for debug members instead of relying on a failing size check.

Task-number: QTCREATORBUG-24901
Change-Id: Ia79ba893243e864c7808e89ee7e29ba4b853f754
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-01-11 12:12:00 +01:00
parent d17e063404
commit 6ae71652a5

View File

@@ -744,9 +744,9 @@ def qdumpHelper__std__string__QNX(d, value, charType, format):
def qdumpHelper__std__string__MSVC(d, value, charType, format): def qdumpHelper__std__string__MSVC(d, value, charType, format):
try: try:
_ = value["_Mypair"]["_Myval2"]["_Myproxy"]
(proxy, buffer, size, alloc) = value.split("p16spp") (proxy, buffer, size, alloc) = value.split("p16spp")
d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) except Exception:
except RuntimeError:
proxy = None proxy = None
(buffer, size, alloc) = value.split("16spp") (buffer, size, alloc) = value.split("16spp")
d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000)
@@ -1128,21 +1128,21 @@ def qdumpHelper__std__vector__libcxx(d, value):
def qdumpHelper__std__vector__msvc(d, value): def qdumpHelper__std__vector__msvc(d, value):
inner_type = value.type[0] inner_type = value.type[0]
if inner_type.name == "bool": if inner_type.name == "bool":
proxy1, proxy2, start, finish, alloc, size = value.split("pppppi")
try: try:
d.check(0 <= size and size <= 1000 * 1000 * 1000) _ = value["_Myproxy"]
d.check(finish <= alloc) proxy1, proxy2, start, finish, alloc, size = value.split("pppppi")
except RuntimeError: except RuntimeError:
start, finish, alloc, size = value.split("pppi") start, finish, alloc, size = value.split("pppi")
d.check(0 <= size and size <= 1000 * 1000 * 1000)
qdumpHelper__std__vector__bool(d, start, size, inner_type) qdumpHelper__std__vector__bool(d, start, size, inner_type)
else: else:
proxy, start, finish, alloc = value.split("pppp")
size = (finish - start) // inner_type.size()
try: try:
d.check(0 <= size and size <= 1000 * 1000 * 1000) _ = value["_Mypair"]["_Myval2"]["_Myproxy"]
d.check(finish <= alloc) proxy, start, finish, alloc = value.split("pppp")
except RuntimeError: except RuntimeError:
start, finish, alloc = value.split("ppp") start, finish, alloc = value.split("ppp")
size = (finish - start) // inner_type.size()
d.check(0 <= size and size <= 1000 * 1000 * 1000)
qdumpHelper__std__vector__nonbool(d, start, finish, alloc, inner_type) qdumpHelper__std__vector__nonbool(d, start, finish, alloc, inner_type)