[PATCH v3 4/5] Implement "set cwd" command on GDB

Eli Zaretskii eliz@gnu.org
Fri Sep 22 18:56:00 GMT 2017


> From: Sergio Durigan Junior <sergiodj@redhat.com>
> Cc: gdb-patches@sourceware.org,  palves@redhat.com
> Date: Fri, 22 Sep 2017 14:00:51 -0400
> 
> On Friday, September 22 2017, Eli Zaretskii wrote:
> 
> >> +@kindex set cwd
> >> +@cindex change inferior's working directory
> >> +@item set cwd @r{[}@var{directory}@r{]}
> >> +Set the inferior's working directory to @var{directory}.  If not
> >> +given, @var{directory} uses @file{'~'}.
> >
> > I think we should document here what does "~" mean on MS-Windows,
> > especially since, when HOME is not in the environment, Gnulib's glob
> > module doesn't behave according to MS platform recommendations (which
> > say not to create files directly below %HOMEDRIVE%%HOMEPATH%).
> 
> Sure, but just to be clear, this text was strongly based on another part
> of the docs, which also mentions '~' without explaining further.
> 
> As I am totally out of the loop when it comes to Windows environments,
> I'd appreciate a suggestion for the new text.

If you write the Unix part, I can propose how to amend it to cover
Windows.  OK?

> > Does this show the original value typed by the user, or the expanded
> > value?  E.g., if the user types "set cwd ~/foo", what will "show cwd"
> > display?  If it shows the unexpanded form, does that mean the actual
> > cwd will change if, say, HOME changes?
> 
> Pedro and I had a conversation about this specific topic yesterday, and
> the decision was that the host should not do any path expansion on this
> case.  Therefore, whatever the user sets with "set cwd" is not expanded
> until the inferior starts, which means that it is the target who
> performs the expansion.

There's no contradiction between these two sides of this issue.  For
native debugging, host == target, so the host can expand.  For the
non-native debugging, you can ask the target to do the expansion and
store the result.  Either way IMO is better than expanding at run
time, because the latter makes the expansion dependent on factors
which could be out of the user control, and also requires every use
of the value to call gdb_tilde_expand, thus wasting cycles.

> > This seems to pass the unexpanded cwd directly to CreateProcess.  I
> > don't think this will work on Windows, as this directory is not
> > interpreted by any shell, so "~" will cause errors.  I think we should
> > pass this via gdb_tilde_expand, like we do in the Unix case, and I
> > also think we should mirror all the slashes in the result, just in
> > case.
> 
> Hm, you're right.  I will call "gdb_tilde_expand" here.  I'm not sure
> what you mean by "mirror all the slashes in the result".  Do you mean
> "escape the slashes"?

No, I mean convert forward slashes to backslashes.

Thanks.



More information about the Gdb-patches mailing list