> On Jan 12, 2015, at 2:35 PM, Zachary Turner <ztur...@google.com> wrote:
> 
> Thanks for the response.  By the way, is this setting more appropriate on the 
> CommandInterpreter instead of the debugger?

Yes, the command interpreter makes more sense.

Jim


> 
> On Mon Jan 12 2015 at 2:34:06 PM Greg Clayton <gclay...@apple.com> wrote:
> 
> > On Jan 12, 2015, at 2:05 PM, Zachary Turner <ztur...@google.com> wrote:
> >
> > There doesn't seem to be a good way to get access to the Debugger object 
> > from the Args class.  I tried changing Args to take a Debugger to its 
> > constructor, but it seems this isn't always possible, for example with 
> > anything having to do with OptionValue.
> > I could provide a default value of NULL for the Debugger, and if NULL it 
> > would fall back to the default escape character, but this seems awkward.
> >
> > Since I've declared this as a global property, why should I even need a 
> > Debugger instance?  Shouldn't the global settings be static on the Debugger 
> > so that they can be accessed without an instance?
> 
> 
> This is the problem. See how process does it:
> 
> class Process {
>     static const ProcessPropertiesSP &
>     GetGlobalProperties();
> }
> 
> The debugger should do the same thing. It should also add static accessors 
> for all of the settings that are truly global settings. Looking at the global 
> settings, they all seem to be set to be global values which probably isn't 
> what we want. Why? Xcode creates a new Debugger for each debugging window 
> that it creates and if someone types "setting set auto-confirm false" in one 
> command interpreter, it shouldn't affect the other.
> 
> So I would say we need to switch all debugger settings to be non-global 
> (third initialized in each of the PropertyDefinition values should be set to 
> "false" in g_properties in Debugger.cpp) and the only one that should remain 
> global is your new escape character. Then Debugger should get a new static 
> accessor:
> 
> class Debugger
> {
>     static char
>     GetEscapeCharacter();
> };
> 
> This in turn will access the global properties and return it to outside folks.
> 
> Check out the ProcessProperties class in Process.h and check out its 
> constructor. We will need to do something similar for the debugger's 
> settings. Right now Debugger inherits directly from Properties, but we will 
> need to change it to be like the process where there is a DebuggerProperties 
> class. The global version gets constructed with a "bool is_global" set to 
> false, and the instance ones get constructed with that set to true.
> 
> The Process class is the model we will need to follow if you want to make 
> this change and have a true global property that can be accessed without a 
> Debugger instance.
> 
> 
> >
> > On Thu Jan 08 2015 at 3:00:30 PM <jing...@apple.com> wrote:
> > It's not just file names, you would also have to make sure there's nothing 
> > else that might be in command argument or option value that has a single & 
> > a double quote, since without the backslashes this would be impossible.
> >
> > If you really want to do this, I think it would be better to add a debugger 
> > setting for the "protection character".  Then this would be set to 
> > something else (maybe "#") on Windows, and backslash on all other systems.  
> > That way you could probably always find a protection character that you 
> > could use for whatever gnarly string you ended up having to pass through 
> > the command interpreter.
> >
> > Jim
> >
> >
> > > On Jan 8, 2015, at 2:55 PM, Zachary Turner <ztur...@google.com> wrote:
> > >
> > > Actually ' is a valid filename character in Windows, but not ".  That 
> > > being said, it's so rare, and having a backslash is so common that I 
> > > would prefer the common case to be easy, and the rare case being either 
> > > unsupported or difficult is ok with me.  So I'd still prefer to disable 
> > > this backslash handling on Windows for now, and then fix ' on Windows 
> > > separately in the future.
> > >
> > > On Thu Jan 08 2015 at 2:51:51 PM Zachary Turner <ztur...@google.com> 
> > > wrote:
> > > On Windows, that's not a valid file name, and in fact any file name that 
> > > has an escaped character is not a valid filename.  I see what you're 
> > > getting at though, that for non-Windows it's necessary.  Can I wrap the 
> > > backslash handling in #ifndef _WIN32 then?
> > >
> > > On Thu Jan 08 2015 at 2:49:49 PM <jing...@apple.com> wrote:
> > > If I have a file called foo"bar'baz, how what would I put in the place of 
> > > <AWKWARD NAME> for
> > >
> > > (lldb) file <AWKWARD NAME>
> > >
> > > Right now, I can do:
> > >
> > > (lldb) file foo\"bar\'baz
> > > Current executable set to 'foo"bar'baz' (x86_64).
> > >
> > > Jim
> > >
> > >
> > > > On Jan 8, 2015, at 2:31 PM, Zachary Turner <ztur...@google.com> wrote:
> > > >
> > > > FWIW, Removing backslash handling from this function (essentially 
> > > > ignoring backslashes in command arguments) fixes about 12-15 tests on 
> > > > Windows with no other changes.  I see there's some logic in Args for 
> > > > encoding and decoding escape sequences, but this only happens if a 
> > > > particular command option is set, and that command only only appears to 
> > > > be set for the "prompt" command.  I'm not sure if removing the 
> > > > backslash logic from SetCommandString would interfere with this command 
> > > > in any way, but it doesn't seem like it would interfere with any other 
> > > > commands, unless I'm missing something.
> > > >
> > > > On Thu Jan 08 2015 at 1:43:16 PM Zachary Turner <ztur...@google.com> 
> > > > wrote:
> > > > One thing causing many tests to fail on Windows is the presence of 
> > > > backslashes in argument.  Until now, I've worked around this in many 
> > > > cases by making sure that arguments with backslashes are always quoted.
> > > >
> > > > But there are some cases where this is not easy to guarantee and now 
> > > > I'm leaning towards (at least on Windows) allowing backslashes in 
> > > > argument strings.  The code in question comes from the function void 
> > > > SetCommandString (const char *command) in the file Args.cpp
> > > >
> > > > In particular, it implements special handling of whitespace, single 
> > > > quotes, double quotes, and backslashes.  For the case of backslashes it 
> > > > removes them from the string.
> > > >
> > > > What would be the implications of removing backslash handling from this 
> > > > function for all platforms?  I would prefer to keep platform specific 
> > > > code out of generic code, but I think this needs to be changed on 
> > > > Windows.
> > > > _______________________________________________
> > > > lldb-dev mailing list
> > > > lldb-dev@cs.uiuc.edu
> > > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
> > >
> >
> > _______________________________________________
> > lldb-dev mailing list
> > lldb-dev@cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev


_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to