My best guess is a missing include, which I added in 230080. If that doesn’t fix it, I am going to need somebody who knows their way around Windows to help out
> On Feb 20, 2015, at 2:41 PM, Zachary Turner <ztur...@google.com> wrote: > > You probably already saw the bot failure email, but you can take a look at > this: > > http://lab.llvm.org:8011/builders/lldb-x86-windows-msvc/builds/2222/steps/build/logs/stdio > > <http://lab.llvm.org:8011/builders/lldb-x86-windows-msvc/builds/2222/steps/build/logs/stdio> > > It looks like probably a missing #include, let me know if it's more difficult > though. > > On Fri Feb 20 2015 at 2:26:38 PM Zachary Turner <ztur...@google.com > <mailto:ztur...@google.com>> wrote: > Might it ever be possible to expand a string for purposes other than > forwarding those arguments on to another executable? For example, maybe we > want shell expansion to specify the name of the executable in the first > place. Like imagine you're trying to debug "foo", and the path of foo is > $FOODIR/foo. In this case the expansion doesn't happen on the argument to > the command but the command itself. > > And... I just saw your other email come through. ShellExpandArguments() > sounds fine. > > On Fri Feb 20 2015 at 2:00:36 PM Enrico Granata <egran...@apple.com > <mailto:egran...@apple.com>> wrote: > Fair enough - ShellExpand is not bad, but I feel like Arguments should be in > there somewhere > > Collective hivemind, something less verbose than ShellStyleExpandArguments > maybe? > >> On Feb 20, 2015, at 1:57 PM, Zachary Turner <ztur...@google.com >> <mailto:ztur...@google.com>> wrote: >> >> In a followup patch, would you mind changing the terminology from >> GlobArguments to something more descriptive, like ShellExpand? When I think >> glob I only think of wildcards, not full shell exnapsion. So I think it >> would be better if it were more explicit. >> >> On Fri Feb 20 2015 at 1:51:26 PM Enrico Granata <egran...@apple.com >> <mailto:egran...@apple.com>> wrote: >> Author: enrico >> Date: Fri Feb 20 15:48:38 2015 >> New Revision: 230065 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=230065&view=rev >> <http://llvm.org/viewvc/llvm-project?rev=230065&view=rev> >> Log: >> Start the refactoring of globbing >> >> - Add Host::GlobArguments() to perform local-globbing >> I implemented this on OSX and Windows in terms of argdumper (Windows >> implementation is essentially the same as the OSX version + a change in >> binary name and some string magic) >> Other platforms did not specifically chime in, so I left it unimplemented >> for them for the time being. Please feel free to fill in the blanks >> >> - Add Platform::GlobArguments() to support remote-globbing >> For now, no feature change here - but now we have infrastructure to help >> GDBRemote targets to support globbing - and patches to that effect will >> follow >> >> No visible feature change >> >> >> Modified: >> lldb/trunk/include/lldb/Host/Host.h >> lldb/trunk/include/lldb/Target/Platform.h >> lldb/trunk/source/Host/freebsd/Host.cpp >> lldb/trunk/source/Host/linux/Host.cpp >> lldb/trunk/source/Host/macosx/Host.mm >> lldb/trunk/source/Host/windows/Host.cpp >> lldb/trunk/source/Target/Platform.cpp >> >> Modified: lldb/trunk/include/lldb/Host/Host.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/Host.h?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/Host.h?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/include/lldb/Host/Host.h (original) >> +++ lldb/trunk/include/lldb/Host/Host.h Fri Feb 20 15:48:38 2015 >> @@ -253,6 +253,16 @@ public: >> static Error >> LaunchProcess (ProcessLaunchInfo &launch_info); >> >> + //------------------------------------------------------------------ >> + /// Perform globbing of the command-line for this launch info >> + /// This can potentially involve wildcard expansion >> + // environment variable replacement, and whatever other >> + // argument magic the platform defines as part of its typical >> + // user experience >> + //------------------------------------------------------------------ >> + static Error >> + GlobArguments (ProcessLaunchInfo &launch_info); >> + >> static Error >> RunShellCommand (const char *command, // Shouldn't be NULL >> const char *working_dir, // Pass NULL to use the >> current working directory >> >> Modified: lldb/trunk/include/lldb/Target/Platform.h >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Platform.h?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Platform.h?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/include/lldb/Target/Platform.h (original) >> +++ lldb/trunk/include/lldb/Target/Platform.h Fri Feb 20 15:48:38 2015 >> @@ -386,6 +386,16 @@ namespace lldb_private { >> LaunchProcess (ProcessLaunchInfo &launch_info); >> >> //------------------------------------------------------------------ >> + /// Perform globbing of the command-line for this launch info >> + /// This can potentially involve wildcard expansion >> + // environment variable replacement, and whatever other >> + // argument magic the platform defines as part of its typical >> + // user experience >> + //------------------------------------------------------------------ >> + virtual Error >> + GlobArguments (ProcessLaunchInfo &launch_info); >> + >> + //------------------------------------------------------------------ >> /// Kill process on a platform. >> //------------------------------------------------------------------ >> virtual Error >> >> Modified: lldb/trunk/source/Host/freebsd/Host.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/freebsd/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/freebsd/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/source/Host/freebsd/Host.cpp (original) >> +++ lldb/trunk/source/Host/freebsd/Host.cpp Fri Feb 20 15:48:38 2015 >> @@ -312,3 +312,9 @@ Host::GetUnixSignals () >> return s_unix_signals_sp; >> } >> >> +Error >> +Host::GlobArguments (ProcessLaunchInfo &launch_info) >> +{ >> + return Error("unimplemented"); >> +} >> + >> >> Modified: lldb/trunk/source/Host/linux/Host.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/linux/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/linux/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/source/Host/linux/Host.cpp (original) >> +++ lldb/trunk/source/Host/linux/Host.cpp Fri Feb 20 15:48:38 2015 >> @@ -417,3 +417,8 @@ Host::GetUnixSignals () >> return s_unix_signals_sp; >> } >> >> +Error >> +Host::GlobArguments (ProcessLaunchInfo &launch_info) >> +{ >> + return Error("unimplemented"); >> +} >> >> Modified: lldb/trunk/source/Host/macosx/Host.mm >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Host.mm?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Host.mm?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/source/Host/macosx/Host.mm (original) >> +++ lldb/trunk/source/Host/macosx/Host.mm Fri Feb 20 15:48:38 2015 >> @@ -45,6 +45,7 @@ >> #include "lldb/Core/ModuleSpec.h" >> #include "lldb/Core/StreamFile.h" >> #include "lldb/Core/StreamString.h" >> +#include "lldb/Core/StructuredData.h" >> #include "lldb/Host/ConnectionFileDescriptor.h" >> #include "lldb/Host/Endian.h" >> #include "lldb/Host/FileSpec.h" >> @@ -1351,6 +1352,91 @@ Host::LaunchProcess (ProcessLaunchInfo & >> return error; >> } >> >> +Error >> +Host::GlobArguments (ProcessLaunchInfo &launch_info) >> +{ >> + Error error; >> + if (launch_info.GetFlags().Test(eLaunchFlagGlobArguments)) >> + { >> + FileSpec glob_tool_spec; >> + if (!HostInfo::GetLLDBPath(lldb::ePathTypeSupportExecutableDir, >> glob_tool_spec)) >> + { >> + error.SetErrorString("could not find argdumper tool"); >> + return error; >> + } >> + glob_tool_spec.AppendPathComponent("argdumper"); >> + if (!glob_tool_spec.Exists()) >> + { >> + error.SetErrorString("could not find argdumper tool"); >> + return error; >> + } >> + >> + std::string quoted_cmd_string; >> + >> launch_info.GetArguments().GetQuotedCommandString(quoted_cmd_string); >> + StreamString glob_command; >> + >> + glob_command.Printf("%s %s", >> + glob_tool_spec.GetPath().c_str(), >> + quoted_cmd_string.c_str()); >> + >> + int status; >> + std::string output; >> + RunShellCommand(glob_command.GetData(), >> launch_info.GetWorkingDirectory(), &status, nullptr, &output, 10); >> + >> + if (status != 0) >> + { >> + error.SetErrorStringWithFormat("argdumper exited with error >> %d", status); >> + return error; >> + } >> + >> + auto data_sp = StructuredData::ParseJSON(output); >> + if (!data_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto dict_sp = data_sp->GetAsDictionary(); >> + if (!data_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto args_sp = dict_sp->GetObjectForDotSeparatedPath("arguments"); >> + if (!args_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto args_array_sp = args_sp->GetAsArray(); >> + if (!args_array_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + launch_info.GetArguments().Clear(); >> + >> + for (size_t i = 0; >> + i < args_array_sp->GetSize(); >> + i++) >> + { >> + auto item_sp = args_array_sp->GetItemAtIndex(i); >> + if (!item_sp) >> + continue; >> + auto str_sp = item_sp->GetAsString(); >> + if (!str_sp) >> + continue; >> + >> + >> launch_info.GetArguments().AppendArgument(str_sp->GetValue().c_str()); >> + } >> + } >> + >> + return error; >> +} >> + >> HostThread >> Host::StartMonitoringChildProcess(Host::MonitorChildProcessCallback >> callback, void *callback_baton, lldb::pid_t pid, bool monitor_signals) >> { >> >> Modified: lldb/trunk/source/Host/windows/Host.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/windows/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/windows/Host.cpp?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/source/Host/windows/Host.cpp (original) >> +++ lldb/trunk/source/Host/windows/Host.cpp Fri Feb 20 15:48:38 2015 >> @@ -217,4 +217,90 @@ HostThread >> Host::StartMonitoringChildProcess(Host::MonitorChildProcessCallback >> callback, void *callback_baton, lldb::pid_t pid, bool monitor_signals) >> { >> return HostThread(); >> -} >> \ No newline at end of file >> +} >> + >> +Error >> +Host::GlobArguments (ProcessLaunchInfo &launch_info) >> +{ >> + Error error; >> + if (launch_info.GetFlags().Test(eLaunchFlagGlobArguments)) >> + { >> + FileSpec glob_tool_spec; >> + if (!HostInfo::GetLLDBPath(lldb::ePathTypeSupportExecutableDir, >> glob_tool_spec)) >> + { >> + error.SetErrorString("could not find argdumper tool"); >> + return error; >> + } >> + glob_tool_spec.AppendPathComponent("argdumper.exe"); >> + if (!glob_tool_spec.Exists()) >> + { >> + error.SetErrorString("could not find argdumper tool"); >> + return error; >> + } >> + >> + std::string quoted_cmd_string; >> + >> launch_info.GetArguments().GetQuotedCommandString(quoted_cmd_string); >> + std::replace(quoted_cmd_string.begin(), quoted_cmd_string.end(), >> '\\' <>, '/'); >> + StreamString glob_command; >> + >> + glob_command.Printf("%s %s", >> + glob_tool_spec.GetPath().c_str(), >> + quoted_cmd_string.c_str()); >> + >> + int status; >> + std::string output; >> + RunShellCommand(glob_command.GetData(), >> launch_info.GetWorkingDirectory(), &status, nullptr, &output, 10); >> + >> + if (status != 0) >> + { >> + error.SetErrorStringWithFormat("argdumper exited with error >> %d", status); >> + return error; >> + } >> + >> + auto data_sp = StructuredData::ParseJSON(output); >> + if (!data_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto dict_sp = data_sp->GetAsDictionary(); >> + if (!data_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto args_sp = dict_sp->GetObjectForDotSeparatedPath("arguments"); >> + if (!args_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + auto args_array_sp = args_sp->GetAsArray(); >> + if (!args_array_sp) >> + { >> + error.SetErrorString("invalid JSON"); >> + return error; >> + } >> + >> + launch_info.GetArguments().Clear(); >> + >> + for (size_t i = 0; >> + i < args_array_sp->GetSize(); >> + i++) >> + { >> + auto item_sp = args_array_sp->GetItemAtIndex(i); >> + if (!item_sp) >> + continue; >> + auto str_sp = item_sp->GetAsString(); >> + if (!str_sp) >> + continue; >> + >> + >> launch_info.GetArguments().AppendArgument(str_sp->GetValue().c_str()); >> + } >> + } >> + >> + return error; >> +} >> >> Modified: lldb/trunk/source/Target/Platform.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Platform.cpp?rev=230065&r1=230064&r2=230065&view=diff >> >> <http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Platform.cpp?rev=230065&r1=230064&r2=230065&view=diff> >> ============================================================================== >> --- lldb/trunk/source/Target/Platform.cpp (original) >> +++ lldb/trunk/source/Target/Platform.cpp Fri Feb 20 15:48:38 2015 >> @@ -1116,87 +1116,9 @@ Platform::LaunchProcess (ProcessLaunchIn >> } >> else if (launch_info.GetFlags().Test(eLaunchFlagGlobArguments)) >> { >> - FileSpec glob_tool_spec; >> - if (!HostInfo::GetLLDBPath(lldb::ePathTypeSupportExecutableDir, >> glob_tool_spec)) >> - { >> - error.SetErrorString("could not find argdumper tool"); >> + error = GlobArguments(launch_info); >> + if (error.Fail()) >> return error; >> - } >> -#if defined(_WIN32) >> - glob_tool_spec.AppendPathComponent("argdumper.exe"); >> -#else >> - glob_tool_spec.AppendPathComponent("argdumper"); >> -#endif >> - if (!glob_tool_spec.Exists()) >> - { >> - error.SetErrorString("could not find argdumper tool"); >> - return error; >> - } >> - >> - std::string quoted_cmd_string; >> - >> launch_info.GetArguments().GetQuotedCommandString(quoted_cmd_string); >> -#if defined(_WIN32) >> - std::replace(quoted_cmd_string.begin(), >> quoted_cmd_string.end(), '\\' <>, '/'); >> -#endif >> - StreamString glob_command; >> - >> - glob_command.Printf("%s %s", >> - glob_tool_spec.GetPath().c_str(), >> - quoted_cmd_string.c_str()); >> - >> - int status; >> - std::string output; >> - RunShellCommand(glob_command.GetData(), >> launch_info.GetWorkingDirectory(), &status, nullptr, &output, 10); >> - >> - if (status != 0) >> - { >> - error.SetErrorStringWithFormat("argdumper exited with error >> %d", status); >> - return error; >> - } >> - >> - auto data_sp = StructuredData::ParseJSON(output); >> - if (!data_sp) >> - { >> - error.SetErrorString("invalid JSON"); >> - return error; >> - } >> - >> - auto dict_sp = data_sp->GetAsDictionary(); >> - if (!data_sp) >> - { >> - error.SetErrorString("invalid JSON"); >> - return error; >> - } >> - >> - auto args_sp = >> dict_sp->GetObjectForDotSeparatedPath("arguments"); >> - if (!args_sp) >> - { >> - error.SetErrorString("invalid JSON"); >> - return error; >> - } >> - >> - auto args_array_sp = args_sp->GetAsArray(); >> - if (!args_array_sp) >> - { >> - error.SetErrorString("invalid JSON"); >> - return error; >> - } >> - >> - launch_info.GetArguments().Clear(); >> - >> - for (size_t i = 0; >> - i < args_array_sp->GetSize(); >> - i++) >> - { >> - auto item_sp = args_array_sp->GetItemAtIndex(i); >> - if (!item_sp) >> - continue; >> - auto str_sp = item_sp->GetAsString(); >> - if (!str_sp) >> - continue; >> - >> - >> launch_info.GetArguments().AppendArgument(str_sp->GetValue().c_str()); >> - } >> } >> >> if (log) >> @@ -1210,6 +1132,14 @@ Platform::LaunchProcess (ProcessLaunchIn >> } >> >> Error >> +Platform::GlobArguments (ProcessLaunchInfo &launch_info) >> +{ >> + if (IsHost()) >> + return Host::GlobArguments(launch_info); >> + return Error("base lldb_private::Platform class can't glob arguments"); >> +} >> + >> +Error >> Platform::KillProcess (const lldb::pid_t pid) >> { >> Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PLATFORM)); >> >> >> _______________________________________________ >> lldb-commits mailing list >> lldb-commits@cs.uiuc.edu <mailto:lldb-commits@cs.uiuc.edu> >> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits >> <http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits> > > Thanks, > - Enrico > 📩 egranata@.com ☎️ 27683 > > > > Thanks, - Enrico 📩 egranata@.com ☎️ 27683
_______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits