From eb17f4c2bf091c81860022c42d6c85c0292fe7a7 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 23 Aug 2023 10:56:26 +0200 Subject: [PATCH] Debugger: Improve libc++ std::string dumper Use isLldb and isGdb instead of exception. Uses name based lookup in case of gdb instead of try/except Fixes: QTCREATORBUG-29526 Change-Id: I6c3aa94503a519331395bd4249c6bf6488c8333f Reviewed-by: Christian Stenger Reviewed-by: hjk Reviewed-by: --- share/qtcreator/debugger/libcpp_stdtypes.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/share/qtcreator/debugger/libcpp_stdtypes.py b/share/qtcreator/debugger/libcpp_stdtypes.py index 28288bb89f3..23b26f798e3 100644 --- a/share/qtcreator/debugger/libcpp_stdtypes.py +++ b/share/qtcreator/debugger/libcpp_stdtypes.py @@ -283,13 +283,12 @@ def std_1_string_dumper_v1(d, value): charType = value['__l']['__data_'].dereference().type D = None - try: # LLDB + if d.isLldb: D = value[0][0][0][0] - except: # GDB - try: # std::string - D = value[0].members(True)[0][0][0] - except: # std::u16string, std::u32string - D = value[2].members(True)[0][0][0] + elif d.isGdb: + D = value["__r_"].members(True)[0][0][0] + else: + raise Exception("Unknown debugger (neither gdb nor lldb)") layoutDecider = D[0][0] if not layoutDecider: