From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Gerd =?UTF-8?Q?M=C3=B6llmann?= Newsgroups: gmane.emacs.bugs Subject: bug#56495: 29.0.50; Support for debugging Emacs with LLDB Date: Mon, 11 Jul 2022 10:13:35 +0200 Message-ID: Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.100.31\)) Content-Type: multipart/signed; boundary="Apple-Mail=_D9E4F5FD-BB49-4D87-B845-907284C61050"; protocol="application/pgp-signature"; micalg=pgp-sha512 Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="7012"; mail-complaints-to="usenet@ciao.gmane.io" To: 56495@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jul 11 10:14:33 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oAoYo-0001dH-TX for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 11 Jul 2022 10:14:31 +0200 Original-Received: from localhost ([::1]:59896 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oAoYn-0000qT-C2 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 11 Jul 2022 04:14:29 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47336) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oAoYM-0000oy-Pf for bug-gnu-emacs@gnu.org; Mon, 11 Jul 2022 04:14:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:44308) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oAoYM-0001xO-F8 for bug-gnu-emacs@gnu.org; Mon, 11 Jul 2022 04:14:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oAoYM-0006Yo-8K for bug-gnu-emacs@gnu.org; Mon, 11 Jul 2022 04:14:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Gerd =?UTF-8?Q?M=C3=B6llmann?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Jul 2022 08:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 56495 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.165752722425178 (code B ref -1); Mon, 11 Jul 2022 08:14:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 11 Jul 2022 08:13:44 +0000 Original-Received: from localhost ([127.0.0.1]:38205 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oAoY4-0006Y2-Is for submit@debbugs.gnu.org; Mon, 11 Jul 2022 04:13:44 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:57590) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oAoY3-0006Xv-B9 for submit@debbugs.gnu.org; Mon, 11 Jul 2022 04:13:43 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47270) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oAoY2-0000mE-Nz for bug-gnu-emacs@gnu.org; Mon, 11 Jul 2022 04:13:43 -0400 Original-Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:36607) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oAoY0-0001uP-RE for bug-gnu-emacs@gnu.org; Mon, 11 Jul 2022 04:13:42 -0400 Original-Received: by mail-wr1-x431.google.com with SMTP id o4so5954645wrh.3 for ; Mon, 11 Jul 2022 01:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:mime-version:subject:message-id:date:to; bh=nruCy5QYYeKpu9tyTfPA2p+/ofWTiOFymV+H4ENUlro=; b=mo++VeyxoVlGOY5gykHFTfCBzECGPBMWpH0LnxFFuzQId+kAb7W61j9+koJIuXgg+h Caw2UpiE/FVBom4KSX0oHUYKTuLEJ0MBtrj773s+8LN0Pnek/1Tku85xK1g7GEDe5wkj ce3OsqNIVhOIXyb+V9YOuQhEAkaxpeB2hNcFaT32bHZ74XDT1GTqryseVjgCCSHMHEdc enpO0u3jgIIBpcTX1Uptqxix/XmUCdBaNnSgE859BLUpvpDX8Z/V9PW2lg5hS912+PEy O+jVVWQ+UDa39wFznxxXZN++UpJPb7XwmbxfFbvuhAGZs/WL6UQDdgC8CJl6zqrJAr+G oa4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:mime-version:subject:message-id:date:to; bh=nruCy5QYYeKpu9tyTfPA2p+/ofWTiOFymV+H4ENUlro=; b=fP/ZB6AojYw8BCpJg6+6nmXzoFGopb4BjTO1eITbyK6tOiTuttpr/rlQPeFybsF/34 oAE5L7I/t6t9buMXIxeai8Atn6AEdNUNCt0qYyJPy0HS2+4lSwaq76+8aaUuvDn1viRr ukjdgagp4KXzgma1ECdwiWekI32H1R9iramgAQ4Gw1ez2uKuLRVL4IybAXR5Qwrdlld/ 3gf4Ii5ndNoR1kWjbYSkvzUGFABYHIdiw02CCNhlX2tkQ1/hi2Abfrjdev0cnUZolRoD GfmmuKNLF8IlPiP2AufUEHxTknnMv7LIDWKhJBMnruK/2v0TF8xGeuXIfA9OmwshMXJf NyvQ== X-Gm-Message-State: AJIora+LB1yDa4bFJvSfuDIUUbGI+6jBSwECcJ5HmZHdNsBRSocniksU 3M+3SicXfuoDbBWZNAURBvqBnkzKMnf0og== X-Google-Smtp-Source: AGRyM1tAOqpMYJZkDLubRsJEKYynbLiJ7X2zwG26M7OGMupWsOugYI+1fei8yUBGDpXNONYjeMYRmA== X-Received: by 2002:a05:6000:184c:b0:21b:b6ac:8cb6 with SMTP id c12-20020a056000184c00b0021bb6ac8cb6mr15741047wri.154.1657527217854; Mon, 11 Jul 2022 01:13:37 -0700 (PDT) Original-Received: from smtpclient.apple (pd9e369e6.dip0.t-ipconnect.de. [217.227.105.230]) by smtp.gmail.com with ESMTPSA id w15-20020a1cf60f000000b003a2c7bf0497sm6110198wmc.16.2022.07.11.01.13.36 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Jul 2022 01:13:36 -0700 (PDT) X-Mailer: Apple Mail (2.3696.100.31) Received-SPF: pass client-ip=2a00:1450:4864:20::431; envelope-from=gerd.moellmann@gmail.com; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:236609 Archived-At: --Apple-Mail=_D9E4F5FD-BB49-4D87-B845-907284C61050 Content-Type: multipart/mixed; boundary="Apple-Mail=_0AF19E57-73BE-404D-B01C-E030BD866513" --Apple-Mail=_0AF19E57-73BE-404D-B01C-E030BD866513 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii My system, macOS with Apple M1 chip, is currently not supported by GDB. To quote gdb-devel, "lldb is the way to go" to debug Emacs for me. Attached patch adds rather limited support for that. Limited by - the fact that I don't know LLDB, - that I don't know LLDB's Python API, - that I'm not a Python programmer, - that the Python API documentation is pretty lacking in itself, - that I didn't implement support for ENABLE_CHECKING and what else might change Lisp_Object layout So please bear with me. Anyway, at least displaying some Lisp_Objects with 'p obj' seems to work, and 'xbacktrace' seems to be working. YMMV. --Apple-Mail=_0AF19E57-73BE-404D-B01C-E030BD866513 Content-Disposition: attachment; filename=0001-Support-for-debugging-Emacs-with-LLDB.patch Content-Type: application/octet-stream; name=0001-Support-for-debugging-Emacs-with-LLDB.patch; x-unix-mode=0644 Content-Transfer-Encoding: quoted-printable =46rom=20c5cfd261a549740a0619eb1854032778204dc51e=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Gerd=3D20M=3DC3=3DB6llmann?=3D=20= =0ADate:=20Sun,=2010=20Jul=202022=2013:35:32=20+0200=0A= Subject:=20[PATCH]=20Support=20for=20debugging=20Emacs=20with=20LLDB=0A=0A= *=20(src/.lldbinit):=20New=20file.=0A*=20(etc/emacs_lldb.py):=20Module=20= loaded=20from=20.lldbinit.=0A---=0A=20etc/emacs_lldb.py=20|=20166=20= ++++++++++++++++++++++++++++++++++++++++++++++=0A=20src/.lldbinit=20=20=20= =20=20|=20=2033=20+++++++++=0A=202=20files=20changed,=20199=20= insertions(+)=0A=20create=20mode=20100644=20etc/emacs_lldb.py=0A=20= create=20mode=20100644=20src/.lldbinit=0A=0Adiff=20--git=20= a/etc/emacs_lldb.py=20b/etc/emacs_lldb.py=0Anew=20file=20mode=20100644=0A= index=200000000000..3a9f17e020=0A---=20/dev/null=0A+++=20= b/etc/emacs_lldb.py=0A@@=20-0,0=20+1,166=20@@=0A+#=20Copyright=20(C)=20= 2022=20Free=20Software=20Foundation,=20Inc.=0A+#=0A+#=20This=20file=20is=20= part=20of=20GNU=20Emacs.=0A+#=0A+#=20GNU=20Emacs=20is=20free=20software;=20= you=20can=20redistribute=20it=20and/or=20modify=0A+#=20it=20under=20the=20= terms=20of=20the=20GNU=20General=20Public=20License=20as=20published=20= by=0A+#=20the=20Free=20Software=20Foundation;=20either=20version=203,=20= or=20(at=20your=20option)=0A+#=20any=20later=20version.=0A+#=0A+#=20GNU=20= Emacs=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=0A+#=20but=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+#=20MERCHANTABILITY=20or=20FITNESS=20FOR=20A=20= PARTICULAR=20PURPOSE.=20=20See=20the=0A+#=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+#=0A+#=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+#=20= along=20with=20GNU=20Emacs.=20=20If=20not,=20see=20= .=0A+=0A+#=20Load=20this=20module=20in=20= LLDB=20with=0A+#=0A+#=20(lldb)=20command=20script=20import=20emacs_lldb=0A= +#=0A+#=20Available=20commands=20start=20with=20'x'=20and=20can=20be=20= seen=20with=0A+#=0A+#=20(lldb)=20help=0A+=0A+import=20lldb=0A+=0A+=0C=0A= +########################################################################=0A= +#=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20Utilties=0A= +########################################################################=0A= +=0A+#=20Return=20the=20Lisp_Type=20of=20Lisp_Object=20OBJ.=0A+def=20= get_lisp_type(obj):=0A+=20=20=20=20int_value=20=3D=20= obj.GetValueAsUnsigned()=0A+=20=20=20=20return=20= obj.GetFrame().EvaluateExpression(=0A+=20=20=20=20=20=20=20=20f"(enum=20= Lisp_Type)=20((EMACS_INT)=20{int_value}=20"=0A+=20=20=20=20=20=20=20=20= "&=20(1=20<<=20GCTYPEBITS)=20-=201)")=0A+=0A+#=20Return=20the=20= Lisp_Type=20or=20pseudo-vector=20type=20of=20OBJ.=0A+def=20= get_lisp_type_or_vectorlike(obj):=0A+=20=20=20=20lisp_type=20=3D=20= get_lisp_type(obj)=0A+=20=20=20=20if=20enumerator_name(lisp_type)=20=3D=3D= =20"Lisp_Vectorlike":=0A+=20=20=20=20=20=20=20=20vector=20=3D=20= get_lisp_pointer(obj,=20"struct=20Lisp_Vector")=0A+=20=20=20=20=20=20=20=20= header_size=20=3D=20vector.GetValueForExpressionPath(=0A+=20=20=20=20=20=20= =20=20=20=20=20=20"->header.size").GetValueAsUnsigned()=0A+=20=20=20=20=20= =20=20=20frame=20=3D=20obj.GetFrame()=0A+=20=20=20=20=20=20=20=20pseudo=20= =3D=20frame.EvaluateExpression(=0A+=20=20=20=20=20=20=20=20=20=20=20=20= f"{header_size}=20&=20PSEUDOVECTOR_FLAG")=0A+=20=20=20=20=20=20=20=20if=20= pseudo.GetValueAsUnsigned()=20!=3D=200:=0A+=20=20=20=20=20=20=20=20=20=20= =20=20return=20frame.EvaluateExpression(=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20f"(enum=20pvec_type)=20(({header_size}=20"=0A+=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20"&=20= More_Lisp_Bits::PVEC_TYPE_MASK)=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20">>=20More_Lisp_Bits::PSEUDOVECTOR_AREA_BITS)")=0A+=20=20=20=20= =20=20=20=20return=20= frame.EvaluateExpression("pvec_type::PVEC_NORMAL_VECTOR")=0A+=20=20=20=20= return=20lisp_type=0A+=0A+#=20Return=20Lisp_Object=20OBJ=20as=20pointer=20= to=20TYP=20*.=0A+def=20get_lisp_pointer(obj,=20typ):=0A+=20=20=20=20= return=20obj.GetFrame().EvaluateExpression(=0A+=20=20=20=20=20=20=20=20= f"({typ}*)=20(((EMACS_INT)=20{obj.GetValueAsUnsigned()})=20&=20= VALMASK)")=0A+=0A+#=20Return=20Lisp_Object=20OBJ=20as=20pointer=20to=20= Lisp_Symbol.=0A+def=20get_lisp_symbol(obj):=0A+=20=20=20=20ptr=20=3D=20= get_lisp_pointer(obj,=20"char")=0A+=20=20=20=20offset=20=3D=20= ptr.GetValueAsUnsigned()=0A+=20=20=20=20return=20= obj.GetFrame().EvaluateExpression(=0A+=20=20=20=20=20=20=20=20f"(struct=20= Lisp_Symbol=20*)=20((char=20*)=20&lispsym=20+=20{offset})")=0A+=0A+#=20= Return=20Lisp_Object=20OBJ=20as=20pointer=20to=20Lisp_String=0A+def=20= get_lisp_string(obj):=0A+=20=20=20=20return=20get_lisp_pointer(obj,=20= "struct=20Lisp_String")=0A+=0A+#=20Return=20the=20string=20data=20of=20= Lisp_Object=20OBJ=20which=20denotes=20a=20Lisp_String.=0A+def=20= get_lisp_string_data(obj):=0A+=20=20=20=20string=20=3D=20= get_lisp_string(obj)=0A+=20=20=20=20return=20= string.GetValueForExpressionPath("->u.s.data")=0A+=0A+#=20Assuming=20OBJ=20= denotes=20a=20Lisp_Symbol,=20return=20the=20name=20of=20the=20symbol.=0A= +def=20get_lisp_symbol_name(obj):=0A+=20=20=20=20sym=20=3D=20= get_lisp_symbol(obj)=0A+=20=20=20=20name=20=3D=20= sym.GetValueForExpressionPath("->u.s.name")=0A+=20=20=20=20return=20= get_lisp_string_data(name)=0A+=0A+#=20Return=20a=20string=20for=20the=20= enuerator=20ENUM.=0A+def=20enumerator_name(enum):=0A+=20=20=20=20= enumerators=20=3D=20enum.GetType().GetEnumMembers()=0A+=20=20=20=20= return=20enumerators[enum.GetValueAsUnsigned()].GetName()=0A+=0A+=0C=0A= +########################################################################=0A= +#=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20LLDB=20Commands=0A= +########################################################################=0A= +=0A+def=20xbacktrace(debugger,=20command,=20ctx,=20result,=20= internal_dict):=0A+=20=20=20=20"""Print=20Emacs=20Lisp=20backtrace"""=0A= +=20=20=20=20frame=20=3D=20ctx.GetFrame()=0A+=20=20=20=20n=20=3D=20= frame.EvaluateExpression(=0A+=20=20=20=20=20=20=20=20= "current_thread->m_specpdl_ptr=20-=20current_thread->m_specpdl")=0A+=20=20= =20=20for=20i=20in=20reversed(range(0,=20n.GetValueAsUnsigned())):=0A+=20= =20=20=20=20=20=20=20s=20=3D=20= frame.EvaluateExpression(f"current_thread->m_specpdl[{i}]")=0A+=20=20=20=20= =20=20=20=20kind=20=3D=20= enumerator_name(s.GetChildMemberWithName("kind"))=0A+=20=20=20=20=20=20=20= =20if=20kind=20=3D=3D=20"SPECPDL_BACKTRACE":=0A+=20=20=20=20=20=20=20=20=20= =20=20=20function=20=3D=20s.GetValueForExpressionPath(".bt.function")=0A= +=20=20=20=20=20=20=20=20=20=20=20=20function_type=20=3D=20= enumerator_name(get_lisp_type(function))=0A+=20=20=20=20=20=20=20=20=20=20= =20=20if=20function_type=20=3D=3D=20"Lisp_Symbol":=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20sym_name=20=3D=20= get_lisp_symbol_name(function)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20result.AppendMessage(str(sym_name))=0A+=20=20=20=20=20=20=20=20=20= =20=20=20elif=20function_type=20=3D=3D=20"Lisp_Vectorlike":=0A+=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20subtype=20=3D=20= get_lisp_type_or_vectorlike(function)=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20result.AppendMessage(str(subtype))=0A+=20=20=20=20=20=20=20= =20=20=20=20=20else:=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= result.AppendMessage(function_type)=0A+=0A+def=20xdebug_print(debugger,=20= command,=20result,=20internal_dict):=0A+=20=20=20=20"""Print=20= Lisp_Objects=20using=20safe_debug_print()"""=0A+=20=20=20=20= debugger.HandleCommand(f"expr=20safe_debug_print({command})")=0A+=0A+=0C=0A= +########################################################################=0A= +#=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20Formatters=0A= +########################################################################=0A= +=0A+#=20Return=20a=20type=20summary=20for=20Lisp_Objects.=0A+def=20= format_Lisp_Object(obj,=20internal_dict):=0A+=20=20=20=20lisp_type=20=3D=20= get_lisp_type_or_vectorlike(obj)=0A+=20=20=20=20kind=20=3D=20= enumerator_name(lisp_type)=0A+=20=20=20=20summary=20=3D=20"->=20"=0A+=20=20= =20=20if=20kind=20=3D=3D=20"PVEC_FRAME":=0A+=20=20=20=20=20=20=20=20ptr=20= =3D=20get_lisp_pointer(obj,=20"struct=20frame")=0A+=20=20=20=20=20=20=20=20= summary=20+=3D=20str(ptr)=0A+=20=20=20=20elif=20kind=20=3D=3D=20= "PVEC_WINDOW":=0A+=20=20=20=20=20=20=20=20ptr=20=3D=20= get_lisp_pointer(obj,=20"struct=20window")=0A+=20=20=20=20=20=20=20=20= summary=20+=3D=20str(ptr)=0A+=20=20=20=20return=20summary=0A+=0A+=0C=0A= +########################################################################=0A= +#=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20Initialization=0A= +########################################################################=0A= +=0A+#=20Define=20Python=20FUNCTION=20as=20an=20LLDB=20command.=0A+def=20= define_command=20(debugger,=20function):=0A+=20=20=20=20lldb_command=20=3D= =20function.__name__=0A+=20=20=20=20python_function=20=3D=20__name__=20+=20= "."=20+=20function.__name__=0A+=20=20=20=20= debugger.HandleCommand(f"command=20script=20add=20"=0A+=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= f"--overwrite=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20f"--function=20{python_function}=20"=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= f"{lldb_command}")=0A+=0A+#=20Define=20Python=20FUNCTION=20as=20an=20= LLDB=20type=20formatter.=0A+def=20define_formatter(debugger,=20regex,=20= function):=0A+=20=20=20=20python_function=20=3D=20__name__=20+=20"."=20+=20= function.__name__=0A+=20=20=20=20debugger.HandleCommand(f"type=20summary=20= add=20"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20f"--cascade=20true=20"=0A+=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20f'--regex=20"{regex}"=20= '=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20f"--python-function=20{python_function}")=0A+=0A+#=20This=20= function=20is=20called=20by=20LLDB=20to=20initialize=20the=20module.=0A= +def=20__lldb_init_module(debugger,=20internal_dict):=0A+=20=20=20=20= define_command(debugger,=20xbacktrace)=0A+=20=20=20=20= define_command(debugger,=20xdebug_print)=0A+=20=20=20=20= define_formatter(debugger,=20"Lisp_Object",=20format_Lisp_Object)=0A+=20=20= =20=20print('Emacs=20debugging=20support=20has=20been=20installed.')=0A+=0A= +#=20end.=0Adiff=20--git=20a/src/.lldbinit=20b/src/.lldbinit=0Anew=20= file=20mode=20100644=0Aindex=200000000000..617d63958b=0A---=20/dev/null=0A= +++=20b/src/.lldbinit=0A@@=20-0,0=20+1,33=20@@=0A+#=20-*-=20mode:=20= shell-script=20-*-=0A+#=20Copyright=20(C)=201992-1998,=202000-2022=20= Free=20Software=20Foundation,=20Inc.=0A+#=0A+#=20This=20file=20is=20part=20= of=20GNU=20Emacs.=0A+#=0A+#=20GNU=20Emacs=20is=20free=20software;=20you=20= can=20redistribute=20it=20and/or=20modify=0A+#=20it=20under=20the=20= terms=20of=20the=20GNU=20General=20Public=20License=20as=20published=20= by=0A+#=20the=20Free=20Software=20Foundation;=20either=20version=203,=20= or=20(at=20your=20option)=0A+#=20any=20later=20version.=0A+#=0A+#=20GNU=20= Emacs=20is=20distributed=20in=20the=20hope=20that=20it=20will=20be=20= useful,=0A+#=20but=20WITHOUT=20ANY=20WARRANTY;=20without=20even=20the=20= implied=20warranty=20of=0A+#=20MERCHANTABILITY=20or=20FITNESS=20FOR=20A=20= PARTICULAR=20PURPOSE.=20=20See=20the=0A+#=20GNU=20General=20Public=20= License=20for=20more=20details.=0A+#=0A+#=20You=20should=20have=20= received=20a=20copy=20of=20the=20GNU=20General=20Public=20License=0A+#=20= along=20with=20GNU=20Emacs.=20=20If=20not,=20see=20= .=0A+#=0A+#=20Use=20'lldb=20--local-init'=20= or=20add=20to=20your=20~/.lldbinit=20the=20line=0A+#=0A+#=20settings=20= set=20target.load-cwd-lldbinit=20true=0A+#=0A+#=20Emacs-specific=20= commands=20start=20with=20'x'.=20=20Type=20'help'=20to=20see=20all=0A+#=20= commands.=20=20Type=20'help=20'=20to=20see=20help=20for=20a=20= command=0A+#=20.=0A+=0A+#=20Make=20Python=20find=20our=20files=0A= +script=20--=20sys.path.append('../etc')=0A+=0A+#=20Load=20our=20Python=20= files=0A+command=20script=20import=20emacs_lldb=0A+=0A+#=20end.=0A--=20=0A= 2.37.0=0A=0A= --Apple-Mail=_0AF19E57-73BE-404D-B01C-E030BD866513-- --Apple-Mail=_D9E4F5FD-BB49-4D87-B845-907284C61050 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQIzBAEBCgAdFiEEirYePpiT82Hjkftpc+obGZDFPmMFAmLL268ACgkQc+obGZDF PmP9zA//ZLNyFlIDmCVDkVAXsl/Yw0SMXrwiy0+O7DIezvU3hgH7cqSLajwRMESm NoUJWwA2cGuN3aERdrgJRMUaklu3CJadvC+U0G9vf60bjUnvVvD3COvjaQQccfNi evmCrT/FvlkpjSMRAW1/0nVUSPxoleR1+LCMzmRHAkOB6qLWHZXKtpSMrJ7KNQNb ZC+Mrq3bBycBl3om96ReBY1tUkOOJ9dU6hXSXrtDuipUDe8hW7gFyulVny9n98OG pVjeNKpTZrkeb/yOSKmc/rasyrCOHUVjYouI91a9/FYW8Id35y0j+RtHVEhrSBNC 4WnE2Cjo8pKZ9oBdwyeTUBBkW7f0khnh8kn8+98wGDG6TchtnmXIqhQWLkNFUoNw MpRMLFpTJxPewRx5W5d7ZgDdHwNSwKMs444sapT3XhDhREtLeZyIS9aqU5Xn/vBe HTnZEEMFHn9K3T0ZS5lnFZrH0ish/XgcTau1nB6O2ePfgumWyroeusP3Td7ztRjL ekGf9IXhw2dFiC3PtJ2wx0LtCbY1hvU+F1ez6Np6u4WlEwOARRrJWFrp3ICQSDD/ rG4rsv9hly19jJ5HDnLQg/ub+LvsUi58e7cvP6ZGQnEVsMpLVhLS+EnrNd2ro+r1 K0a3BkDUU2q8YLBntZyOnRpNLiE+1l2R/xteE2/1XqJsdZ3eRHE= =HJhF -----END PGP SIGNATURE----- --Apple-Mail=_D9E4F5FD-BB49-4D87-B845-907284C61050--