From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com [IPv6:2a00:1450:4864:20::22a]) by sourceware.org (Postfix) with ESMTPS id A00F83858D20 for ; Fri, 23 Jun 2023 08:48:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A00F83858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2b46b11051aso6328051fa.3 for ; Fri, 23 Jun 2023 01:48:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687510121; x=1690102121; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=FXg15KJbiclVbk3jBBWTsf7prfMHJqKlcQvJQJJdu8g=; b=OBzZQGsjeue/XVMQ66aFcCAKL5lx1tIWOPGyRO2T12+eju7014bna1Wp7dxLwBSs8x 9lyDd2x1ctu2fX84Qmnn2phMp/BDHDMUfnIUin4QnTXjIz8oUmRPL4yhdj2Hh1nyHfUp IqKvc1vSiQtH0hpLctjdjh3lcsxkBzROdvwUoKFcfO50SKgOT6Kd7vUud1tI9E9mtuAJ GixfZ3tNJZ3VnA698uWm37rQ8kP7ht30RamxVQyM/923fRdJS5RFrV8D19kbPleZ5qXE 67RPCSZ1UCZ+7OXqTYPPWtMs6rUwdR+sYpguafEw3gvC552ewphkCwTV+uhiyuqQngv4 fw6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687510121; x=1690102121; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=FXg15KJbiclVbk3jBBWTsf7prfMHJqKlcQvJQJJdu8g=; b=bQYRnNW+LlmcA2xdFcNZ0ROoVELzWH+E1hffNEZnyoY0xMHFQihhAOtI8TNVnCGIP3 U7CL87kNFmkr7qaiC9FY6+JpVnG1qWClTk2P5pbQJcF+jjaR+G/8nvfG+FeeTCttW5Us YVCGkh7+7BKD3lum1KPkrQnZf8ipN94qD37lqJbK/lJnKIOqCQDVCb5y5sI3nvwodqcm 05kEXkL2kG05nbZEb+P6NrTG+eFkiaoKfhTBUBuurO3FtWkm5GjIFUJkO6EeBR6YtzFs YJnkmMzsQwn0QzSuo+qffguaoFukRPNLW15dXW9nEZd8ZKLBxNBvNFR971gKq5KysrY6 Hwhw== X-Gm-Message-State: AC+VfDz2+sQwv6WEX6JvEP+CJXlss8Y6aVKDINGAEfvYLT4gcxnostZH FUv3AZ+pBJ0UO+NLMz40LooVq1AlkNo= X-Google-Smtp-Source: ACHHUZ4DkmTxgvW/SdxPjv+vTs46c65vQdddF7bHB7LgunjiZcg/F/pudA5StRlE+7VcT1zguV11bw== X-Received: by 2002:a2e:9217:0:b0:2b5:9bf9:b1dc with SMTP id k23-20020a2e9217000000b002b59bf9b1dcmr680886ljg.22.1687510121319; Fri, 23 Jun 2023 01:48:41 -0700 (PDT) Received: from fedora.. (78-73-77-63-no2450.tbcn.telia.com. [78.73.77.63]) by smtp.gmail.com with ESMTPSA id m6-20020a2e97c6000000b002b1a872c826sm1613445ljj.61.2023.06.23.01.48.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jun 2023 01:48:40 -0700 (PDT) From: Simon Farre To: gdb-patches@sourceware.org Cc: tom@tromey.com, Simon Farre Subject: [PATCH v2] gdb/DAP Fix LazyString not serializable exception Date: Fri, 23 Jun 2023 10:48:32 +0200 Message-ID: <20230623084832.16712-1-simon.farre.cx@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: v2. Apparently str(some_lazy_string) does not make LazyString eagerly fetch it's value. However, this v2 patch *does* work for LazyStrings and as such, this v2 is now identical to the previously referenced patch (where this part was removed). v1 Fixed this bug in v1 of a patch that later got removed. I couldn't reproduce the issue, but now I've found out what it is. I've reproduced it by basically sending two evaluate requests, "source prettyprinter.py" (the stdlib pretty printer, to be exact) and "py register_libstdcxx_printers(gdb.current_objfile())" - i.e. the standard library pretty printer registering. That's when an exception is raised by the DAP Python code. It is most likely because the pretty printers somewhere, for something, returns a LazyString instead of string. This patch will make variable references value always be str(...) to make sure that it converts it to a value that can be serialiable by json.dumps. --- gdb/python/lib/gdb/dap/varref.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gdb/python/lib/gdb/dap/varref.py b/gdb/python/lib/gdb/dap/varref.py index 213151fd3d3..8dc6cf97613 100644 --- a/gdb/python/lib/gdb/dap/varref.py +++ b/gdb/python/lib/gdb/dap/varref.py @@ -152,7 +152,9 @@ class VariableReference(BaseReference): def to_object(self): result = super().to_object() - result[self.result_name] = self.printer.to_string() + result[self.result_name] = ( + str(self.value) if self.ref == 0 else str(self.printer.to_string()) + ) num_children = self.child_count() if num_children is not None: if ( -- 2.41.0