diff --git a/build/version.settings.targets b/build/version.settings.targets
index 7f0008e95..f606a565b 100644
--- a/build/version.settings.targets
+++ b/build/version.settings.targets
@@ -3,8 +3,8 @@
17
- 4
- 2020
+ 8
+ 2022
14.0.0.0
diff --git a/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs b/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs
index 6b9632386..4a0335f06 100755
--- a/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs
+++ b/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs
@@ -690,17 +690,11 @@ private async Task> GetInitializeCommands()
LocalLaunchOptions localLaunchOptions = _launchOptions as LocalLaunchOptions;
if (this.IsCoreDump)
{
- // Add executable information
- this.AddExecutablePathCommand(commands);
+ // Load executable and core dump
+ this.AddExecutableAndCorePathCommand(commands);
- // Important: this must occur after file-exec-and-symbols but before anything else.
+ // Important: this must occur after executable load but before anything else.
this.AddGetTargetArchitectureCommand(commands);
-
- // Add core dump information (linux/mac does not support quotes around this path but spaces in the path do work)
- string coreDump = this.UseUnixPathSeparators ? _launchOptions.CoreDumpPath : this.EnsureProperPathSeparators(_launchOptions.CoreDumpPath, true);
- string coreDumpCommand = _launchOptions.DebuggerMIMode == MIMode.Lldb ? String.Concat("target create --core ", coreDump) : String.Concat("-target-select core ", coreDump);
- string coreDumpDescription = String.Format(CultureInfo.CurrentCulture, ResourceStrings.LoadingCoreDumpMessage, _launchOptions.CoreDumpPath);
- commands.Add(new LaunchCommand(coreDumpCommand, coreDumpDescription, ignoreFailures: false));
}
else if (_launchOptions.ProcessId.HasValue)
{
@@ -918,6 +912,30 @@ private void AddExecutablePathCommand(IList commands)
commands.Add(new LaunchCommand("-file-exec-and-symbols " + exe, description, ignoreFailures: false, failureHandler: failureHandler));
}
+ private void AddExecutableAndCorePathCommand(IList commands)
+ {
+ string command;
+ if (_launchOptions.DebuggerMIMode == MIMode.Lldb)
+ {
+ // LLDB requires loading the executable and the core into the same target, using one command. Quotes in the path are supported.
+ string exePath = this.EnsureProperPathSeparators(_launchOptions.ExePath, true);
+ string corePath = this.EnsureProperPathSeparators(_launchOptions.CoreDumpPath, true);
+ command = String.Concat("file ", exePath, " -c ", corePath);
+ }
+ else
+ {
+ // GDB requires loading the executable and core separately.
+ // Note: Linux/mac do not support quotes around this path, but spaces in the path do work.
+ this.AddExecutablePathCommand(commands);
+ string corePathNoQuotes = this.EnsureProperPathSeparators(_launchOptions.CoreDumpPath, true, true);
+ command = String.Concat("-target-select core ", corePathNoQuotes);
+ }
+
+ // Load core dump information
+ string description = String.Format(CultureInfo.CurrentCulture, ResourceStrings.LoadingCoreDumpMessage, _launchOptions.CoreDumpPath);
+ commands.Add(new LaunchCommand(command, description, ignoreFailures: false));
+ }
+
private void DetermineAndAddExecutablePathCommand(IList commands, UnixShellPortLaunchOptions launchOptions)
{
// TODO: connecting to OSX via SSH doesn't work yet. Show error after connection manager dialog gets dismissed.
diff --git a/src/SSHDebugPS/AD7/AD7Process.cs b/src/SSHDebugPS/AD7/AD7Process.cs
index 09c275867..9675a393b 100644
--- a/src/SSHDebugPS/AD7/AD7Process.cs
+++ b/src/SSHDebugPS/AD7/AD7Process.cs
@@ -25,7 +25,7 @@ internal class AD7Process : IDebugProcess2, IDebugProcessSecurity2, IDebugProces
///
/// Flags are only used in ps command scenarios. It will be set to 0 for others.
///
- private readonly uint _flags;
+ private readonly uint? _flags;
///
/// Returns true if _commandLine appears to hold a real file name + args rather than just a description
@@ -297,7 +297,7 @@ string IDebugUnixProcess.GetProcessArchitecture()
{
// For Apple Silicon M1, it is possible that the process we are attaching to is being emulated as x86_64.
// The process is emulated if it has process flags has P_TRANSLATED (0x20000).
- if (_port.IsOSX() && _systemArch == "arm64")
+ if (_port.IsOSX() && _systemArch == "arm64" && _flags.HasValue)
{
if ((_flags & 0x20000) != 0)
{
diff --git a/src/SSHDebugPS/IConnection.cs b/src/SSHDebugPS/IConnection.cs
index 27c4e48ca..36b694d76 100644
--- a/src/SSHDebugPS/IConnection.cs
+++ b/src/SSHDebugPS/IConnection.cs
@@ -1,7 +1,9 @@
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Threading;
using Microsoft.DebugEngineHost;
using Microsoft.SSHDebugPS.Utilities;
@@ -104,13 +106,13 @@ public class Process
///
/// Only used by the PSOutputParser
///
- public uint Flags { get; private set; }
+ public uint? Flags { get; private set; }
public string SystemArch { get; private set; }
public string CommandLine { get; private set; }
public string UserName { get; private set; }
public bool IsSameUser { get; private set; }
- public Process(uint id, string arch, uint flags, string userName, string commandLine, bool isSameUser)
+ public Process(uint id, string arch, uint? flags, string userName, string commandLine, bool isSameUser)
{
this.Id = id;
this.Flags = flags;
@@ -121,15 +123,37 @@ public Process(uint id, string arch, uint flags, string userName, string command
}
}
+ internal static class OperatingSystemStringConverter
+ {
+ internal static PlatformID ConvertToPlatformID(string value)
+ {
+ if (!string.IsNullOrEmpty(value))
+ {
+ value = value.ToLowerInvariant();
+ if (value.Contains("darwin"))
+ {
+ return PlatformID.MacOSX;
+ } else if (value.Contains("linux"))
+ {
+ return PlatformID.Unix;
+ }
+ }
+ Debug.Fail($"Expected a valid platform '{value}' of darwin or linux, but falling back to linux.");
+ return PlatformID.Unix;
+ }
+ }
+
internal class SystemInformation
{
public string UserName { get; private set; }
public string Architecture { get; private set; }
+ public PlatformID Platform { get; private set; }
- public SystemInformation(string username, string architecture)
+ public SystemInformation(string username, string architecture, PlatformID platform)
{
this.UserName = username;
this.Architecture = architecture;
+ Platform = platform;
}
}
}
\ No newline at end of file
diff --git a/src/SSHDebugPS/PSOutputParser.cs b/src/SSHDebugPS/PSOutputParser.cs
index 15fac8a71..d3255f18b 100644
--- a/src/SSHDebugPS/PSOutputParser.cs
+++ b/src/SSHDebugPS/PSOutputParser.cs
@@ -59,28 +59,27 @@ public string Extract(string line)
// Use padding to expand column width. 10 for pid and 32 for userid as that is the max size for each
// Tested this format with different distributions of Linux and container distributions. This command (and the alternative without the flags) seems
// to be the one that works the best between standard *nix and BusyBox implementations of ps.
- private const string PSCommandLineFormat = "ps{0}-o pid=pppppppppp -o flags=ffffffff -o ruser=rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -o args";
+ private const string PSCommandLineFormat = "ps{0}-o pid=pppppppppp{1} -o ruser=rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -o args";
private SystemInformation _currentSystemInformation;
private ColumnDef _pidCol;
private ColumnDef _flagsCol;
private ColumnDef _ruserCol;
private ColumnDef _argsCol;
- public static string PSCommandLine = PSCommandLineFormat.FormatInvariantWithArgs(" axww ");
- public static string AltPSCommandLine = PSCommandLineFormat.FormatInvariantWithArgs(" ");
+ // In order to determine the architecture of a process, we need to run the ps command with 'flags'.
+ // However, certain of distros of Linux do not support flags, so only add this for macOS.
+ private string PSFlagFormat => _currentSystemInformation.Platform == PlatformID.MacOSX ? " -o flags=ffffffff" : string.Empty;
- public static List Parse(string output, SystemInformation systemInformation)
- {
- return new PSOutputParser().ParseInternal(output, systemInformation);
- }
+ public string PSCommandLine => PSCommandLineFormat.FormatInvariantWithArgs(" axww ", PSFlagFormat);
+ public string AltPSCommandLine => PSCommandLineFormat.FormatInvariantWithArgs(" ", PSFlagFormat);
- private PSOutputParser()
+ public PSOutputParser(SystemInformation systemInformation)
{
+ _currentSystemInformation = systemInformation;
}
- private List ParseInternal(string output, SystemInformation systemInformation)
+ public List Parse(string output)
{
- _currentSystemInformation = systemInformation;
List processList = new List();
using (var reader = new StringReader(output))
@@ -136,14 +135,18 @@ private bool ProcessHeaderLine(/*OPTIONAL*/ string headerLine)
if (!SkipNonWhitespace(headerLine, ref index))
return false;
- _flagsCol = new ColumnDef(colStart, index);
+ /// on why this is only executed for macOS.
+ if (_currentSystemInformation.Platform == PlatformID.MacOSX)
+ {
+ _flagsCol = new ColumnDef(colStart, index);
- if (!SkipWhitespace(headerLine, ref index))
- return false;
+ if (!SkipWhitespace(headerLine, ref index))
+ return false;
- colStart = index;
- if (!SkipNonWhitespace(headerLine, ref index))
- return false;
+ colStart = index;
+ if (!SkipNonWhitespace(headerLine, ref index))
+ return false;
+ }
_ruserCol = new ColumnDef(colStart, index);
@@ -170,10 +173,15 @@ private Process SplitPSLine(string line)
if (!uint.TryParse(pidText, NumberStyles.None, CultureInfo.InvariantCulture, out pid))
return null;
- uint flags;
- string flagsText = _flagsCol.Extract(line);
- if (!uint.TryParse(flagsText, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags))
- return null;
+ uint? flags = null;
+ /// on why this is only executed for macOS.
+ if (_currentSystemInformation.Platform == PlatformID.MacOSX)
+ {
+ string flagsText = _flagsCol.Extract(line);
+ if (!uint.TryParse(flagsText, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out uint tempFlags))
+ return null;
+ flags = tempFlags;
+ }
string ruser = _ruserCol.Extract(line);
string commandLine = _argsCol.Extract(line);
diff --git a/src/SSHDebugPS/PipeConnection.cs b/src/SSHDebugPS/PipeConnection.cs
index 94f5ca7ac..ee08786cc 100644
--- a/src/SSHDebugPS/PipeConnection.cs
+++ b/src/SSHDebugPS/PipeConnection.cs
@@ -98,8 +98,8 @@ public override bool IsLinux()
/// SystemInformation containing username and architecture. If it was unable to obtain any of these, the value will be set to string.Empty.
public SystemInformation GetSystemInformation()
{
- string commandOutput;
- string errorMessage;
+ string commandOutput = string.Empty;
+ string errorMessage = string.Empty;
int exitCode;
string username = string.Empty;
@@ -108,13 +108,19 @@ public SystemInformation GetSystemInformation()
username = commandOutput;
}
+ string platform = string.Empty;
+ if (ExecuteCommand("uname", Timeout.Infinite, commandOutput: out commandOutput, errorMessage: out errorMessage, exitCode: out exitCode))
+ {
+ platform = commandOutput;
+ }
+
string architecture = string.Empty;
if (ExecuteCommand("uname -m", Timeout.Infinite, commandOutput: out commandOutput, errorMessage: out errorMessage, exitCode: out exitCode))
{
architecture = commandOutput;
}
- return new SystemInformation(username, architecture);
+ return new SystemInformation(username, architecture, OperatingSystemStringConverter.ConvertToPlatformID(platform));
}
public override List ListProcesses()
@@ -152,12 +158,15 @@ private bool PSListProcess(SystemInformation systemInformation, out string error
errorMessage = string.Empty;
string commandOutput;
int exitCode;
- if (!ExecuteCommand(PSOutputParser.PSCommandLine, Timeout.Infinite, out commandOutput, out errorMessage, out exitCode))
+
+ PSOutputParser psOutputParser = new PSOutputParser(systemInformation);
+
+ if (!ExecuteCommand(psOutputParser.PSCommandLine, Timeout.Infinite, out commandOutput, out errorMessage, out exitCode))
{
// Clear output and errorMessage
commandOutput = string.Empty;
errorMessage = string.Empty;
- if (!ExecuteCommand(PSOutputParser.AltPSCommandLine, Timeout.Infinite, out commandOutput, out errorMessage, out exitCode))
+ if (!ExecuteCommand(psOutputParser.AltPSCommandLine, Timeout.Infinite, out commandOutput, out errorMessage, out exitCode))
{
if (exitCode == 127)
{
@@ -174,7 +183,7 @@ private bool PSListProcess(SystemInformation systemInformation, out string error
}
}
- processes = PSOutputParser.Parse(commandOutput, systemInformation);
+ processes = psOutputParser.Parse(commandOutput);
return true;
}
diff --git a/src/SSHDebugPS/SSH/SSHConnection.cs b/src/SSHDebugPS/SSH/SSHConnection.cs
index 56b5f4907..e084b510b 100644
--- a/src/SSHDebugPS/SSH/SSHConnection.cs
+++ b/src/SSHDebugPS/SSH/SSHConnection.cs
@@ -52,6 +52,13 @@ public override List ListProcesses()
username = usernameCommand.Output.TrimEnd('\n', '\r'); // trim line endings because 'id' command ends with a newline
}
+ string operatingSystem = string.Empty;
+ var operatingSystemCommand = _remoteSystem.Shell.ExecuteCommand("uname", Timeout.InfiniteTimeSpan);
+ if (operatingSystemCommand.ExitCode == 0)
+ {
+ operatingSystem = operatingSystemCommand.Output.TrimEnd('\n', '\r'); // trim line endings because 'uname' command ends with a newline
+ }
+
string architecture = string.Empty;
var architectureCommand = _remoteSystem.Shell.ExecuteCommand("uname -m", Timeout.InfiniteTimeSpan);
if (architectureCommand.ExitCode == 0)
@@ -59,15 +66,17 @@ public override List ListProcesses()
architecture = architectureCommand.Output.TrimEnd('\n', '\r'); // trim line endings because 'uname -m' command ends with a newline
}
- SystemInformation systemInformation = new SystemInformation(username, architecture);
+ SystemInformation systemInformation = new SystemInformation(username, architecture, OperatingSystemStringConverter.ConvertToPlatformID(operatingSystem));
+
+ PSOutputParser psOutputParser = new PSOutputParser(systemInformation);
- var command = _remoteSystem.Shell.ExecuteCommand(PSOutputParser.PSCommandLine, Timeout.InfiniteTimeSpan);
+ var command = _remoteSystem.Shell.ExecuteCommand(psOutputParser.PSCommandLine, Timeout.InfiniteTimeSpan);
if (command.ExitCode != 0)
{
throw new CommandFailedException(StringResources.Error_PSFailed);
}
- return PSOutputParser.Parse(command.Output, systemInformation);
+ return psOutputParser.Parse(command.Output);
}
///
diff --git a/src/SSHDebugTests/PSOutputParserTests.cs b/src/SSHDebugTests/PSOutputParserTests.cs
index bfd74a129..819bcd3cd 100644
--- a/src/SSHDebugTests/PSOutputParserTests.cs
+++ b/src/SSHDebugTests/PSOutputParserTests.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+using System;
using Microsoft.SSHDebugPS;
using System.Collections.Generic;
using Xunit;
@@ -9,6 +10,29 @@ namespace SSHDebugTests
{
public class PSOutputParserTests
{
+ [Fact]
+ public void PSOutputParser_macOS()
+ {
+ const string username = "username";
+ const string architecture = "x86_64";
+ const string input =
+ "pppppppppp ffffffff rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ARGS\n" +
+ "1 4004 root /sbin/launchd\n" +
+ "50 1004004 root /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd\n" +
+ "70 1004004 root /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds\n" +
+ "83 4004 _timed /usr/libexec/timed\n" +
+ "96 80004104 root /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow console\n" +
+ "7835 4104 username ps axww -o pid=pppppppppp -o flags=ffffffff -o ruser=rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -o args\n";
+
+ PSOutputParser psOutputParser = new PSOutputParser(new SystemInformation(username, architecture, PlatformID.MacOSX));
+ List r = psOutputParser.Parse(input);
+ Assert.Equal(5, r.Count);
+ // Testing flags here as PID USER ARGS are tested in the other tests.
+ Assert.Equal(r[0].Flags.Value, (uint)0x4004);
+ Assert.Equal(r[1].Flags.Value, (uint)0x1004004);
+ Assert.Equal(r[4].Flags.Value, (uint)0x80004104);
+ }
+
[Fact]
public void PSOutputParser_Ubuntu14()
{
@@ -16,15 +40,16 @@ public void PSOutputParser_Ubuntu14()
const string architecture = "x86_64";
// example output from ps on a real Ubuntu 14 machine (with many processes removed):
const string input =
- "pppppppppp ffffffff rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr COMMAND\n" +
- " 1 0 root /sbin/init\n" +
- " 2 0 root [kthreadd]\n" +
- " 720 0 message+ dbus-daemon --system --fork\n" +
- " 2389 0 greggm -bash\n" +
- " 2580 0 root /sbin/dhclient -d -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /run/sendsigs.omit.d/network-manager.dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-d08a482b-ff90-4007-9b13-6500eb94b673-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0\n" +
- " 2913 0 greggm ps axww -o pid=pppppppppp -o flags=ffffffff -o ruser=rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -o args\n";
+ "pppppppppp rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr COMMAND\n" +
+ " 1 root /sbin/init\n" +
+ " 2 root [kthreadd]\n" +
+ " 720 message+ dbus-daemon --system --fork\n" +
+ " 2389 greggm -bash\n" +
+ " 2580 root /sbin/dhclient -d -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /run/sendsigs.omit.d/network-manager.dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-d08a482b-ff90-4007-9b13-6500eb94b673-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0\n" +
+ " 2913 greggm ps axww -o pid=pppppppppp -o ruser=rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -o args\n";
- List r = PSOutputParser.Parse(input, new SystemInformation(username, architecture));
+ PSOutputParser psOutputParser = new PSOutputParser(new SystemInformation(username, architecture, PlatformID.Unix));
+ List r = psOutputParser.Parse(input);
Assert.Equal(5, r.Count);
uint[] pids = { 1, 2, 720, 2389, 2580 };
@@ -47,10 +72,11 @@ public void PSOutputParser_SmallCol()
const string architecture = "x86_64";
// made up output for what could happen if the fields were all just 1 character in size
const string input =
- "A B C D\n" +
- "9 0 r /sbin/init";
+ "A B C\n" +
+ "9 r /sbin/init";
- List r = PSOutputParser.Parse(input, new SystemInformation(username, architecture));
+ PSOutputParser psOutputParser = new PSOutputParser(new SystemInformation(username, architecture, PlatformID.Unix));
+ List r = psOutputParser.Parse(input);
Assert.Single(r);
Assert.Equal(9, r[0].Id);
Assert.Equal("r", r[0].UserName);
@@ -64,12 +90,13 @@ public void PSOutputParser_NoUserName()
const string username = "";
const string architecture = "";
const string input =
- "pppppppppp ffffffff rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr COMMAND\n" +
- " 1 0 root /sbin/init\n" +
- " 720 0 dbus-daemon --system --fork\n" +
- " 2389 0 greggm -bash\n";
+ "pppppppppp rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr COMMAND\n" +
+ " 1 root /sbin/init\n" +
+ " 720 dbus-daemon --system --fork\n" +
+ " 2389 greggm -bash\n";
- List r = PSOutputParser.Parse(input, new SystemInformation(username, architecture));
+ PSOutputParser psOutputParser = new PSOutputParser(new SystemInformation(username, architecture, PlatformID.Unix));
+ List r = psOutputParser.Parse(input);
Assert.Equal(3, r.Count);
uint[] pids = { 1, 720, 2389 };
diff --git a/test/DebugAdapterRunner/DebugAdapterRunner.cs b/test/DebugAdapterRunner/DebugAdapterRunner.cs
index 1e8921452..2d7315f6e 100644
--- a/test/DebugAdapterRunner/DebugAdapterRunner.cs
+++ b/test/DebugAdapterRunner/DebugAdapterRunner.cs
@@ -56,6 +56,8 @@ public class DebugAdapterRunner
private IDictionary _callbackHandlers = new Dictionary();
+ private static readonly Encoding s_utf8NoBOM = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false);
+
// Current list of responses received from the debug adapter
public List Responses { get; private set; }
@@ -155,7 +157,9 @@ private void StartDebugAdapter(
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
- startInfo.RedirectStandardError = true;
+ startInfo.RedirectStandardError = true;
+ startInfo.StandardOutputEncoding = s_utf8NoBOM;
+ startInfo.StandardInputEncoding = s_utf8NoBOM;
if (redirectVSAssert)
{
diff --git a/tools/Setup.csx b/tools/Setup.csx
index 832030bac..807d4dda9 100644
--- a/tools/Setup.csx
+++ b/tools/Setup.csx
@@ -195,15 +195,14 @@ class Setup {
{
vscodeExtensionPath = Path.Join(Environment.GetEnvironmentVariable("HOME"), ".vscode/extensions");
}
- IEnumerable extensions = Directory.EnumerateDirectories(vscodeExtensionPath);
-
- foreach (string extension in extensions)
+ IEnumerable extensions = Directory.EnumerateDirectories(vscodeExtensionPath).Where(extension => extension.Contains("ms-vscode.cpptools"));
+ if (extensions.Any())
{
- if (extension.Contains("ms-vscode.cpptools"))
- {
- TargetPath = extension;
- break;
- }
+ TargetPath = extensions.First();
+ }
+ else
+ {
+ throw new InvalidOperationException("Unable to find an installation of VS Code C++ Extension.");
}
}
}
@@ -217,7 +216,7 @@ class Setup {
if (Client == Client.VS)
{
- listFilePath = Path.Join(scriptDirectoryPath, "VS.CodeSpaces.list");
+ listFilePath = Path.Join(scriptDirectoryPath, "VS.list");
// Use folder.
binDirectoryPath = Path.Join(binDirectoryPath, Configuration.ToString());
}
@@ -225,13 +224,12 @@ class Setup {
{
listFilePath = Path.Join(scriptDirectoryPath, "VSCode.list");
// Use Desktop. folder.
- binDirectoryPath = Path.Join(binDirectoryPath, "Desktop." + Configuration.ToString());
+ binDirectoryPath = Path.Join(binDirectoryPath, Configuration.ToString());
}
if (!Directory.Exists(binDirectoryPath))
{
- string configurationToUse = Client == Client.VS ? Configuration.ToString() : "Desktop." + Configuration.ToString();
- throw new InvalidOperationException(string.Format("'{0}' does not exist. Did you build {1}?", binDirectoryPath, configurationToUse));
+ throw new InvalidOperationException(string.Format("'{0}' does not exist. Did you build {1}?", binDirectoryPath, Configuration.ToString()));
}
IList lffList = this.ParseListFiles(listFilePath);
diff --git a/tools/VS.CodeSpaces.list b/tools/VS.CodeSpaces.list
deleted file mode 100644
index e90f8618f..000000000
--- a/tools/VS.CodeSpaces.list
+++ /dev/null
@@ -1,8 +0,0 @@
-# filename,source-root,source-dir,install-dir
-# Where 'source-root' is either 'src', or 'bin'
-Microsoft.MICore.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
-Microsoft.MIDebugEngine.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
-OpenDebugAD7.exe,bin,vscode,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger\vscode
-Microsoft.DebugEngineHost.dll,bin,vscode,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger\vscode
-Microsoft.VisualStudio.Shared.VSCodeDebugProtocol.dll,bin,vscode,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger\vscode
-cppdbg.ad7Engine.json,src,OpenDebugAD7,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger\vscode
\ No newline at end of file
diff --git a/tools/VS.list b/tools/VS.list
new file mode 100644
index 000000000..3106e302b
--- /dev/null
+++ b/tools/VS.list
@@ -0,0 +1,16 @@
+# filename,source-root,source-dir,install-dir
+# Where 'source-root' is either 'src', or 'bin'
+Microsoft.Android.natvis,src,AndroidDebugLauncher,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.AndroidDebugLauncher.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.AndroidDebugLauncher.pkgdef,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.DebugEngineHost.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.IOSDebugLauncher.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.IOSDebugLauncher.pkgdef,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.JDbg.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.MICore.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.MICore.XmlSerializers.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.MIDebugEngine.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.MIDebugEngine.pkgdef,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.SSHDebugPS.dll,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+Microsoft.SSHDebugPS.pkgdef,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
+OpenFolderSchema.json,bin,,\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger
\ No newline at end of file