public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Breazeal, Don" <donb@codesourcery.com>
To: Pedro Alves <palves@redhat.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 02/16 v2] Refactor follow-fork message printing
Date: Fri, 26 Sep 2014 20:14:00 -0000	[thread overview]
Message-ID: <5425C92B.1010101@codesourcery.com> (raw)
In-Reply-To: <5425C3E4.3060305@redhat.com>

On 9/26/2014 12:52 PM, Pedro Alves wrote:
> On 08/21/2014 01:29 AM, Don Breazeal wrote:
>> This patch refactors the code that prints messages related to follow-fork
>> into functions, and adds a call so that a message is now printed when the
>> parent process is detached.  Previously in this case the only message was
>> notification of attaching to the child.  We still do not print any messages
>> when following the parent and detaching the child (the default).  My 
>> rationale for this is that from the user's perspective the new child was
>> never attached.
>>
>> The messages now distinguish between fork and vfork.
>>
>> Note that all of these messages are only printed when 'verbose' is set or
>> when debugging is turned on.
>>
>> This is preparatory work for follow-fork and detach-on-fork on
>> extended-remote linux targets.
>>
>> The test gdb.base/foll-fork.exp was modified to check for the new message.
>>
>> Tested on x64 Ubuntu Lucid, native only.
>>
>> Thanks,
>> --Don
>>
>> gdb/
>> 2014-08-20  Don Breazeal  <donb@codesourcery.com>
>>
>> 	* gdb/infrun.c (print_fork_attach): New function.
>> 	(print_fork_detach): New function.
>> 	(follow_fork_inferior): Call print_fork_attach and print_fork_detach.
>> 	(handle_vfork_child_exec_or_exit): Ditto.
>>
>> gdb/testsuite/
>> 2014-08-20  Don Breazeal  <donb@codesourcery.com>
>>
>> 	* gdb.base/foll-fork.exp (test_follow_fork): Add check for new
>> 	detach message.
>> 	(catch_fork_child_follow): Ditto.
>> 	* gdb.base/foll-vfork.exp (vfork_parent_follow_through_step):
>> 	Modify to check for "vfork" instead of "fork".
>> 	(vfork_parent_follow_to_bp): Ditto.
>> 	(vfork_and_exec_child_follow_through_step): Ditto.
>> 	(vfork_and_exec_child_follow_to_main_bp): Ditto, plus add check
>> 	for new detach message.
>>
>> ---
>>  gdb/infrun.c                          |   94 +++++++++++++++++++-------------
>>  gdb/testsuite/gdb.base/foll-fork.exp  |   12 +++--
>>  gdb/testsuite/gdb.base/foll-vfork.exp |    8 ++--
>>  3 files changed, 68 insertions(+), 46 deletions(-)
>>
>> diff --git a/gdb/infrun.c b/gdb/infrun.c
>> index a51c759..34e9295 100644
>> --- a/gdb/infrun.c
>> +++ b/gdb/infrun.c
>> @@ -567,6 +567,49 @@ follow_fork (void)
>>    return should_resume;
>>  }
>>  
>> +/* Print details about attaching to a process after a fork call.  */
>> +
>> +static void
>> +print_fork_attach (pid_t child_pid, pid_t parent_pid, int is_vfork)
> 
> As this is called for the child only, I think it'd be good to make
> that explicit in the name.  E.g., print_attach_fork_child.
> 
>> +{
>> +  if (info_verbose || debug_infrun)
>> +    {
>> +      target_terminal_ours ();
> 
> We should really be using target_terminal_ours_for_output for
> output instead.
> 
>> +      fprintf_filtered (gdb_stdlog,
>> +			_("Attaching after process %d "
>> +			  "%s to child process %d.\n"),
>> +			parent_pid, is_vfork?"vfork":"fork", child_pid);
> 
> Spaces around "?" and ":":  'is_vfork ? "vfork" : "fork"'
> 
> 
>> +    }
>> +}
>> +
>> +/* Print details about detaching from a process after a fork call.  */
>> +
>> +static void
>> +print_fork_detach (pid_t pid, int is_parent, int is_vfork, char *vfork_action)
>> +{
>> +  if (info_verbose || debug_infrun)
>> +    {
>> +      target_terminal_ours ();
>> +
>> +      if (is_parent && is_vfork)
>> +	{
>> +	  /* Detaching a vfork parent, so print what the child did
>> +	     that allows the parent to resume.  */
>> +	  gdb_assert (vfork_action != NULL && strlen (vfork_action) > 0);
> 
> Write: '*vfork_action != '\0' instead of that strlen.
> 
>> +	  fprintf_filtered (gdb_stdlog,
>> +			    "Detaching vfork parent process %d after"
>> +			    " child %s.\n", pid, vfork_action);
> 
> This handling of vfork_action is bad for i18n.  While at it, this is
> missing _().  More below.
> 
>> +	}
>> +      else
>> +	{
>> +	  fprintf_filtered (gdb_stdlog,
>> +			    _("Detaching after %s from %s process %d.\n"),
>> +			    is_vfork?"vfork":"fork",
>> +			    is_parent?"parent":"child", pid);
> 
> Spaces around operators.  "parent" and "child" really shouldn't
> be passed as %s, as this will be awkward when translated.  We should
> split those out instead, like:
> 
> if (is_parent)
>   {
>      fprintf_filtered (gdb_stdlog,
> 		       _("Detaching after %s from parent process %d.\n"),
>                        is_vfork ? "vfork" : "fork", pid);
>   }
> else
>   {
>      fprintf_filtered (gdb_stdlog,
> 		       _("Detaching after %s from child process %d.\n"),
> 		       is_vfork ? "vfork" : "fork", pid);
>   }

Just so I understand (and don't repeat the error), is the problem here
that "parent" and "child" are (a) strings that would need to be
translated, and (b) not in the printf format string?

> 
> But after unrolling this, is there really any benefit to
> print_fork_detach?  It doesn't seem that it'll ever end
> up called twice with the same arguments...  Seems like
> we may be obfuscating more than clarifying with the patch.

My experience of reading and understanding the code was improved by
moving the blocks of printing code out of follow-fork.  So for me, it
would be desirable even with a print function for each permutation of
the messages.  But it's just a personal preference, so if you'd rather
just drop the whole patch, that's OK with me.  Let me know and I'll
either make the requested changes above, or re-work my local branch to
drop this patch.

Thanks for the review,
--Don

> 
> Thanks,
> Pedro Alves
> 


  reply	other threads:[~2014-09-26 20:14 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-07 18:00 [PATCH 00/10] Linux extended-remote fork events Don Breazeal
2014-08-07 18:00 ` [PATCH 03/10] Refactor extended ptrace event status Don Breazeal
2014-08-07 18:00 ` [PATCH 04/10] Enhance extended ptrace event setup Don Breazeal
2014-08-13 17:50   ` Breazeal, Don
2014-08-07 18:00 ` [PATCH 05/10] GDBserver clone breakpoint list Don Breazeal
2014-08-07 18:00 ` [PATCH 01/10] Refactor native follow-fork Don Breazeal
2014-08-07 18:00 ` [PATCH 06/10] Extended-remote follow fork Don Breazeal
2014-08-07 18:00 ` [PATCH 02/10] Refactor follow-fork message printing Don Breazeal
2014-08-07 18:00 ` [PATCH 07/10] Extended-remote arch-specific follow fork Don Breazeal
2014-08-07 18:01 ` [PATCH 08/10] Extended-remote follow vfork Don Breazeal
2014-08-07 18:01 ` [PATCH 10/10] Extended-remote fork event documentation Don Breazeal
2014-08-07 19:31   ` Eli Zaretskii
2014-08-08 15:35     ` Breazeal, Don
2014-08-07 18:01 ` [PATCH 09/10] Extended-remote fork catchpoints Don Breazeal
2014-08-21  0:29 ` [PATCH 01/16 v2] Refactor native follow-fork Don Breazeal
2014-09-05 14:20   ` Pedro Alves
2014-09-05 18:56     ` Breazeal, Don
2014-09-05 20:20       ` Breazeal, Don
2014-09-09 10:57       ` Pedro Alves
2014-09-08 23:54     ` Breazeal, Don
2014-09-09 11:09       ` Pedro Alves
2014-09-12 16:50         ` Breazeal, Don
2014-09-22 15:53           ` Breazeal, Don
2014-09-26 18:13           ` Pedro Alves
2014-09-29 18:08             ` Breazeal, Don
2014-09-30 10:56               ` Pedro Alves
2014-09-30 18:43                 ` Breazeal, Don
2014-08-21  0:29 ` [Patch 00/16 v2] Linux extended-remote fork and exec events Don Breazeal
2014-09-04 20:57   ` Breazeal, Don
2014-10-31 23:29   ` [PATCH 07/16 v3] Extended-remote arch-specific follow fork Don Breazeal
2014-10-31 23:29   ` [PATCH 06/16 v3] Extended-remote Linux " Don Breazeal
2014-11-13 13:00     ` Pedro Alves
2014-11-13 18:53       ` Breazeal, Don
2014-11-13 18:59         ` Pedro Alves
2014-11-13 19:06           ` Breazeal, Don
2014-12-06  0:31             ` Breazeal, Don
2015-01-23 12:53               ` Pedro Alves
2015-01-23 17:18                 ` Breazeal, Don
     [not found]                 ` <1422222420-25421-1-git-send-email-donb@codesourcery.com>
2015-01-25 21:49                   ` [PATCH v4 5/7] Arch-specific remote " Don Breazeal
2015-02-10 16:37                     ` Pedro Alves
2015-01-25 21:49                   ` [PATCH v4 6/7] Remote follow vfork Don Breazeal
2015-02-10 16:39                     ` Pedro Alves
2015-01-25 21:50                   ` [PATCH v4 2/7] Clone remote breakpoints Don Breazeal
2015-01-25 21:50                   ` [PATCH v4 1/7] Identify remote fork event support Don Breazeal
2015-02-10 16:34                     ` Pedro Alves
2015-01-25 21:58                   ` [PATCH v4 7/7] Remote fork catch Don Breazeal
2015-01-26  0:07                   ` [PATCH v4 3/7 v3] Extended-remote Linux follow fork Don Breazeal
2015-02-10 16:36                     ` Pedro Alves
2015-01-26  0:20                   ` [PATCH v4 4/7] Target remote " Don Breazeal
2015-01-12 22:39             ` [PATCH 06/16 v3] Extended-remote Linux " Don Breazeal
2015-01-12 22:49               ` Breazeal, Don
2014-10-31 23:29   ` [PATCH 05/16 v3] GDBserver clone breakpoint list Don Breazeal
2014-10-31 23:29   ` [PATCH 04/16 v3] Determine supported extended-remote features Don Breazeal
2014-11-13 12:59     ` Pedro Alves
2014-11-13 18:28       ` Breazeal, Don
2014-11-13 18:33         ` Pedro Alves
2014-11-13 19:08           ` Pedro Alves
2014-11-13 18:37         ` Breazeal, Don
2014-11-13 18:48           ` Pedro Alves
2014-12-06  0:30             ` Breazeal, Don
2015-01-12 22:36           ` Don Breazeal
2015-01-21 21:02             ` Breazeal, Don
2014-10-31 23:29   ` [PATCH 00/16 v3] Linux extended-remote fork and exec events Don Breazeal
2014-11-12 15:54     ` Pedro Alves
2014-11-13 13:41     ` Pedro Alves
2014-11-13 13:51       ` Pedro Alves
2014-11-13 14:58         ` Pedro Alves
2014-11-13 19:14     ` Pedro Alves
2014-10-31 23:29   ` [PATCH 08/16 v3] Extended-remote follow vfork Don Breazeal
2014-10-31 23:30   ` [PATCH 10/16 v3] Extended-remote fork event documentation Don Breazeal
2014-10-31 23:30   ` [PATCH 12/16 v3] Extended-remote follow exec Don Breazeal
2014-10-31 23:30   ` [PATCH 11/16 v3] Extended-remote Linux exit events Don Breazeal
2014-11-13 19:18     ` Pedro Alves
2014-10-31 23:30   ` [PATCH 13/16 v3] Extended-remote exec catchpoints Don Breazeal
2014-10-31 23:30   ` [PATCH 09/16 v3] Extended-remote fork catchpoints Don Breazeal
2014-10-31 23:31   ` [PATCH 16/16 v3] Non-stop follow exec tests Don Breazeal
2014-10-31 23:31   ` [PATCH 14/16 v3] Suppress spurious warnings with extended-remote follow exec Don Breazeal
2014-10-31 23:31   ` [PATCH 15/16 v3] Extended-remote exec event documentation Don Breazeal
2014-08-21  0:30 ` [PATCH 02/16 v2] Refactor follow-fork message printing Don Breazeal
2014-09-26 19:52   ` Pedro Alves
2014-09-26 20:14     ` Breazeal, Don [this message]
2014-10-03 23:51       ` Breazeal, Don
2014-10-15 16:08       ` Pedro Alves
2014-10-22 23:47         ` Breazeal, Don
2014-10-24 12:35           ` Pedro Alves
2014-10-24 18:45             ` Breazeal, Don
2014-08-21  0:30 ` [PATCH 04/16 v2] Determine supported extended-remote features Don Breazeal
2014-10-15 16:17   ` Pedro Alves
2014-10-21 23:23     ` Breazeal, Don
2014-10-22 21:48       ` Pedro Alves
2014-10-31 23:38         ` Breazeal, Don
2014-08-21  0:30 ` [PATCH 03/16 v2] Refactor ptrace extended event status Don Breazeal
2014-09-09 11:31   ` Pedro Alves
2014-09-19 18:14     ` [pushed] " Breazeal, Don
2014-08-21  0:31 ` [PATCH 05/16 v2] GDBserver clone breakpoint list Don Breazeal
2014-10-15 17:40   ` Pedro Alves
2014-10-31 23:44     ` Breazeal, Don
2014-08-21  0:31 ` [PATCH 06/16 v2] Extended-remote Linux follow fork Don Breazeal
2014-09-19 20:57   ` Breazeal, Don
2014-08-21  0:31 ` [PATCH 07/16 v2] Extended-remote arch-specific " Don Breazeal
2014-09-19 21:26   ` Breazeal, Don
2014-08-21  0:32 ` [PATCH 08/16 v2] Extended-remote follow vfork Don Breazeal
2014-08-21  0:33 ` [PATCH 11/16 v2] Extended-remote Linux exit events Don Breazeal
2014-08-21  0:33 ` [PATCH 09/16 v2] Extended-remote fork catchpoints Don Breazeal
2014-08-21  0:33 ` [PATCH 10/16 v2] Extended-remote fork event documentation Don Breazeal
2014-08-21  0:34 ` [PATCH 13/16 v2] Extended-remote exec catchpoints Don Breazeal
2014-08-21  0:34 ` [PATCH 12/16 v2] Extended-remote follow exec Don Breazeal
2014-08-21  0:35 ` [PATCH 14/16 v2] Suppress spurious warnings with extended-remote " Don Breazeal
2014-08-21  0:36 ` [PATCH 15/16 v2] Extended-remote exec event documentation Don Breazeal
2014-08-21  0:36 ` [PATCH 16/16 v2] Non-stop follow exec tests Don Breazeal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5425C92B.1010101@codesourcery.com \
    --to=donb@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).