From patchwork Mon Jul 1 19:30:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 33507 Received: (qmail 68449 invoked by alias); 1 Jul 2019 19:30:41 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 68364 invoked by uid 89); 1 Jul 2019 19:30:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 spammy= X-HELO: mail-wm1-f45.google.com Received: from mail-wm1-f45.google.com (HELO mail-wm1-f45.google.com) (209.85.128.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 01 Jul 2019 19:30:35 +0000 Received: by mail-wm1-f45.google.com with SMTP id v19so699593wmj.5 for ; Mon, 01 Jul 2019 12:30:34 -0700 (PDT) Return-Path: Received: from ?IPv6:2001:8a0:f913:f700:56ee:75ff:fe8d:232b? ([2001:8a0:f913:f700:56ee:75ff:fe8d:232b]) by smtp.gmail.com with ESMTPSA id g2sm580265wmh.0.2019.07.01.12.30.32 (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Mon, 01 Jul 2019 12:30:32 -0700 (PDT) Subject: [users/palves/format_strings] Document the gdb-specific formatters To: Tom Tromey References: <20190605020116.1550-1-tom@tromey.com> <1ee4bd6b-4cdf-f3a9-74af-0843bf123a8b@redhat.com> <87lfygi1x0.fsf@tromey.com> <32872d6a-15d6-9718-59ae-957694e114c9@redhat.com> <87imtjhj6b.fsf@tromey.com> <625cd0ba-058d-d4bf-8ba3-8676f335b0f3@redhat.com> <87blzbep47.fsf@tromey.com> <2180f72f-da10-5333-90a1-666ba3bd145e@redhat.com> <87imtjbrmx.fsf@tromey.com> <871s056yjw.fsf@tromey.com> <87wohx5hir.fsf@tromey.com> <4e543ef2-eec3-b82c-a84a-a107e1ef2bc2@redhat.com> <3ff7dd5c-334b-3bcc-e43e-a350b3008304@redhat.com> <87ef39psdu.fsf@tromey.com> <87woh1oaj8.fsf@tromey.com> <9ec74ede-4474-f9c9-9cdd-1bbba1e5452b@redhat.com> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: Date: Mon, 1 Jul 2019 20:30:31 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <9ec74ede-4474-f9c9-9cdd-1bbba1e5452b@redhat.com> On 7/1/19 7:56 PM, Pedro Alves wrote: > On 7/1/19 7:49 PM, Tom Tromey wrote: >> Tom> I looked through all the field_fmt calls, and many of them can be >> Tom> replaced with some other call. >> >> I wrote some patches to do this where it is possible. > > Awesome. I wrote a patch to implement %p[ / %p], and am now writing > a patch to document the formatters. Like so. I've merged this. From c36205f0ccc36ac47b0191c02ceb5c06459ebea3 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 1 Jul 2019 19:23:07 +0100 Subject: [PATCH] Document the gdb-specific formatters --- gdb/ui-out.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ gdb/utils.h | 5 ++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/gdb/ui-out.h b/gdb/ui-out.h index 67c3962654c..819038ac282 100644 --- a/gdb/ui-out.h +++ b/gdb/ui-out.h @@ -189,8 +189,54 @@ class ui_out void spaces (int numspaces); void text (const char *string); + + /* Output a printf-style formatted string. In addition to the usual + printf format specs, this supports a few GDB-specific + formatters: + + - '%pF' - output a field. + + The argument is a field, wrapped in any of the base_field_s + subclasses. int_field for integer fields, styled_field for + string fields. This is preferred over separate + uiout->field_int(), uiout_>field_string() etc. calls when the + formatted message is translatable. E.g.: + + uiout->message (_("\nWatchpoint %pF deleted because the program has " + "left the block in\n" + "which its expression is valid.\n"), + int_field ("wpnum", b->number)); + + - '%p[' - output the following text in a specified style. + '%p]' - output the following text in the default style. + + The argument to '%p[' is a ui_file_style pointer. The argument + to '%p]' must be nullptr. + + This is useful when you want to output some portion of a string + literal in some style. E.g.: + + uiout->message (_(" %p[%p]"), + metadata_style.style ().ptr (), + reps, repeats, nullptr); + + - '%ps' - output a styled string. + + The argument is the result of a call to styled_string. This is + useful when you want to output some runtime-generated string in + some style. E.g.: + + uiout->message (_("this is a target address %ps.\n"), + styled_string (address_style.style (), + paddress (gdbarch, pc))); + + Note that these all "abuse" the %p printf format spec, in order + to be compatible with GCC's printf format checking. This is OK + because code in GDB that wants to print a host address should use + host_address_to_string instead of %p. */ void message (const char *format, ...) ATTRIBUTE_PRINTF (2, 3); void vmessage (const char *format, va_list args) ATTRIBUTE_PRINTF (2, 0); + void wrap_hint (const char *identstring); void flush (); diff --git a/gdb/utils.h b/gdb/utils.h index 61b7b5e3bb3..d79faf28af3 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -349,7 +349,10 @@ extern struct ui_file *gdb_stdtargin; extern void set_screen_width_and_height (int width, int height); /* More generic printf like operations. Filtered versions may return - non-locally on error. */ + non-locally on error. As an extension over plain printf, these + support some GDB-specific format specifiers. Particularly useful + here are the styling formatters: '%p[', '%p]' and '%ps'. See + ui_out::message for details. */ extern void fputs_filtered (const char *, struct ui_file *);