From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Yuan Fu Newsgroups: gmane.emacs.bugs Subject: bug#39180: 27.0.50; [PATCH] Use expressions as memory location in gdb-mi memory buffer Date: Fri, 31 Jan 2020 21:25:00 -0500 Message-ID: References: <4A45AE37-414A-4D78-A49C-B40FB72736C4@gmail.com> <83mua4kkjs.fsf@gnu.org> Mime-Version: 1.0 (Mac OS X Mail 13.0 \(3608.40.2.2.4\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_2919A712-10BC-40C4-AD71-82909C9D7C5A" Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="100415"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 39180@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Feb 01 03:26:24 2020 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 1ixiUJ-000Q48-Oi for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 01 Feb 2020 03:26:23 +0100 Original-Received: from localhost ([::1]:35098 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ixiUI-0001oA-RC for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 31 Jan 2020 21:26:22 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57519) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ixiTz-0001o2-Ac for bug-gnu-emacs@gnu.org; Fri, 31 Jan 2020 21:26:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ixiTx-0004vC-VC for bug-gnu-emacs@gnu.org; Fri, 31 Jan 2020 21:26:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:60518) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ixiTx-0004v3-RN for bug-gnu-emacs@gnu.org; Fri, 31 Jan 2020 21:26:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ixiTx-0004mn-Oy for bug-gnu-emacs@gnu.org; Fri, 31 Jan 2020 21:26:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Yuan Fu Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 01 Feb 2020 02:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39180 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 39180-submit@debbugs.gnu.org id=B39180.158052391218338 (code B ref 39180); Sat, 01 Feb 2020 02:26:01 +0000 Original-Received: (at 39180) by debbugs.gnu.org; 1 Feb 2020 02:25:12 +0000 Original-Received: from localhost ([127.0.0.1]:38258 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixiTA-0004li-15 for submit@debbugs.gnu.org; Fri, 31 Jan 2020 21:25:12 -0500 Original-Received: from mail-qv1-f67.google.com ([209.85.219.67]:46316) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ixiT8-0004lN-Qe for 39180@debbugs.gnu.org; Fri, 31 Jan 2020 21:25:11 -0500 Original-Received: by mail-qv1-f67.google.com with SMTP id y2so4196529qvu.13 for <39180@debbugs.gnu.org>; Fri, 31 Jan 2020 18:25:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:mime-version:subject:date:in-reply-to:cc:to :references; bh=P36N5xSh5VcJfgyCb0d8ssveku0+AqvhvULEQHog+6Q=; b=ZFyBfbVfJnQ6yI/gZPEORI6hujV0eBeOoXsEFw0KGQ+IB/O4jdzX1q2RyQmiSipf6+ oPcQWOFoE5EhwLGrzYgaeuIUetFK2aJtFlTItv3I/UjodzIxhffdVvZDc4/w3d2Hv+T0 rgAyZaSxZ0nyMrJ+I+trHTQ9aTB05yiSxM8Kue5vMtD83bnaSUTjshXVUCcYjTovTk/A mvn+Xretnv7Yhb4ptTG6PuE5SFEk0udg/8FX7zwabWaGYaKX2vj4inVKi0vJcGNAbmuJ 9RIIkYibXTrZtHuTmNBVyul3Jo78X8BqvPOGzO+aaI9ctIfzMiVawaLhI5/oCpNoyB8O FGng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:mime-version:subject:date :in-reply-to:cc:to:references; bh=P36N5xSh5VcJfgyCb0d8ssveku0+AqvhvULEQHog+6Q=; b=GJT3Fymd0FdXUuwHBW4wsFF1b/PxGRS89u1rAZSPpaZJPEBMACJbXKs9n2UTLKBAyy +RtUOlaGuzZcEE/zuVLRG28lIV+4MT4mj0v55rDmxnl5Z1+q0Nww9PAqe/7aYD7wJosI s5ossPjMLsLtbKzEMLzukrr40JBfpckayF8kuvfqlShiik09n8wLzVlEpdiDt1gbCVtv TrvjDpU61HjyTu5Btrw8pbyv5YFqlnd/tn8RMr7pZdE7+yhnU8LYiBickb2RNZDmV+mM 9Aid+emGkbV4F8cswCXQsxOpVkOplsaq16qwT4+Tgefzi9Odo+XLTX5CeyijAT5wOZ8n qKlw== X-Gm-Message-State: APjAAAVe+D+v/wNlww0ycqzJHqr6Ec4QvPP0PARHSl8xuewsbOafndFP NyRlRImuzxSMeTMMBumCvEg= X-Google-Smtp-Source: APXvYqxADDY027bp2bGHyoNjK64xGGxupEE4Tp+uglCQgaNb+P5qocKdEPyY7HkOm2Ca14F9sKPiDg== X-Received: by 2002:a05:6214:20c:: with SMTP id i12mr13476926qvt.48.1580523905272; Fri, 31 Jan 2020 18:25:05 -0800 (PST) Original-Received: from [192.168.1.5] (c-174-60-229-153.hsd1.pa.comcast.net. [174.60.229.153]) by smtp.gmail.com with ESMTPSA id d25sm5759725qtq.11.2020.01.31.18.25.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 31 Jan 2020 18:25:04 -0800 (PST) In-Reply-To: <83mua4kkjs.fsf@gnu.org> X-Mailer: Apple Mail (2.3608.40.2.2.4) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 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:175540 Archived-At: --Apple-Mail=_2919A712-10BC-40C4-AD71-82909C9D7C5A Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Jan 31, 2020, at 5:05 AM, Eli Zaretskii wrote: >=20 >> From: Yuan Fu >> Date: Sat, 18 Jan 2020 15:54:35 -0500 >>=20 >> Currently gdb-mi does allow expressions as memory address, but it = translates it to a fixed address. This patch makes gdb to store the = expression and re-evaluate on updates. So the address changes as = expression=E2=80=99s value changes. >=20 > Thanks. >=20 > Are these 4 patches needed to add the above improvement, or is each > part of the series independent, and could be applied on its own right? >=20 I merged them into one. > If the entire series should be applied in a single transaction, please > make then a single patch, as that makes it easier to review and > apply. Otherwise, please explain what is the rationale for each part > separately, because I don't think I understand it. >=20 >> Before the memory buffer evaluates the expression as address >> and use the fixed result in each stop. This change stores the >> expression itself and reevaluates it in each stop for an address. >> Then displays the value of the memory at that address. >=20 > Two spaces between sentences (here and elsewhere in the patch), > please. >=20 >> lisp/progmodes/gdb-mi.el (gdb-memory-address-expression): new >> (gdb-memory-address): change default value, add docstring >> (def-gdb-trigger-and-handler gdb-invalidate-memory, >> gdb-memory-set-address): replace =E2=80=99gdb-memory-address=E2=80=99 = with >> =E2=80=99gdb-memory-address-expression=E2=80=99 >> (gdb-memory-header): Add display for = =E2=80=99gdb-memory-address-expression=E2=80=99, >> move the mouse event from address to expression >=20 > Please quote symbols 'like this'. Both fixed. >=20 >> * lisp/progmodes/gdb-mi.el (gdb-read-memory-custom): >> Break infinite loop. Change =E2=80=99error=E2=80=99 to = =E2=80=99user-error=E2=80=99 >=20 > I don't understand what infinite loop are you alluding to here, and > how did it come into existence. Added some comments to explain. >=20 >> * lisp/progmodes/gdb-mi.el (gdb-memory-header): >> Protect against nil value >=20 > And what is the problem you are trying to solve here? Added some comments. >=20 >> * lisp/progmodes/gdb-mi.el (gdb--memory-display-warning): new >> (gdb-read-memory-custom, gdb-memory-header): Add warning >=20 > And what is this part about? Added some explanation in commit message and docstring of = gdb--memory-display-warning. And here is the new patch. Yuan --Apple-Mail=_2919A712-10BC-40C4-AD71-82909C9D7C5A Content-Disposition: attachment; filename=memory-fixed.patch Content-Type: application/octet-stream; x-unix-mode=0700; name="memory-fixed.patch" Content-Transfer-Encoding: quoted-printable =46rom=206be6b8aa1215aeac0cbed7432b980408b1275b24=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Yuan=20Fu=20=0ADate:=20Sat,=20= 5=20Oct=202019=2022:42:07=20-0400=0ASubject:=20[PATCH]=20Enhance=20= memory=20buffer=20in=20gdb-mi=0A=0A1.=20Enhance=20support=20for=20= expressions=20as=20memory=20address=0A=0ABefore,=20the=20memory=20buffer=20= evaluates=20the=20expression=20as=20address=20and=20use=0Athe=20fixed=20= result=20in=20each=20stop.=20=20This=20change=20makes=20gdb=20store=20= the=0Aexpression=20itself=20and=20reevaluates=20it=20in=20each=20stop=20= for=20an=20address.=0A=0AWe=20also=20add=20a=20warning=20(a=20red=20bold=20= exclamation=20mark)=20on=20the=20header=20line=0Awhen=20the=20content=20= of=20the=20page=20doesn't=20represent=20the=20memory=20location=0Auser=20= requested=20for.=20=20That=20happends=20when=20some=20error=20occurs=20= and=20we=0Adisplay=20the=20last=20successful=20page.=0A=0A= lisp/progmodes/gdb-mi.el=20(gdb-memory-address-expression,=0A= gdb--memory-display-warning):=20New=20variables.=0A(gdb-memory-address):=20= Change=20default=20value=20to=20nil;=20add=20docstring.=0A= (def-gdb-trigger-and-handler,=20gdb-invalidate-memory,=0A= gdb-memory-set-address):=20Replace=20'gdb-memory-address'=20with=0A= 'gdb-memory-address-expression'.=0A(gdb-memory-header):=20Add=20code=20= to=20display=0A'gdb-memory-address-expression'=20on=20header=20line.=20=20= Move=20the=20mouse=20event=0Afrom=20address=20to=20expression.=20=20Add=20= code=20to=20display=20the=20warning.=0A(gdb-memory-header):=20Fix=20the=20= error=20from=0A'propertize'=20when=20'gdb-memory-address-expression'=20= or=0A'gdb-memory-address'=20is=20nil.=0A(gdb-read-memory-custom):=20= Change=20'error'=20to=20'user-error'.=20=20Add=20code=20to=0Adisplay=20= the=20warning.=0A---=0A=20lisp/progmodes/gdb-mi.el=20|=2057=20= +++++++++++++++++++++++++++++-----------=0A=201=20file=20changed,=2042=20= insertions(+),=2015=20deletions(-)=0A=0Adiff=20--git=20= a/lisp/progmodes/gdb-mi.el=20b/lisp/progmodes/gdb-mi.el=0Aindex=20= 60852e4ad6..1384837a04=20100644=0A---=20a/lisp/progmodes/gdb-mi.el=0A+++=20= b/lisp/progmodes/gdb-mi.el=0A@@=20-105,13=20+105,24=20@@=20tool-bar-map=0A= =20(defvar=20speedbar-initial-expansion-list-name)=0A=20(defvar=20= speedbar-frame)=0A=20=0A-(defvar=09gdb-memory-address=20"main")=0A= -(defvar=09gdb-memory-last-address=20nil=0A+(defvar-local=20= gdb-memory-address-expression=20"main"=0A+=20=20"This=20expression=20is=20= passed=20to=20gdb.=0A+Possible=20value:=20main,=20$rsp,=20x+3.")=0A= +(defvar-local=20gdb-memory-address=20nil=0A+=20=20"Address=20of=20= memory=20display.")=0A+(defvar-local=20gdb-memory-last-address=20nil=0A=20= =20=20"Last=20successfully=20accessed=20memory=20address.")=0A=20(defvar=09= gdb-memory-next-page=20nil=0A=20=20=20"Address=20of=20next=20memory=20= page=20for=20program=20memory=20buffer.")=0A=20(defvar=09= gdb-memory-prev-page=20nil=0A=20=20=20"Address=20of=20previous=20memory=20= page=20for=20program=20memory=20buffer.")=0A+(defvar-local=20= gdb--memory-display-warning=20nil=0A+=20=20"Display=20warning=20on=20= memory=20header=20if=20t.=0A+=0A+When=20error=20occurs=20when=20= retrieving=20memory,=20gdb-mi=20displays=20the=0A+last=20successful=20= page.=20=20In=20that=20case=20the=20expression=20might=20not=0A+match=20= the=20memory=20displayed.=20=20We=20want=20to=20let=20the=20user=20be=20= aware=20of=0A+that,=20so=20display=20a=20warning=20exclamation=20mark=20= in=20the=20header=20line.")=0A=20=0A=20(defvar=20gdb-thread-number=20nil=0A= =20=20=20"Main=20current=20thread.=0A@@=20-3444,7=20+3455,7=20@@=20= gdb-memory-unit=0A=20(def-gdb-trigger-and-handler=0A=20=20=20= gdb-invalidate-memory=0A=20=20=20(format=20"-data-read-memory=20%s=20%s=20= %d=20%d=20%d"=0A-=20=20=20=20=20=20=20=20=20=20gdb-memory-address=0A+=20=20= =20=20=20=20=20=20=20=20(gdb-mi-quote=20gdb-memory-address-expression)=0A= =20=20=20=20=20=20=20=20=20=20=20gdb-memory-format=0A=20=20=20=20=20=20=20= =20=20=20=20gdb-memory-unit=0A=20=20=20=20=20=20=20=20=20=20=20= gdb-memory-rows=0A@@=20-3484,6=20+3495,9=20@@=20gdb-read-memory-custom=0A= =20=20=20=20=20=20=20=20=20=20(err-msg=20(bindat-get-field=20res=20= 'msg)))=0A=20=20=20=20=20(if=20(not=20err-msg)=0A=20=20=20=20=20=20=20=20= =20(let=20((memory=20(bindat-get-field=20res=20'memory)))=0A+=20=20=20=20= =20=20=20=20=20=20(when=20gdb-memory-last-address=0A+=20=20=20=20=20=20=20= =20=20=20=20=20;;=20Nil=20means=20last=20retrieve=20emits=20error=20or=20= just=20started=20the=20session.=0A+=20=20=20=20=20=20=20=20=20=20=20=20= (setq=20gdb--memory-display-warning=20nil))=0A=20=20=20=20=20=20=20=20=20= =20=20(setq=20gdb-memory-address=20(bindat-get-field=20res=20'addr))=0A=20= =20=20=20=20=20=20=20=20=20=20(setq=20gdb-memory-next-page=20= (bindat-get-field=20res=20'next-page))=0A=20=20=20=20=20=20=20=20=20=20=20= (setq=20gdb-memory-prev-page=20(bindat-get-field=20res=20'prev-page))=0A= @@=20-3497,10=20+3511,15=20@@=20gdb-read-memory-custom=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=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20gdb-memory-format)))))=0A=20=20= =20=20=20=20=20=20=20=20=20=20=20(newline)))=0A=20=20=20=20=20=20=20;;=20= Show=20last=20page=20instead=20of=20empty=20buffer=20when=20out=20of=20= bounds=0A-=20=20=20=20=20=20(progn=0A-=20=20=20=20=20=20=20=20(let=20= ((gdb-memory-address=20gdb-memory-last-address))=0A+=20=20=20=20=20=20= (when=20gdb-memory-last-address=0A+=20=20=20=20=20=20=20=20(let=20= ((gdb-memory-address-expression=20gdb-memory-last-address))=0A+=20=20=20=20= =20=20=20=20=20=20;;=20If=20we=20don't=20set=20`gdb-memory-last-address'=20= to=20nil,=0A+=20=20=20=20=20=20=20=20=20=20;;=20`gdb-invalidate-memory'=20= eventually=20calls=0A+=20=20=20=20=20=20=20=20=20=20;;=20= `gdb-read-memory-custom',=20making=20an=20infinite=20loop.=0A+=20=20=20=20= =20=20=20=20=20=20(setq=20gdb-memory-last-address=20nil=0A+=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20gdb--memory-display-warning=20t)=0A=20=20= =20=20=20=20=20=20=20=20=20(gdb-invalidate-memory=20'update)=0A-=20=20=20= =20=20=20=20=20=20=20(error=20err-msg))))))=0A+=20=20=20=20=20=20=20=20=20= =20(user-error=20"Error=20when=20retrieving=20memory:=20%s=20Displaying=20= last=20successful=20page"=20err-msg))))))=0A=20=0A=20(defvar=20= gdb-memory-mode-map=0A=20=20=20(let=20((map=20(make-sparse-keymap)))=0A= @@=20-3534,7=20+3553,7=20@@=20gdb-memory-set-address=0A=20=20=20"Set=20= the=20start=20memory=20address."=0A=20=20=20(interactive)=0A=20=20=20= (let=20((arg=20(read-from-minibuffer=20"Memory=20address:=20")))=0A-=20=20= =20=20(setq=20gdb-memory-address=20arg))=0A+=20=20=20=20(setq=20= gdb-memory-address-expression=20arg))=0A=20=20=20(gdb-invalidate-memory=20= 'update))=0A=20=0A=20(defmacro=20def-gdb-set-positive-number=20(name=20= variable=20echo-string=20&optional=20doc)=0A@@=20-3717,7=20+3736,19=20@@=20= gdb-memory-font-lock-keywords=0A=20(defvar=20gdb-memory-header=0A=20=20=20= '(:eval=0A=20=20=20=20=20(concat=0A-=20=20=20=20=20"Start=20address["=0A= +=20=20=20=20=20"Start=20address=20"=0A+=20=20=20=20=20;;=20If=20= `gdb-memory-address-expression'=20is=20nil,=20`propertize'=20would=20= error.=0A+=20=20=20=20=20(propertize=20(or=20= gdb-memory-address-expression=20"N/A")=0A+=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20'face=20font-lock-warning-face=0A+=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20'help-echo=20"mouse-1:=20set=20start=20= address"=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= 'mouse-face=20'mode-line-highlight=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20'local-map=20(gdb-make-header-line-mouse-map=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= 'mouse-1=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#'gdb-memory-set-address-event))=0A+=20=20=20=20=20= (if=20gdb--memory-display-warning=0A+=20=20=20=20=20=20=20=20=20= (propertize=20"=20!"=20'face=20'(:inherit=20error=20:weight=20bold))=0A+=20= =20=20=20=20=20=20"")=0A+=20=20=20=20=20"=20["=0A=20=20=20=20=20=20= (propertize=20"-"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= 'face=20font-lock-warning-face=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20'help-echo=20"mouse-1:=20decrement=20address"=0A@@=20= -3734,13=20+3765,9=20@@=20gdb-memory-header=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=20'mouse-1=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=20#'gdb-memory-show-next-page))=0A=20=20=20=20=20=20"]:=20"=0A= -=20=20=20=20=20(propertize=20gdb-memory-address=0A-=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20'face=20font-lock-warning-face=0A-=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20'help-echo=20"mouse-1:=20set=20= start=20address"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= 'mouse-face=20'mode-line-highlight=0A-=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20'local-map=20(gdb-make-header-line-mouse-map=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= 'mouse-1=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#'gdb-memory-set-address-event))=0A+=20=20=20=20=20= ;;=20If=20`gdb-memory-address'=20is=20nil,=20`propertize'=20would=20= error.=0A+=20=20=20=20=20(propertize=20(or=20gdb-memory-address=20"N/A")=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'face=20= font-lock-warning-face)=0A=20=20=20=20=20=20"=20=20Rows:=20"=0A=20=20=20=20= =20=20(propertize=20(number-to-string=20gdb-memory-rows)=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20'face=20font-lock-warning-face=0A= --=20=0A2.25.0=0A=0A= --Apple-Mail=_2919A712-10BC-40C4-AD71-82909C9D7C5A--