in src/MICore/LaunchOptions.cs [1805:1895]
protected void InitializeCommonOptions(Xml.LaunchOptions.BaseLaunchOptions source)
{
if (this.ExePath == null)
{
string exePath = source.ExePath;
if (!string.IsNullOrWhiteSpace(exePath))
{
this.ExePath = exePath;
}
}
if (this.TargetArchitecture == TargetArchitecture.Unknown && source.TargetArchitectureSpecified)
{
this.TargetArchitecture = ConvertTargetArchitectureAttribute(source.TargetArchitecture);
}
this.DebuggerMIMode = ConvertMIModeAttribute(source.MIMode);
if (string.IsNullOrEmpty(this.ExeArguments))
this.ExeArguments = source.ExeArguments;
if (string.IsNullOrEmpty(this.WorkingDirectory))
this.WorkingDirectory = source.WorkingDirectory;
if (string.IsNullOrEmpty(this.VisualizerFile))
this.VisualizerFile = source.VisualizerFile;
this.ShowDisplayString = source.ShowDisplayString;
this.WaitDynamicLibLoad = source.WaitDynamicLibLoad;
this.SetupCommands = LaunchCommand.CreateCollection(source.SetupCommands);
if (source.CustomLaunchSetupCommands != null)
{
this.CustomLaunchSetupCommands = LaunchCommand.CreateCollection(source.CustomLaunchSetupCommands);
}
this.SourceMap = SourceMapEntry.CreateCollection(source.SourceMap);
Debug.Assert((uint)LaunchCompleteCommand.ExecRun == (uint)Xml.LaunchOptions.BaseLaunchOptionsLaunchCompleteCommand.execrun);
Debug.Assert((uint)LaunchCompleteCommand.ExecContinue == (uint)Xml.LaunchOptions.BaseLaunchOptionsLaunchCompleteCommand.execcontinue);
Debug.Assert((uint)LaunchCompleteCommand.None == (uint)Xml.LaunchOptions.BaseLaunchOptionsLaunchCompleteCommand.None);
this.LaunchCompleteCommand = (LaunchCompleteCommand)source.LaunchCompleteCommand;
string additionalSOLibSearchPath = source.AdditionalSOLibSearchPath;
if (!string.IsNullOrEmpty(additionalSOLibSearchPath))
{
if (string.IsNullOrEmpty(this.AdditionalSOLibSearchPath))
this.AdditionalSOLibSearchPath = additionalSOLibSearchPath;
else
this.AdditionalSOLibSearchPath = string.Concat(this.AdditionalSOLibSearchPath, ";", additionalSOLibSearchPath);
}
if (string.IsNullOrEmpty(this.AbsolutePrefixSOLibSearchPath))
this.AbsolutePrefixSOLibSearchPath = source.AbsolutePrefixSOLibSearchPath;
if (source.DebugChildProcessesSpecified)
{
this.DebugChildProcesses = source.DebugChildProcesses;
}
if (source.ProcessIdSpecified)
{
this.ProcessId = source.ProcessId;
}
this.CoreDumpPath = source.CoreDumpPath;
// Ensure that CoreDumpPath and ProcessId are not specified at the same time
if (!String.IsNullOrEmpty(source.CoreDumpPath) && source.ProcessIdSpecified)
throw new InvalidLaunchOptionsException(String.Format(CultureInfo.InvariantCulture, MICoreResources.Error_CannotSpecifyBoth, nameof(source.CoreDumpPath), nameof(source.ProcessId)));
if (source.SymbolLoadInfo != null)
{
SymbolInfoLoadAll = source.SymbolLoadInfo.LoadAllSpecified ? source.SymbolLoadInfo.LoadAll : true;
if (DebuggerMIMode == MIMode.Lldb && !string.IsNullOrWhiteSpace(source.SymbolLoadInfo.ExceptionList))
{
throw new InvalidLaunchOptionsException(String.Format(CultureInfo.InvariantCulture, MICoreResources.Error_OptionNotSupported, nameof(source.SymbolLoadInfo.ExceptionList), nameof(MIMode.Lldb)));
}
SymbolInfoExceptionList.SetTo(source.SymbolLoadInfo.ExceptionList == null ? new string[0] : source.SymbolLoadInfo.ExceptionList.Split(';'));
// Ensure that symbol loading options are consistent
if (!WaitDynamicLibLoad && !SymbolInfoExceptionList.IsEmpty)
{
throw new InvalidLaunchOptionsException(MICoreResources.Error_InvalidSymbolInfo);
}
}
this.Environment = new ReadOnlyCollection<EnvironmentEntry>(GetEnvironmentEntries(source.Environment));
}