From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic301-21.consmr.mail.ir2.yahoo.com (sonic301-21.consmr.mail.ir2.yahoo.com [77.238.176.98]) by sourceware.org (Postfix) with ESMTPS id 6ABE43856DCF for ; Sat, 7 May 2022 11:15:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6ABE43856DCF X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1651922099; bh=XvroPF3JuXFfFc/qzYJuOliM84mWbLff8f0ydFsdNlX=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=nveaHa0h8kAWk/Rw7vC5fJxMv1QGFG4ecq9QIBhbmEvrbPDsKZwqlH6B/4v0qU440p+kbnOWWpUDPIFGmAHQiVdynmmnlQMRpeo2+CCvjtRd1cIyzzoJTzQ0yvtoLhao04ckCoaLDaGikKKYPpjJMy+zBo8uhnOilfKb+dqNrvH/Uhvg042VqKm0aD1fNB6xcP/dAk22ZjHw/ENkfgcryVf+Uq8C6/pyPE0ZMd/MjnRAAi30jrWL5i5Ra6PEFyf+8YrHBFbLEiyxyX0lsIySD1XpwwPR5rHL0ZwBNghh5X/+4PEQyf/WZzuHCJCZ6G+l9tzKmY6AID14rHGZ2gqLGg== X-YMail-OSG: _v5J2d0VM1lEmFdv0xK68eywnQNdGmZdseEgHEn62cRiiUBYQw6Hk7So5EuomtO L0o6NHw8UsbPsEgdFSPxhT2YxKhrEVzGWCag7TXgHz4_fH0H_6byQ1l3KVZS4HkyZtKp.r7CnhAJ TL1lfoBYJwMj6Z_0GR2yIKj7eZZC2k444PWyLgG0RICWwJPw4.kp8yJHqYBVexI9pJvsbK.VvUrE _ROM_f_Z1XCdOF3_TdUCyhM0.tzu8QeaQSWHckr9Vqi8O7.BuysDlGkFlmMwV_.w7pUAzuWVo1nT O8Wf62N6sPm3X2MLSFxSd7bJZ4mElphjoDDyunnArY9.67kQ.f1v_3pWRbYgLQLLOgcnch_8e8E_ hcg9adOh8fcBpO0drKrbxYmRz3.aNtXJslPvkJxKSd8Y9lP3X2c7nZYtg11Ar_bPMPA7GP0I.iHK xqHDZxV.a1z0rFdRjWiCMLbJK_Lrq.iz.yT9YnII6XTe2VH3yK3gv5R._gd9qUQ5r4Gj.erhubkj 3om2ecuAP6QZT5e9YytSbcnhgMnWPo7_7JsWkY4oDWryIOx3qMfbtavUzHxbkpJ1nrC2JaI_19p6 bVJxjgawQkmBEU3_EZAgaqDIoNvD6s9FjTO_gEkYr.O2AWESirIWbOkXWQEAzS0AEQfgGX5Xz5O3 A7RwSp_iNq40U_7fduFpt9r45adp6316YT22MAmal6PalbHwIcY8B2nbrMV.mht.7XNYsX9gFMhg dFKbetfE8oRV_eTnFsG_hBMnniga6YvS18IjAsHs5BWA.havmcXnOEZaFWjIPjVYV_fpQPo7vSQH eZvgBiOxSFCFJA1nupET.RIFUECvmrbq5GZ_4QxyuzsKB8yUETaGloTaD_8AWe1Do3wcoJ7LT1bW DI_fEVl4PU0uEW97w1o24JdzWopNd_V7sIJmPvV7ttFKqTxWEcYFITWsSkJwh8wExTC8zS71ExGQ Pn1gETSqugMN3b3IRke65vO3MWuPGEAl02eCtM0vi.jCL2sl9NJu_8_Bla55EpxLaHai7eX6zyCU 6dSMg.yAxUQGf7hy8VSU3yB07IPag0cjCkfqRwx7PVYC7GUD6RQbkmG00INTRPmtx5onnu0IODHX 7.RAtXaSFKPvx5JNuqyfW2PNj9Is83EqxmZ6_hPawbooiBzGAfo5jDtGxMqRCT06iIU4VQdgRN5H JjeCh_10b0oKDgMS_WD0RsSCgnGtBFsqz4BndSG4BezerzwmEfsLuVLvJf51.3MOO95maZ.tAmDh IXDafo6TdmgL1qdH4XYwmSj6cBxUFJPw_2HAjH6TdVqX6MtleY.ynh3D4sWBj9enkhBmpDfj_frI f8sIDNF1M7h8PJdqY9remT0fLYgDUve4Jo5NSCdVMdycloFBR0h2_JYJzN9d6l.VjXeUEEPY28Rt lLEvCJEalqbr8nm0OerPH_xee8RXTfNWFevW56.S5W9WUxezAEBZYn.VFgUsKSgWGOHIvTUHo6Cy Vb9hysVgfQcOqrTazkqvrYjohMh9yB_WRx8uFuo9ebPozPxnZFHc3hFe1WkU6s06eLXXNwARnZQz nP.Qr3SijppheUXanHrudStbZ6klhQxVNFm3sItSrxVVgtiPsIqf9b25c0nKdxXqHqrp1tc_CSlW _XCOP5LPB4GJZqJpnsUeUuLsZvhySRAHaV_Fe2bBbLP3.AeFB_scdBPZSpPwl97O88Dr6mUPalva idoNx4Bd0vXX539nl5D8EDpQX4aCl7kxiLGj5HUJ6YD.3lj2oInIBtvtHiQJZ3cLAGpYhWq28pZj Fuup6_cSbr1WpDFDAwTHRuvLRbavnciPzyZeQhzBKO5aH3wwCMPrgRHpNd5zzk6ZieIzi_XgUbjQ S2L4ixQGhuhNvLW1np89KB..m9WMnPEVULXTa9xyZinVIu6ZbTVTb2xC3pL9aJh4NF62dToLNbR1 q8AmtOX_MxBJNH0G_lgDSyA79xzCkV5gcF8swst6.UuQNKsamQlOsNgSzgjQLIU5FIyyJ7V4l4BG 9w2zvmaodyyieDctCHm9j47_sF3CF0A2Y.rYpOwOWvbIvqiIX0ylw2reYJX_1ugJMgFX7.OoR9gm 1fHytffr9YHtBjE46cS9owzNkAVf0guKgS1UfIWCpQymcAuKK17HymlrO3GPTTt.tsEH.o7QtDT7 IWC6025PMoJ7IVhtP8uU2BDsuiRAWc9C8LxfIBUxEPp1x1NTb8WtVlmz5mYxvAHRD.FP9Kw5KVJr Noq2467VRth7DM6ooBzZ.s3AX4Ad5jtszWFypg.MteMCYAPHYBuvpdog9TMU.PFIykGb4azNo5CQ F8rgNQyCl1VeccTSvibvyK2.4iy3R9CRY2T5A_Ka7b29B.nuviJLUig-- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ir2.yahoo.com with HTTP; Sat, 7 May 2022 11:14:59 +0000 Date: Sat, 7 May 2022 11:19:35 +0000 (UTC) From: Hannes Domani To: "gcc-help@gcc.gnu.org" , Paul Smith Message-ID: <453082091.802975.1651922375216@mail.yahoo.com> In-Reply-To: <5568db74d0acb198a3e8121ee75e3cfa02ea0c6f.camel@mad-scientist.net> References: <5568db74d0acb198a3e8121ee75e3cfa02ea0c6f.camel@mad-scientist.net> Subject: Re: Help using the GDB C++ STL pretty-printers / xmethods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Mailer: WebService/1.1.20188 YMailNorrin X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 May 2022 11:15:03 -0000 Am Samstag, 7. Mai 2022, 03:23:46 MESZ hat Paul Smith Folgendes geschrieben: > Are there any docs or other information about how to use the GDB > pretty-printers for C++ STL that come with GCC? > > I have them installed and they work for displaying data, but they don't > work for accessing data. > > Just as one very simple example, is there a way to dereference a > unique_ptr?=C2=A0 I see xmethods defined but nothing I've tried works. > Suppose I have: > >=C2=A0=C2=A0 (gdb) p $mp->mgr >=C2=A0=C2=A0 $6 =3D std::unique_ptr =3D { >=C2=A0=C2=A0=C2=A0=C2=A0 get() =3D 0x7f519a24e000 >=C2=A0=C2=A0 } > > (so you can see the pretty-printers are installed).=C2=A0 Now, how do I > extract out this object pointer so I can see what's in it?=C2=A0 These do= n't > work: > >=C2=A0=C2=A0 (gdb) p *$mp->mgr >=C2=A0=C2=A0 One of the arguments you tried to pass to operator* could not= be >=C2=A0=C2=A0 converted to what the function wants. > >=C2=A0=C2=A0 (gdb) p $mp->mgr->initialized >=C2=A0=C2=A0 One of the arguments you tried to pass to operator-> could no= t be >=C2=A0=C2=A0 converted to what the function wants. > > It used to work in GCC 10.2 / GDB 10.1 to access the pointer directly > if you knew, or deciphered, the internal structor of unique_ptr: > >=C2=A0=C2=A0 (gdb) p $mp->mgr._M_t._M_t._M_head_impl > > However, with GCC 11.3 / GDB 12.1 this no longer works: I get this > error: > >=C2=A0=C2=A0 Request for member '_M_head_impl' is ambiguous in type > 'std::tuple >'. >=C2=A0=C2=A0 Candidates are: >=C2=A0=C2=A0=C2=A0=C2=A0 'std::default_delete std::_Head_base<1ul, > std::default_delete, true>::_M_head_impl' (std::tuple std::default_delete > -> std::_Tuple_impl<0ul, Mgr*, > std::default_delete > -> std::_Tuple_impl<1ul, > std::default_delete > -> std::_Head_base<1ul, > std::default_delete, true>) >=C2=A0=C2=A0=C2=A0=C2=A0 ' std::_Head_base<0ul, Mgr*, false>= ::_M_head_impl' > (std::tuple > -> std::_Tuple_impl<0ul, > Mgr*, std::default_delete > -> std::_Head_base<0ul, Mgr*, false>) > > I have found no way to resolve this ambiguity to GDB's satisfaction. > > The only thing I've found that works is just to access the pointer > value directly by cutting and pasting it with a cast: > >=C2=A0=C2=A0 (gdb) p *((Mgr*)0x7f519a24e000) >=C2=A0=C2=A0 $8 =3D { >=C2=A0=C2=A0=C2=A0=C2=A0 ... >=C2=A0=C2=A0=C2=A0=C2=A0 initialized =3D true >=C2=A0=C2=A0 } > >=C2=A0=C2=A0 (gdb) p ((Mgr*)0x7f519a24e000)->initialized >=C2=A0=C2=A0 $9 =3D true > > Is that really what we have to do? I'm assuming you installed the pretty printers with a call to register_libstdcxx_printers() somewhere. For access to C++ STL objects there is another set of gdb helpers, called xmethods, which you need to install with a call to register_libstdcxx_xmethods(). > Secondly, is there some interface that is defined by the libstdcxx.v6 > Python macros for GDB that people who are doing their own python > scripting for their own C++ programs can take advantage of to avoid too > much groveling through the depths of the C++ STL implementation? Depends on what you want to do with it, but you can get access to the prett= y printers in gdb with a call to gdb.default_visualizer() [1]. [1] https://sourceware.org/gdb/onlinedocs/gdb/Pretty-Printing-API.html#inde= x-gdb_002edefault_005fvisualizer Hannes