Re: [RFA 3/3] Document 'set|show exec-file-mismatch (reload|warn|off)'

Philippe Waroquiers
2019-12-22T09:09:24Z

On Sat, 2019-12-21 at 21:46 -0500, Christian Biesinger via gdb-patches wrote:
> On Sat, Dec 21, 2019, 09:37 Philippe Waroquiers <
> philippe.waroquiers@skynet.be> wrote:
>
> > Mention in NEWS the new option and the set/show commands.
> >
> > Document in gdb.texinfo the new option and the set/show commands.
> >
>
> When would someone set this to off, or even warn? I'm wondering is it makes
> sense to add this setting vs always having the reload behavior?
Effectively, I think that in a large majority of the cases, the reload
behavior is the correct thing to do, which is why it is the default value.

However, I have added the option for the following reasons:
* There are today already several features to choose
flexibly the exec-file and symbol-file (see GDB manual
"18.1 Commands to Specify Files"). The new option allows to retain
the flexible manual control, which I assume is needed for some
use cases.
* Also, the previous trial to fix this problem was based on the notion
of "sticky" exec-file: if the exec-file was explicitly given
by the user, then it was never changed automatically when
attaching to another process having another exec-file.
IMO, this was not the best approach, as GDB would still
silently use the wrong file in some cases (such as typo in the PID,
or successive attach/detach after having given a program file
as GDB argument).
But this fix trial also seems to indicate some desire to let the
user choose (in unusual circumstances) to keep a specific exec file.

Note that for reload and warn, the message given to the user explicitly
mention the 'exec-file-mismatch' option, so that users that need some
control are informed of the possibility.

Once the function 'validate_exec_file' was implemented and called at
the right places, implementing the option itself was not a big deal,
apart of the difficulty of properly naming and documenting the values :).

Thanks
Philippe

>
>
> > gdb/ChangeLog
> > YYYY-MM-DD Philippe Waroquiers <philippe.waroquiers@skynet.be>
> >
> > * NEWS: Mention the new option and the set/show commands.
> >
> > gdb/doc/ChangeLog
> > YYYY-MM-DD Philippe Waroquiers <philippe.waroquiers@skynet.be>
> >
> > * gdb.texinfo (Attach): Document the new option and the
> > set/show commands.
> > (Connecting): Reference the exec-file-mismatch option.
> > ---
> > gdb/NEWS | 12 ++++++++++++
> > gdb/doc/gdb.texinfo | 31 +++++++++++++++++++++++++++++++
> > 2 files changed, 43 insertions(+)
> >
> > diff --git a/gdb/NEWS b/gdb/NEWS
> > index ee10914fd8..1a90862b0d 100644
> > --- a/gdb/NEWS
> > +++ b/gdb/NEWS
> > @@ -3,6 +3,18 @@
> >
> > *** Changes since GDB 9
> >
> > +* New commands
> > +
> > +set exec-file-mismatch -- Set exec-file-mismatch handling
> > (reload|warn|off).
> > +show exec-file-mismatch -- Show exec-file-mismatch handling
> > (reload|warn|off).
> > + Set or show the option 'exec-file-mismatch'. When GDB attaches to
> > + a running program and can determine the running program, this new option
> > + indicates how to handle a mismatch between the current exec-file and
> > + the automatically detected file.
> > + 'reload' is the default value: in case of mismatch, GDB will warn the
> > user
> > + and reload the automatically determined file after user confirmation.
> > +
> > +
> > *** Changes in GDB 9
> >
> > * 'thread-exited' event is now available in the annotations interface.
> > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> > index 4d25f755d7..a246ba0bf5 100644
> > --- a/gdb/doc/gdb.texinfo
> > +++ b/gdb/doc/gdb.texinfo
> > @@ -2904,6 +2904,31 @@ the program is not found) by using the source file
> > search path
> > the @code{file} command to load the program. @xref{Files, ,Commands to
> > Specify Files}.
> >
> > +@anchor{set exec-file-mismatch}
> > +If the debugger can determine the program running in the process
> > +and this program does not match the current exec-file, the option
> > +@code{exec-file-mismatch} specifies how to handle the mismatch.
> > +
> > +@table @code
> > +@kindex exec-file-mismatch
> > +@cindex set exec-file-mismatch
> > +@item set exec-file-mismatch @samp{reload|warn|off}
> > +In case of mismatch between the current exec-file and the automatically
> > +determined exec-file of the PID the debugger is attaching to,
> > +@samp{reload} indicates to give a warning to the user and reload
> > +the automatically determined exec-file. The user will be asked to
> > +confirm the loading of the automatically determined file.
> > +With @samp{warn}, @value{GDBN} just gives a warning to the user to
> > +signal the mismatch. @samp{off} indicates to not check for mismatch.
> > +The default value is @samp{reload}.
> > +
> > +
> > +@cindex show exec-file-mismatch
> > +@item show exec-file-mismatch
> > +Show the current value of @code{exec-file-mismatch}.
> > +
> > +@end table
> > +
> > The first thing @value{GDBN} does after arranging to debug the specified
> > process is to stop it. You can examine and modify an attached process
> > with all the @value{GDBN} commands that are ordinarily available when
> > @@ -21780,6 +21805,12 @@ established. If you are using @code{gdbserver},
> > you may also invoke
> > @code{gdbserver} using the @option{--attach} option
> > (@pxref{Running gdbserver}).
> >
> > +Some remote targets allow @value{GDBN} to determine the program running
> > +in the process the debugger is attaching to. In such a case, @value{GDBN}
> > +uses the value of @code{exec-file-mismatch} to handle a possible mismatch
> > +between the program running in the process and the current exec-file.
> > +(@pxref{set exec-file-mismatch}).
> > +
> > @end table
> >
> > @anchor{Host and target files}
> > --
> > 2.20.1
> >
> >