From 0001c44c57194f588105890c7df0916155ee0d32 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Fri, 13 Aug 2021 15:32:03 -0700 Subject: [PATCH 1/8] Fix `supportsDisassembleRequest` capabilities (#1195) supportsDisassembleRequest was always set to `true`. However, it depends on `GetMemoryContext` which uses IDebugMemoryDAP interfaces. --- src/OpenDebugAD7/AD7DebugSession.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenDebugAD7/AD7DebugSession.cs b/src/OpenDebugAD7/AD7DebugSession.cs index e01611c36..648b90807 100644 --- a/src/OpenDebugAD7/AD7DebugSession.cs +++ b/src/OpenDebugAD7/AD7DebugSession.cs @@ -822,7 +822,7 @@ protected override void HandleInitializeRequestAsync(IRequestResponder Date: Fri, 13 Aug 2021 16:16:18 -0700 Subject: [PATCH 2/8] Publish win-x86 and remove prefer32bit (#1198) * Publish win-x86 and remove prefer32bit Remove win7-x86 and win-x64 publish and only publish win-x86 since OpenDebugAD7 will just run as 32-bit. * Add SignPublishedFiles Target This target will sign the published folder's OpenDebugAD7.dll and OpenDebugAD7.exe --- eng/pipelines/steps/PublishOpenDebugAD7.yml | 15 ++++++-- .../templates/VSCode-release.template.yml | 2 +- .../DebugEngineHost.VSCode.csproj | 1 - src/MICore/MICore.csproj | 1 - src/MIDebugEngine/MIDebugEngine.csproj | 1 - src/OpenDebugAD7/OpenDebugAD7.csproj | 38 ++++++++++++++++++- 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/eng/pipelines/steps/PublishOpenDebugAD7.yml b/eng/pipelines/steps/PublishOpenDebugAD7.yml index b8443b7d9..04432b05e 100644 --- a/eng/pipelines/steps/PublishOpenDebugAD7.yml +++ b/eng/pipelines/steps/PublishOpenDebugAD7.yml @@ -12,12 +12,21 @@ steps: copy ${{ parameters.SignedBinariesFolder }}\Release\Microsoft.MICore.dll $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. displayName: "Publish OpenDebugAD7 ${{ parameters.RuntimeID }}" -# Windows Steps for copying over OpenDebugAD7.exe, WindowsDebugLauncher.exe, and verify the windows binaries. +# Windows Steps for signing OpenDebugAD7.exe, copying over WindowsDebugLauncher.exe, and verify the windows binaries. - ${{ if startsWith(parameters.RuntimeID, 'win') }}: + - template: ../tasks/MSBuild.yml + parameters: + DisplayName: "Sign OpenDebugAD7.exe" + solution: $(Build.SourcesDirectory)\src\OpenDebugAD7\OpenDebugAD7.csproj + configuration: ${{ parameters.Configuration }} + msbuildArguments: '/t:SignPublishedFiles /p:PublishPath=$(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin' + env: { + "SIGN_TYPE": "$(SignType)" + } + - script: | - copy ${{ parameters.SignedBinariesFolder }}\Release\vscode\OpenDebugAD7.exe $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. copy ${{ parameters.SignedBinariesFolder }}\Release\vscode\WindowsDebugLauncher.exe $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. - displayName: "Copy OpenDebugAD7.exe and WindowsDebugLauncher.exe" + displayName: "Copy WindowsDebugLauncher.exe" - template: ../tasks/SignVerify.yml parameters: diff --git a/eng/pipelines/templates/VSCode-release.template.yml b/eng/pipelines/templates/VSCode-release.template.yml index bd2a14aef..ef363919e 100644 --- a/eng/pipelines/templates/VSCode-release.template.yml +++ b/eng/pipelines/templates/VSCode-release.template.yml @@ -1,6 +1,6 @@ --- parameters: - rids: ["win7-x86", "win-x64", "win10-arm64", "osx-x64", "linux-x64", "linux-arm", "linux-arm64", "linux-musl-x64" ] + rids: ["win-x86", "win10-arm64", "osx-x64", "linux-x64", "linux-arm", "linux-arm64", "linux-musl-x64" ] steps: - checkout: self diff --git a/src/DebugEngineHost.VSCode/DebugEngineHost.VSCode.csproj b/src/DebugEngineHost.VSCode/DebugEngineHost.VSCode.csproj index b6363ce86..8a7047f53 100644 --- a/src/DebugEngineHost.VSCode/DebugEngineHost.VSCode.csproj +++ b/src/DebugEngineHost.VSCode/DebugEngineHost.VSCode.csproj @@ -18,7 +18,6 @@ $(MIDefaultOutputPath)\vscode vscode netstandard2.0 - false diff --git a/src/MICore/MICore.csproj b/src/MICore/MICore.csproj index 6365ae1c1..504877f49 100755 --- a/src/MICore/MICore.csproj +++ b/src/MICore/MICore.csproj @@ -17,7 +17,6 @@ would take a fair amount of work.--> $(NoWarn);1591 netstandard2.0 - false diff --git a/src/MIDebugEngine/MIDebugEngine.csproj b/src/MIDebugEngine/MIDebugEngine.csproj index f47b41d54..667e33919 100755 --- a/src/MIDebugEngine/MIDebugEngine.csproj +++ b/src/MIDebugEngine/MIDebugEngine.csproj @@ -12,7 +12,6 @@ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} $(MIDefaultOutputPath) netstandard2.0 - false diff --git a/src/OpenDebugAD7/OpenDebugAD7.csproj b/src/OpenDebugAD7/OpenDebugAD7.csproj index 05a235164..432aeb2ee 100644 --- a/src/OpenDebugAD7/OpenDebugAD7.csproj +++ b/src/OpenDebugAD7/OpenDebugAD7.csproj @@ -15,7 +15,6 @@ Exe vscode net5.0 - false @@ -90,4 +88,40 @@ Exe + + + + + + + + + + + + + + Microsoft400 + StrongNameSHA2 + + + + + + + Microsoft400 + + + + + \ No newline at end of file From 3f1c642371debaac2fa26146ae654da309b04bd7 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Mon, 16 Aug 2021 09:12:56 -0700 Subject: [PATCH 3/8] Add support for `SupportsInstructionBreakpoints` (#1192) * Add support for SetInstructionBreakpointsRequest --- src/DebugEngineHost.VSCode/HostMarshal.cs | 25 +-- src/OpenDebugAD7/AD7DebugSession.cs | 197 +++++++++++++++++- .../AD7Impl/AD7BreakPointRequest.cs | 23 ++ src/OpenDebugAD7/AD7Resources.Designer.cs | 11 +- src/OpenDebugAD7/AD7Resources.resx | 3 + test/CppTests/Tests/MemoryTests.cs | 127 +++++++++++ .../OpenDebug/Commands/DisassembleCommand.cs | 34 +++ .../OpenDebug/Commands/ReadMemoryCommand.cs | 29 +++ .../Responses/DisassembleResponseValue.cs | 45 ++++ .../Responses/ReadMemoryResponseValue.cs | 23 ++ .../Responses/StackTraceResponseValue.cs | 3 + .../SetInstructionBreakpointCommand.cs | 98 +++++++++ .../OpenDebug/Events/StoppedEvent.cs | 21 +- .../Extensions/DebuggerRunnerExtensions.cs | 62 ++++++ .../OpenDebug/Extensions/FrameInspector.cs | 13 +- .../OpenDebug/Extensions/IInspectors.cs | 3 + .../OpenDebug/Extensions/ThreadInspector.cs | 3 +- test/DebuggerTesting/OpenDebug/RunBuilder.cs | 17 ++ 18 files changed, 708 insertions(+), 29 deletions(-) create mode 100644 test/CppTests/Tests/MemoryTests.cs create mode 100644 test/DebuggerTesting/OpenDebug/Commands/DisassembleCommand.cs create mode 100644 test/DebuggerTesting/OpenDebug/Commands/ReadMemoryCommand.cs create mode 100644 test/DebuggerTesting/OpenDebug/Commands/Responses/DisassembleResponseValue.cs create mode 100644 test/DebuggerTesting/OpenDebug/Commands/Responses/ReadMemoryResponseValue.cs create mode 100644 test/DebuggerTesting/OpenDebug/Commands/SetInstructionBreakpointCommand.cs diff --git a/src/DebugEngineHost.VSCode/HostMarshal.cs b/src/DebugEngineHost.VSCode/HostMarshal.cs index c032b4503..f6a243124 100644 --- a/src/DebugEngineHost.VSCode/HostMarshal.cs +++ b/src/DebugEngineHost.VSCode/HostMarshal.cs @@ -75,20 +75,6 @@ public static void ReleaseCodeContextId(IntPtr codeContextId) } } - public static IDebugCodeContext2 GetCodeContextForIntPtr(IntPtr codeContextId) - { - lock (s_codeContexts) - { - IDebugCodeContext2 codeContext; - if (!s_codeContexts.TryGet(codeContextId.ToInt32(), out codeContext)) - { - throw new ArgumentOutOfRangeException(nameof(codeContextId)); - } - - return codeContext; - } - } - public static IDebugDocumentPosition2 GetDocumentPositionForIntPtr(IntPtr documentPositionId) { lock (s_documentPositions) @@ -145,7 +131,16 @@ public static IntPtr GetIntPtrForDataBreakpointAddress(string address) /// code context object public static IDebugCodeContext2 GetDebugCodeContextForIntPtr(IntPtr contextId) { - throw new NotImplementedException(); + lock (s_codeContexts) + { + IDebugCodeContext2 codeContext; + if (!s_codeContexts.TryGet(contextId.ToInt32(), out codeContext)) + { + throw new ArgumentOutOfRangeException(nameof(contextId)); + } + + return codeContext; + } } public static IDebugEventCallback2 GetThreadSafeEventCallback(IDebugEventCallback2 ad7Callback) diff --git a/src/OpenDebugAD7/AD7DebugSession.cs b/src/OpenDebugAD7/AD7DebugSession.cs index 648b90807..92bdb195b 100644 --- a/src/OpenDebugAD7/AD7DebugSession.cs +++ b/src/OpenDebugAD7/AD7DebugSession.cs @@ -50,6 +50,7 @@ internal sealed class AD7DebugSession : DebugAdapterBase, IDebugPortNotify2, IDe private int m_nextContextId = 1; private Dictionary m_functionBreakpoints; + private Dictionary m_instructionBreakpoints; private readonly HandleCollection m_frameHandles; private IDebugProgram2 m_program; @@ -119,6 +120,7 @@ public AD7DebugSession(Stream debugAdapterStdIn, Stream debugAdapterStdOut, List m_frameHandles = new HandleCollection(); m_breakpoints = new Dictionary>(); m_functionBreakpoints = new Dictionary(); + m_instructionBreakpoints = new Dictionary(); m_variableManager = new VariableManager(); } @@ -307,6 +309,49 @@ ppBPRequest is AD7BreakPointRequest ad7BreakpointRequest && return tracepoints; } + public StoppedEvent.ReasonValue GetStoppedEventReason(IDebugBreakpointEvent2 breakpointEvent) + { + StoppedEvent.ReasonValue reason = StoppedEvent.ReasonValue.Breakpoint; + + if (breakpointEvent != null) + { + if (breakpointEvent.EnumBreakpoints(out IEnumDebugBoundBreakpoints2 enumBreakpoints) == HRConstants.S_OK && + enumBreakpoints.GetCount(out uint bpCount) == HRConstants.S_OK && + bpCount > 0) + { + + bool allInstructionBreakpoints = true; + + IDebugBoundBreakpoint2[] boundBp = new IDebugBoundBreakpoint2[1]; + uint fetched = 0; + while (enumBreakpoints.Next(1, boundBp, ref fetched) == HRConstants.S_OK) + { + + if (boundBp[0].GetPendingBreakpoint(out IDebugPendingBreakpoint2 pendingBreakpoint) == HRConstants.S_OK) + { + if (pendingBreakpoint.GetBreakpointRequest(out IDebugBreakpointRequest2 breakpointRequest) == HRConstants.S_OK) + { + AD7BreakPointRequest request = breakpointRequest as AD7BreakPointRequest; + + if (breakpointRequest != null && request.MemoryContext == null) + { + allInstructionBreakpoints = false; + break; + } + } + } + } + + if (allInstructionBreakpoints) + { + reason = StoppedEvent.ReasonValue.InstructionBreakpoint; + } + } + } + + return reason; + } + private static long FileTimeToPosix(FILETIME ft) { long date = ((long)ft.dwHighDateTime << 32) + ft.dwLowDateTime; @@ -318,9 +363,9 @@ private static long FileTimeToPosix(FILETIME ft) return date / 10000000; } - private int GetMemoryContext(string memoryReference, int? offset, out IDebugMemoryContext2 memoryContext, out ulong address) + private ulong ResolveInstructionReference(string memoryReference, int? offset) { - memoryContext = null; + ulong address; if (memoryReference.StartsWith("0x", StringComparison.Ordinal)) { @@ -343,6 +388,15 @@ private int GetMemoryContext(string memoryReference, int? offset, out IDebugMemo } } + return address; + } + + private int GetMemoryContext(string memoryReference, int? offset, out IDebugMemoryContext2 memoryContext, out ulong address) + { + memoryContext = null; + + address = ResolveInstructionReference(memoryReference, offset); + int hr = HRConstants.E_NOTIMPL; // Engine does not support IDebugMemoryBytesDAP if (m_engine is IDebugMemoryBytesDAP debugMemoryBytesDAPEngine) @@ -413,11 +467,12 @@ internal void FireStoppedEvent(IDebugThread2 thread, StoppedEvent.ReasonValue re Protocol.SendEvent(new OpenDebugStoppedEvent() { Reason = reason, + Text = text, + ThreadId = thread.Id(), + // Additional Breakpoint Information for Testing/Logging Source = textPosition.Source, Line = textPosition.Line, Column = textPosition.Column, - Text = text, - ThreadId = thread.Id() }); }); @@ -492,7 +547,7 @@ private static IEnumerable GetBoundBreakpoints(IDebugBre IDebugCodeContext2 codeContext; try { - codeContext = HostMarshal.GetCodeContextForIntPtr(location.unionmember1); + codeContext = HostMarshal.GetDebugCodeContextForIntPtr(location.unionmember1); HostMarshal.ReleaseCodeContextId(location.unionmember1); location.unionmember1 = IntPtr.Zero; } @@ -825,6 +880,7 @@ protected override void HandleInitializeRequestAsync(IRequestResponder responder) + { + if (responder.Arguments.Breakpoints == null) + { + responder.SetError(new ProtocolException("HandleSetInstructionBreakpointsRequest failed: Missing 'breakpoints'.")); + return; + } + + ErrorBuilder eb = new ErrorBuilder(() => AD7Resources.Error_UnableToSetInstructionBreakpoint); + + SetInstructionBreakpointsResponse response = new SetInstructionBreakpointsResponse(); + + List breakpoints = responder.Arguments.Breakpoints; + Dictionary newBreakpoints = new Dictionary(); + try + { + HashSet requestAddresses = responder.Arguments.Breakpoints.Select(x => ResolveInstructionReference(x.InstructionReference, x.Offset)).ToHashSet(); + + foreach (KeyValuePair b in m_instructionBreakpoints) + { + if (requestAddresses.Contains(b.Key)) + { + newBreakpoints[b.Key] = b.Value; // breakpoint still in new list + } + else + { + IDebugPendingBreakpoint2 pendingBp = b.Value; + if (pendingBp != null && + pendingBp.GetBreakpointRequest(out IDebugBreakpointRequest2 request) == HRConstants.S_OK && + request is AD7BreakPointRequest ad7Request) + { + HostMarshal.ReleaseCodeContextId(ad7Request.MemoryContextIntPtr); + } + else + { + Debug.Fail("Why can't we retrieve the MemoryContextIntPtr?"); + } + b.Value.Delete(); // not in new list so delete it + } + } + + foreach (var instructionBp in responder.Arguments.Breakpoints) + { + eb.CheckHR(GetMemoryContext(instructionBp.InstructionReference, instructionBp.Offset, out IDebugMemoryContext2 memoryContext, out ulong address)); + + if (m_instructionBreakpoints.ContainsKey(address)) + { + IDebugBreakpointRequest2 breakpointRequest; + if (m_instructionBreakpoints[address].GetBreakpointRequest(out breakpointRequest) == 0 && + breakpointRequest is AD7BreakPointRequest ad7BPRequest) + { + // Check to see if this breakpoint has a condition that has changed. + if (!StringComparer.Ordinal.Equals(ad7BPRequest.Condition, instructionBp.Condition)) + { + // Condition has been modified. Delete breakpoint so it will be recreated with the updated condition. + var toRemove = m_instructionBreakpoints[address]; + toRemove.Delete(); + m_instructionBreakpoints.Remove(address); + } + else + { + if (ad7BPRequest.BindResult != null) + { + response.Breakpoints.Add(ad7BPRequest.BindResult); + } + else + { + response.Breakpoints.Add(new Breakpoint() + { + Id = (int)ad7BPRequest.Id, + Verified = true, + Line = 0 + }); + + } + continue; + } + } + } + else + { + IDebugPendingBreakpoint2 pendingBp; + AD7BreakPointRequest pBPRequest = new AD7BreakPointRequest(memoryContext); + + eb.CheckHR(m_engine.CreatePendingBreakpoint(pBPRequest, out pendingBp)); + + if (pendingBp != null && pendingBp.Bind() == HRConstants.S_OK) + { + newBreakpoints[address] = pendingBp; + response.Breakpoints.Add(new Breakpoint() + { + Id = (int)pBPRequest.Id, + Verified = true, + Line = 0 + }); // success + } + else + { + response.Breakpoints.Add(new Breakpoint() + { + Id = (int)pBPRequest.Id, + Verified = false, + Line = 0, + Message = string.Format(CultureInfo.CurrentCulture, AD7Resources.Error_UnableToSetInstructionBreakpoint, address) + }); // couldn't create and/or bind + } + } + } + + m_instructionBreakpoints = newBreakpoints; + + responder.SetResponse(response); + } + catch (Exception e) + { + responder.SetError(new ProtocolException(e.Message)); + } + } + + #endregion -#region IDebugPortNotify2 + #region IDebugPortNotify2 int IDebugPortNotify2.AddProgramNode(IDebugProgramNode2 programNode) { @@ -2693,7 +2868,9 @@ public void HandleIDebugEntryPointEvent2(IDebugEngine2 pEngine, IDebugProcess2 p public void HandleIDebugBreakpointEvent2(IDebugEngine2 pEngine, IDebugProcess2 pProcess, IDebugProgram2 pProgram, IDebugThread2 pThread, IDebugEvent2 pEvent) { - IList tracepoints = GetTracepoints(pEvent as IDebugBreakpointEvent2); + IDebugBreakpointEvent2 breakpointEvent = pEvent as IDebugBreakpointEvent2; + StoppedEvent.ReasonValue reason = GetStoppedEventReason(breakpointEvent); + IList tracepoints = GetTracepoints(breakpointEvent); if (tracepoints.Any()) { ThreadPool.QueueUserWorkItem((o) => @@ -2724,13 +2901,13 @@ public void HandleIDebugBreakpointEvent2(IDebugEngine2 pEngine, IDebugProcess2 p } else { - FireStoppedEvent(pThread, StoppedEvent.ReasonValue.Breakpoint); + FireStoppedEvent(pThread, reason); } }); } else { - FireStoppedEvent(pThread, StoppedEvent.ReasonValue.Breakpoint); + FireStoppedEvent(pThread, reason); } } diff --git a/src/OpenDebugAD7/AD7Impl/AD7BreakPointRequest.cs b/src/OpenDebugAD7/AD7Impl/AD7BreakPointRequest.cs index 96d36f1d7..63f70afa0 100644 --- a/src/OpenDebugAD7/AD7Impl/AD7BreakPointRequest.cs +++ b/src/OpenDebugAD7/AD7Impl/AD7BreakPointRequest.cs @@ -23,6 +23,13 @@ static public uint GetNextBreakpointId() public AD7FunctionPosition FunctionPosition { get; private set; } + public IDebugMemoryContext2 MemoryContext { get; private set; } + + // Used for Releasing the MemoryContext. + // Caller of AD7BreakPointRequest(MemoryContext) is required to + // release it with HostMarshal.ReleaseCodeContextId + public IntPtr MemoryContextIntPtr { get; private set; } + // Unique identifier for breakpoint when communicating with VSCode public uint Id { get; private set; } @@ -41,6 +48,11 @@ public AD7BreakPointRequest(string functionName) FunctionPosition = new AD7FunctionPosition(functionName); } + public AD7BreakPointRequest(IDebugMemoryContext2 memoryContext) + { + MemoryContext = memoryContext; + } + public int GetLocationType(enum_BP_LOCATION_TYPE[] pBPLocationType) { if (DocumentPosition != null) @@ -51,6 +63,10 @@ public int GetLocationType(enum_BP_LOCATION_TYPE[] pBPLocationType) { pBPLocationType[0] = enum_BP_LOCATION_TYPE.BPLT_CODE_FUNC_OFFSET; } + else if (MemoryContext != null) + { + pBPLocationType[0] = enum_BP_LOCATION_TYPE.BPLT_CODE_CONTEXT; + } return 0; } @@ -71,6 +87,13 @@ public int GetRequestInfo(enum_BPREQI_FIELDS dwFields, BP_REQUEST_INFO[] pBPRequ pBPRequestInfo[0].bpLocation.bpLocationType = (uint)enum_BP_LOCATION_TYPE.BPLT_CODE_FUNC_OFFSET; pBPRequestInfo[0].bpLocation.unionmember2 = HostMarshal.RegisterFunctionPosition(FunctionPosition); } + else if (MemoryContext != null) + { + pBPRequestInfo[0].bpLocation.bpLocationType = (uint)enum_BP_LOCATION_TYPE.BPLT_CODE_CONTEXT; + MemoryContextIntPtr = HostMarshal.RegisterCodeContext(MemoryContext as IDebugCodeContext2); + pBPRequestInfo[0].bpLocation.unionmember1 = MemoryContextIntPtr; + + } } if ((dwFields & enum_BPREQI_FIELDS.BPREQI_CONDITION) != 0 && !string.IsNullOrWhiteSpace(Condition)) { diff --git a/src/OpenDebugAD7/AD7Resources.Designer.cs b/src/OpenDebugAD7/AD7Resources.Designer.cs index b029c99c5..0fe3d5d0d 100644 --- a/src/OpenDebugAD7/AD7Resources.Designer.cs +++ b/src/OpenDebugAD7/AD7Resources.Designer.cs @@ -19,7 +19,7 @@ namespace OpenDebugAD7 { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class AD7Resources { @@ -406,6 +406,15 @@ internal static string Error_UnableToSetBreakpoint { } } + /// + /// Looks up a localized string similar to Error setting instruction breakpoint: {0}. + /// + internal static string Error_UnableToSetInstructionBreakpoint { + get { + return ResourceManager.GetString("Error_UnableToSetInstructionBreakpoint", resourceCulture); + } + } + /// /// Looks up a localized string similar to '{0}' cannot be assigned to. /// diff --git a/src/OpenDebugAD7/AD7Resources.resx b/src/OpenDebugAD7/AD7Resources.resx index bc916064d..aa0a29773 100644 --- a/src/OpenDebugAD7/AD7Resources.resx +++ b/src/OpenDebugAD7/AD7Resources.resx @@ -301,4 +301,7 @@ Set next statement is not supported by the current debugger. + + Error setting instruction breakpoint: {0} + \ No newline at end of file diff --git a/test/CppTests/Tests/MemoryTests.cs b/test/CppTests/Tests/MemoryTests.cs new file mode 100644 index 000000000..62269d5b4 --- /dev/null +++ b/test/CppTests/Tests/MemoryTests.cs @@ -0,0 +1,127 @@ +// 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.Linq; +using System.Net; +using System.Threading; +using DebuggerTesting; +using DebuggerTesting.Compilation; +using DebuggerTesting.OpenDebug; +using DebuggerTesting.OpenDebug.Commands; +using DebuggerTesting.OpenDebug.CrossPlatCpp; +using DebuggerTesting.OpenDebug.Events; +using DebuggerTesting.OpenDebug.Extensions; +using DebuggerTesting.Ordering; +using DebuggerTesting.Utilities; +using Xunit; +using Xunit.Abstractions; + +namespace CppTests.Tests +{ + [TestCaseOrderer(DependencyTestOrderer.TypeName, DependencyTestOrderer.AssemblyName)] + public class MemoryTests : TestBase + { + #region Constructor + + public MemoryTests(ITestOutputHelper outputHelper) : base(outputHelper) + { + } + + #endregion + + #region Methods + + [Theory] + [RequiresTestSettings] + public void CompileKitchenSinkForBreakpointTests(ITestSettings settings) + { + this.TestPurpose("Compiles the kitchen sink debuggee."); + this.WriteSettings(settings); + + IDebuggee debuggee = SinkHelper.OpenAndCompile(this, settings.CompilerSettings, DebuggeeMonikers.KitchenSink.Breakpoint); + } + + [Theory] + [DependsOnTest(nameof(CompileKitchenSinkForBreakpointTests))] + [RequiresTestSettings] + public void InstructionBreakpointsBasic(ITestSettings settings) + { + this.TestPurpose("Tests basic operation of instruction breakpoints"); + this.WriteSettings(settings); + + IDebuggee debuggee = SinkHelper.Open(this, settings.CompilerSettings, DebuggeeMonikers.KitchenSink.Breakpoint); + + using (IDebuggerRunner runner = CreateDebugAdapterRunner(settings)) + { + this.Comment("Configure launch"); + runner.Launch(settings.DebuggerSettings, debuggee, "-fCalling"); + + SourceBreakpoints mainBreakpoints = debuggee.Breakpoints(SinkHelper.Main, 33); + + this.Comment("Set initial breakpoints"); + runner.SetBreakpoints(mainBreakpoints); + + this.Comment("Launch and run until first breakpoint"); + runner.Expects.HitBreakpointEvent(SinkHelper.Main, 33) + .AfterConfigurationDone(); + + string ip = string.Empty; + + this.Comment("Inspect the stack and try evaluation."); + using (IThreadInspector inspector = runner.GetThreadInspector()) + { + this.Comment("Get the stack trace"); + IFrameInspector mainFrame = inspector.Stack.First(); + inspector.AssertStackFrameNames(true, "main.*"); + + this.WriteLine("Main frame: {0}", mainFrame); + ip = mainFrame?.InstructionPointerReference; + } + + Assert.False(string.IsNullOrEmpty(ip)); + + // Send Disassemble Request to get the current instruction and next one. + this.WriteLine("Disassemble to get current and next instruction."); + IEnumerable instructions = runner.Disassemble(ip, 2); + + // Validate that we got two instructions. + Assert.Equal(2, instructions.Count()); + + // Get the next instruction's address + string nextIPAddress = instructions.Last().Address; + Assert.False(string.IsNullOrEmpty(nextIPAddress)); + + // Set an instruction breakpoint + this.Comment("Set Instruction Breakpoint"); + InstructionBreakpoints instruction = new InstructionBreakpoints(new string[] { nextIPAddress }); + runner.SetInstructionBreakpoints(instruction); + + // Expect it to be hit. + runner.Expects.HitInstructionBreakpointEvent(nextIPAddress).AfterContinue(); + + // Get the Stack Trace to validate the current frame's ipReference is the one set from the InstructionBp + using (IThreadInspector inspector = runner.GetThreadInspector()) + { + this.Comment("Get the instruction bp's stack trace"); + IFrameInspector mainFrame = inspector.Stack.First(); + ip = mainFrame?.InstructionPointerReference; + + Assert.False(string.IsNullOrEmpty(ip)); + + Assert.Equal(nextIPAddress, ip); + } + + this.Comment("Continue until end"); + runner.Expects.ExitedEvent() + .TerminatedEvent() + .AfterContinue(); + + runner.DisconnectAndVerify(); + } + } + + #endregion + } +} diff --git a/test/DebuggerTesting/OpenDebug/Commands/DisassembleCommand.cs b/test/DebuggerTesting/OpenDebug/Commands/DisassembleCommand.cs new file mode 100644 index 000000000..c8684f692 --- /dev/null +++ b/test/DebuggerTesting/OpenDebug/Commands/DisassembleCommand.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using DebuggerTesting.OpenDebug.Commands.Responses; +using Newtonsoft.Json; +using System; + +namespace DebuggerTesting.OpenDebug.Commands +{ + public sealed class DisassembleArgs : JsonValue + { + public string memoryReference; + + public int? offset; + + public int? instructionOffset; + + public int instructionCount; + + public bool? resolveSymbols; + } + + public class DisassembleCommand : CommandWithResponse + { + public DisassembleCommand(string memoryReference, int? offset, int? instructionOffset, int instructionCount, bool? resolveSymbols) : base("disassemble") + { + this.Args.memoryReference = memoryReference; + this.Args.offset = offset; + this.Args.instructionOffset = instructionOffset; + this.Args.instructionCount = instructionCount; + this.Args.resolveSymbols = resolveSymbols; + } + } +} diff --git a/test/DebuggerTesting/OpenDebug/Commands/ReadMemoryCommand.cs b/test/DebuggerTesting/OpenDebug/Commands/ReadMemoryCommand.cs new file mode 100644 index 000000000..3dd9140ad --- /dev/null +++ b/test/DebuggerTesting/OpenDebug/Commands/ReadMemoryCommand.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using DebuggerTesting.OpenDebug.Commands.Responses; +using Newtonsoft.Json; +using System; + +namespace DebuggerTesting.OpenDebug.Commands +{ + public sealed class ReadMemoryArgs : JsonValue + { + public string memoryReference; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? offset; + + public int count; + } + + public class ReadMemoryCommand : CommandWithResponse + { + public ReadMemoryCommand(string reference, int? offset, int count) : base("readMemory") + { + this.Args.memoryReference = reference; + this.Args.offset = offset; + this.Args.count = count; + } + } +} diff --git a/test/DebuggerTesting/OpenDebug/Commands/Responses/DisassembleResponseValue.cs b/test/DebuggerTesting/OpenDebug/Commands/Responses/DisassembleResponseValue.cs new file mode 100644 index 000000000..9b9b8e8ec --- /dev/null +++ b/test/DebuggerTesting/OpenDebug/Commands/Responses/DisassembleResponseValue.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Newtonsoft.Json; + +namespace DebuggerTesting.OpenDebug.Commands.Responses +{ + public sealed class DisassembleResponseValue : CommandResponseValue + { + public sealed class Body + { + public sealed class DisassembledInstruction + { + public string address; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public string instructionBytes; + + public string instruction; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public string symbol; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public Source location; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? line; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? column; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? endLine; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? endColumn; + } + + public DisassembledInstruction[] instructions; + } + + public Body body = new Body(); + } +} diff --git a/test/DebuggerTesting/OpenDebug/Commands/Responses/ReadMemoryResponseValue.cs b/test/DebuggerTesting/OpenDebug/Commands/Responses/ReadMemoryResponseValue.cs new file mode 100644 index 000000000..0f1878df5 --- /dev/null +++ b/test/DebuggerTesting/OpenDebug/Commands/Responses/ReadMemoryResponseValue.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using Newtonsoft.Json; + +namespace DebuggerTesting.OpenDebug.Commands.Responses +{ + public sealed class ReadMemoryResponseValue : CommandResponseValue + { + public sealed class Body + { + public string address; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int unreadableBytes; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public string data; + } + + public Body body = new Body(); + } +} diff --git a/test/DebuggerTesting/OpenDebug/Commands/Responses/StackTraceResponseValue.cs b/test/DebuggerTesting/OpenDebug/Commands/Responses/StackTraceResponseValue.cs index 64b4611ce..65e2a95b8 100644 --- a/test/DebuggerTesting/OpenDebug/Commands/Responses/StackTraceResponseValue.cs +++ b/test/DebuggerTesting/OpenDebug/Commands/Responses/StackTraceResponseValue.cs @@ -24,6 +24,9 @@ public sealed class StackFrame [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] public Source source; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public string instructionPointerReference; } public StackFrame[] stackFrames; } diff --git a/test/DebuggerTesting/OpenDebug/Commands/SetInstructionBreakpointCommand.cs b/test/DebuggerTesting/OpenDebug/Commands/SetInstructionBreakpointCommand.cs new file mode 100644 index 000000000..82872460c --- /dev/null +++ b/test/DebuggerTesting/OpenDebug/Commands/SetInstructionBreakpointCommand.cs @@ -0,0 +1,98 @@ +// // Copyright (c) Microsoft. All rights reserved. +// // Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using DebuggerTesting.OpenDebug.Commands.Responses; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DebuggerTesting.OpenDebug.Commands +{ + + #region SetInstructionBreakpointCommandArgs + + public sealed class SetInstructionBreakpointCommandArgs : JsonValue + { + public sealed class InstructionBreakpoint + { + public InstructionBreakpoint(string instructionReference, string condition = null) + { + this.instructionReference = instructionReference; + this.condition = condition; + } + + public string instructionReference; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public int? offset; + + [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)] + public string condition; + } + + public InstructionBreakpoint[] breakpoints; + } + + #endregion + + #region InstructionBreakpoints + + public sealed class InstructionBreakpoints + { + private List breakpoints; + + public InstructionBreakpoints() + { + this.breakpoints = new List(); + } + + public InstructionBreakpoints(params string[] addresses) + : this() + { + foreach (string address in addresses) + { + this.Add(address); + } + } + + public InstructionBreakpoints Add(string address, string condition = null) + { + this.breakpoints.Add(new SetInstructionBreakpointCommandArgs.InstructionBreakpoint(address, condition)); + return this; + } + + public InstructionBreakpoints Remove(string address) + { + this.breakpoints.RemoveAll(bp => String.Equals(bp.instructionReference, address, StringComparison.Ordinal)); + return this; + } + + internal IList Breakpoints + { + get { return this.breakpoints; } + } + } + + #endregion + + public class SetInstructionBreakpointsCommand : CommandWithResponse + { + public SetInstructionBreakpointsCommand() : base("setInstructionBreakpoints") + { + } + + public SetInstructionBreakpointsCommand(InstructionBreakpoints breakpoints) : + this() + { + this.Args.breakpoints = breakpoints.Breakpoints.ToArray(); + } + + public override string ToString() + { + return "{0} ({1})".FormatInvariantWithArgs(base.ToString(), String.Join(", ", this.Args.breakpoints.Select(bp => bp.instructionReference))); + } + } +} \ No newline at end of file diff --git a/test/DebuggerTesting/OpenDebug/Events/StoppedEvent.cs b/test/DebuggerTesting/OpenDebug/Events/StoppedEvent.cs index 6be870949..547fa007e 100644 --- a/test/DebuggerTesting/OpenDebug/Events/StoppedEvent.cs +++ b/test/DebuggerTesting/OpenDebug/Events/StoppedEvent.cs @@ -16,7 +16,8 @@ public enum StoppedReason Breakpoint, Pause, Exception, - Entry + Entry, + InstructionBreakpoint } #region StoppedEventValue @@ -63,6 +64,18 @@ public class StoppedEvent : Event private bool verifyLineRange; private int startLine; private int endLine; + private ulong address; + + public StoppedEvent(ulong address) + : base("stopped") + { + + this.address = address; + + this.ExpectedResponse.body.reason = FromReason(StoppedReason.InstructionBreakpoint); + + this.verifyLineRange = false; + } public StoppedEvent(StoppedReason? reason = null, string fileName = null, int? lineNumber = null, string text = null) : base("stopped") @@ -106,6 +119,12 @@ private static string FromReason(StoppedReason? reason) return null; Parameter.ThrowIfIsInvalid(reason.Value, StoppedReason.Unknown, nameof(reason)); + + if (reason == StoppedReason.InstructionBreakpoint) + { + return "instruction breakpoint"; + } + return Enum.GetName(typeof(StoppedReason), reason.Value).ToLowerInvariant(); } diff --git a/test/DebuggerTesting/OpenDebug/Extensions/DebuggerRunnerExtensions.cs b/test/DebuggerTesting/OpenDebug/Extensions/DebuggerRunnerExtensions.cs index a732fc94c..71373b9b2 100644 --- a/test/DebuggerTesting/OpenDebug/Extensions/DebuggerRunnerExtensions.cs +++ b/test/DebuggerTesting/OpenDebug/Extensions/DebuggerRunnerExtensions.cs @@ -7,7 +7,9 @@ using DebuggerTesting.OpenDebug.Commands; using DebuggerTesting.OpenDebug.Commands.Responses; using DebuggerTesting.OpenDebug.Events; +using Newtonsoft.Json; using Xunit; +using static DebuggerTesting.OpenDebug.Commands.Responses.DisassembleResponseValue.Body; namespace DebuggerTesting.OpenDebug.Extensions { @@ -18,6 +20,19 @@ public interface IThreadInfo IThreadInspector GetThreadInspector(); } + public interface IDisassemblyInstruction + { + public string Address { get; } + public string InstructionBytes { get; } + public string Instruction { get; } + public string Symbol { get; } + public Source Location { get; } + public int? Line { get; } + public int? Column { get; } + public int? EndLine { get; } + public int? EndColumn { get; } + } + public static class DebuggerRunnerExtensions { /// @@ -141,6 +156,36 @@ public IThreadInspector GetThreadInspector() #endregion + #region DisassembleInstruction + + internal class DisassemblyInstruction: IDisassemblyInstruction + { + public string Address { get; private set; } + public string InstructionBytes { get; private set; } + public string Instruction { get; private set; } + public string Symbol { get; private set; } + public Source Location { get; private set; } + public int? Line { get; private set; } + public int? Column { get; private set; } + public int? EndLine { get; private set; } + public int? EndColumn { get; private set; } + + public DisassemblyInstruction(DisassembledInstruction disassembledInstruction) + { + this.Address = disassembledInstruction.address; + this.InstructionBytes = disassembledInstruction.instructionBytes; + this.Instruction = disassembledInstruction.instruction; + this.Symbol = disassembledInstruction.symbol; + this.Location = disassembledInstruction.location; + this.Line = disassembledInstruction.line; + this.Column = disassembledInstruction.column; + this.EndLine = disassembledInstruction.endLine; + this.EndColumn = disassembledInstruction.endColumn; + } + } + + #endregion + public static void RunCommandExpectFailure(this IDebuggerRunner runner, ICommand command) { command.ExpectsSuccess = false; @@ -162,6 +207,11 @@ public static SetBreakpointsResponseValue SetFunctionBreakpoints(this IDebuggerR return runner.RunCommand(new SetFunctionBreakpointsCommand(breakpoints)); } + public static SetBreakpointsResponseValue SetInstructionBreakpoints(this IDebuggerRunner runner, InstructionBreakpoints breakpoints) + { + return runner.RunCommand(new SetInstructionBreakpointsCommand(breakpoints)); + } + public static void Continue(this IDebuggerRunner runner) { runner.RunCommand(new ContinueCommand(runner.StoppedThreadId)); @@ -172,6 +222,18 @@ public static void ConfigurationDone(this IDebuggerRunner runner) runner.RunCommand(new ConfigurationDoneCommand()); } + public static ReadMemoryResponseValue ReadMemory(this IDebuggerRunner runner, string reference, int? offset, int count) + { + ReadMemoryResponseValue response = runner.RunCommand(new ReadMemoryCommand(reference, offset, count)); + return response; + } + + public static IEnumerable Disassemble(this IDebuggerRunner runner, string memoryReference, int instructionCount) + { + DisassembleResponseValue response = runner.RunCommand(new DisassembleCommand(memoryReference, 0, 0, instructionCount, false)); + return response?.body?.instructions.Select(i => new DisassemblyInstruction(i)); + } + /// /// Adds an expected stop event within a range of line numbers. If the stop does not occur on , then perform a step over /// and verify that the debuggee breaks at the . diff --git a/test/DebuggerTesting/OpenDebug/Extensions/FrameInspector.cs b/test/DebuggerTesting/OpenDebug/Extensions/FrameInspector.cs index 05e549077..ce1e5b06b 100644 --- a/test/DebuggerTesting/OpenDebug/Extensions/FrameInspector.cs +++ b/test/DebuggerTesting/OpenDebug/Extensions/FrameInspector.cs @@ -20,10 +20,11 @@ internal class FrameInspector : DisposableObject, IFrameInspector private int? line; private int? column; private int? sourceReference; + private string instructionPointerReference; #region Constructor/Dispose - public FrameInspector(IDebuggerRunner runner, string name, int id, string sourceName, string sourcePath, int? sourceReference, int? line, int? column) + public FrameInspector(IDebuggerRunner runner, string name, int id, string sourceName, string sourcePath, int? sourceReference, int? line, int? column, string instructionPointerReference) { Parameter.ThrowIfNull(runner, nameof(runner)); this.DebuggerRunner = runner; @@ -34,6 +35,7 @@ public FrameInspector(IDebuggerRunner runner, string name, int id, string source this.sourceReference = sourceReference; this.line = line; this.column = column; + this.instructionPointerReference = instructionPointerReference; } protected override void Dispose(bool isDisposing) @@ -116,6 +118,15 @@ public int? Column } } + public string InstructionPointerReference + { + get + { + this.VerifyNotDisposed(); + return this.instructionPointerReference; + } + } + #endregion /// diff --git a/test/DebuggerTesting/OpenDebug/Extensions/IInspectors.cs b/test/DebuggerTesting/OpenDebug/Extensions/IInspectors.cs index 593d82feb..caf6b2aff 100644 --- a/test/DebuggerTesting/OpenDebug/Extensions/IInspectors.cs +++ b/test/DebuggerTesting/OpenDebug/Extensions/IInspectors.cs @@ -67,8 +67,11 @@ public interface IFrameInspector : IVariableExpander, IInspector int? SourceReference { get; } int? Line { get; } + int? Column { get; } + string InstructionPointerReference { get; } + /// /// Evaluates an expression on this frame /// diff --git a/test/DebuggerTesting/OpenDebug/Extensions/ThreadInspector.cs b/test/DebuggerTesting/OpenDebug/Extensions/ThreadInspector.cs index 6b2510937..ba614f451 100644 --- a/test/DebuggerTesting/OpenDebug/Extensions/ThreadInspector.cs +++ b/test/DebuggerTesting/OpenDebug/Extensions/ThreadInspector.cs @@ -65,8 +65,9 @@ public IEnumerable Stack int? sourceReference = stackFrame.source?.sourceReference; int? line = stackFrame.line; int? column = stackFrame.column; + string instructionPointerReference = stackFrame.instructionPointerReference; - FrameInspector frame = new FrameInspector(this.DebuggerRunner, name, id, sourceName, sourcePath, sourceReference, line, column); + FrameInspector frame = new FrameInspector(this.DebuggerRunner, name, id, sourceName, sourcePath, sourceReference, line, column, instructionPointerReference); this.frameInspectors.Add(frame); yield return frame; } diff --git a/test/DebuggerTesting/OpenDebug/RunBuilder.cs b/test/DebuggerTesting/OpenDebug/RunBuilder.cs index 217e673de..6e0df5945 100644 --- a/test/DebuggerTesting/OpenDebug/RunBuilder.cs +++ b/test/DebuggerTesting/OpenDebug/RunBuilder.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Net; using DebuggerTesting.OpenDebug.Commands; using DebuggerTesting.OpenDebug.Events; @@ -45,6 +46,22 @@ public static IRunBuilder StoppedEvent(this IRunBuilder runBuilder, StoppedReaso return runBuilder.Event(new StoppedEvent(reason, fileName, lineNumber, text)); } + public static IRunBuilder HitInstructionBreakpointEvent(this IRunBuilder runBuilder, string address) + { + ulong nextAddress; + + if (address.StartsWith("0x", StringComparison.Ordinal)) + { + nextAddress = Convert.ToUInt64(address.Substring(2), 16); + } + else + { + nextAddress = Convert.ToUInt64(address, 10); + } + + return runBuilder.Event(new StoppedEvent(nextAddress)); + } + public static IRunBuilder HitBreakpointEvent(this IRunBuilder runBuilder, string fileName = null, int? lineNumber = null, string text = null) { return runBuilder.StoppedEvent(StoppedReason.Breakpoint, fileName, lineNumber, text); From 3c50b866dd2a5e35f4b4ee97a8d93722dbcff440 Mon Sep 17 00:00:00 2001 From: Aleksandar Ivanov <74899441+aleks-ivanov@users.noreply.github.com> Date: Mon, 16 Aug 2021 21:11:11 +0300 Subject: [PATCH 4/8] Resolves: Add GitHub Codespaces configuration (#1190) * Create Codespace configuration (#3) * Update devcontainer.json * implement feedback changes - remove CPP extension - add AzDO YAML extension --- .devcontainer/Dockerfile | 7 +++++++ .devcontainer/devcontainer.json | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..94d656f1f --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,7 @@ +FROM mcr.microsoft.com/vscode/devcontainers/dotnet:0.201.7-5.0 + +# Install gcc, g++ and make +RUN sudo apt update && \ + sudo apt install build-essential -y + +# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..0796a99f3 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +{ + "name": "MIEngine Codespace", + "settings": { + "workbench.colorTheme": "Default Dark+", + "terminal.integrated.defaultProfile.linux": "pwsh" + }, + "extensions": [ + // VS Code specific + "coenraads.bracket-pair-colorizer", + "vscode-icons-team.vscode-icons", + "editorconfig.editorconfig", + // GitHub specific + "eamodio.gitlens", + "cschleiden.vscode-github-actions", + "ms-azure-devops.azure-pipelines", + "bierner.markdown-preview-github-styles", + "ban.spellright", + // .NET specific + "ms-dotnettools.csharp", + "VisualStudioExptTeam.vscodeintellicode", + "ms-vscode.powershell", + "jmrog.vscode-nuget-package-manager" + ], + "postCreateCommand": "", + "build": { + "dockerfile": "Dockerfile" + } +} + +// Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) From 40aa402b1b3a630b065b92afb2520a53c45c8db6 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Thu, 19 Aug 2021 13:12:15 -0700 Subject: [PATCH 5/8] Add osxlauncherscript for macOS (#1201) --- eng/pipelines/steps/PublishOpenDebugAD7.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eng/pipelines/steps/PublishOpenDebugAD7.yml b/eng/pipelines/steps/PublishOpenDebugAD7.yml index 04432b05e..f93c5c35f 100644 --- a/eng/pipelines/steps/PublishOpenDebugAD7.yml +++ b/eng/pipelines/steps/PublishOpenDebugAD7.yml @@ -35,6 +35,10 @@ steps: # macOS Steps since we need to harden and sign the binary. - ${{ if startsWith(parameters.RuntimeID, 'osx-') }}: + - script: + copy ${{ parameters.SignedBinariesFolder }}\Release\vscode\osxlaunchhelper.scpt $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. + displayName: "Copy osxlaunchhelper.scpt" + - template: ../tasks/PublishPipelineArtifact.yml parameters: displayName: 'Publish Unsigned ${{ parameters.RuntimeID }}' From 3824597e9edf7412931fdb63057a49742bd4c359 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Fri, 20 Aug 2021 17:04:14 -0700 Subject: [PATCH 6/8] Drop file for osxlaunchhelper (#1204) --- eng/pipelines/steps/PublishOpenDebugAD7.yml | 2 +- src/MICore/MICore.csproj | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/steps/PublishOpenDebugAD7.yml b/eng/pipelines/steps/PublishOpenDebugAD7.yml index f93c5c35f..28be90450 100644 --- a/eng/pipelines/steps/PublishOpenDebugAD7.yml +++ b/eng/pipelines/steps/PublishOpenDebugAD7.yml @@ -36,7 +36,7 @@ steps: # macOS Steps since we need to harden and sign the binary. - ${{ if startsWith(parameters.RuntimeID, 'osx-') }}: - script: - copy ${{ parameters.SignedBinariesFolder }}\Release\vscode\osxlaunchhelper.scpt $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. + copy ${{ parameters.SignedBinariesFolder }}\Release\osxlaunchhelper.scpt $(Build.StagingDirectory)\${{ parameters.RuntimeID }}\debugAdapters\bin\. displayName: "Copy osxlaunchhelper.scpt" - template: ../tasks/PublishPipelineArtifact.yml diff --git a/src/MICore/MICore.csproj b/src/MICore/MICore.csproj index 504877f49..149488eba 100755 --- a/src/MICore/MICore.csproj +++ b/src/MICore/MICore.csproj @@ -42,6 +42,7 @@ + @@ -89,4 +90,11 @@ + + + + + + + \ No newline at end of file From 1c248a5067d8c475a11c9493df555dc250012a14 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Fri, 27 Aug 2021 17:47:00 -0700 Subject: [PATCH 7/8] Publish CI Artifacts (#1202) --- eng/pipelines/templates/Build.template.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eng/pipelines/templates/Build.template.yml b/eng/pipelines/templates/Build.template.yml index 071585efa..fe7d6e070 100644 --- a/eng/pipelines/templates/Build.template.yml +++ b/eng/pipelines/templates/Build.template.yml @@ -17,5 +17,11 @@ steps: parameters: Configuration: ${{ parameters.Configuration }} +# Used for localization +- template: ../steps/CollectAndPublishBinaries.yml + parameters: + TargetFolder: '$(Build.StagingDirectory)\drop' + ArtifactName: '${{ parameters.Configuration }}' + - template: ../tasks/MicroBuildCleanup.yml ... \ No newline at end of file From a2a26ea534d316fc7c6197bb2745814c2605d74a Mon Sep 17 00:00:00 2001 From: csigs Date: Tue, 31 Aug 2021 12:56:25 -0700 Subject: [PATCH 8/8] LEGO: check in for main to temporary branch. (#1210) --- loc/lcl/CHS/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/CHS/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/CHT/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/CHT/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/CSY/Microsoft.SSHDebugPS.dll.lcl | 86 ++++++++- loc/lcl/CSY/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/DEU/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/DEU/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/ESN/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/ESN/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/FRA/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/FRA/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/ITA/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/ITA/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/JPN/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/JPN/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/KOR/Microsoft.SSHDebugPS.dll.lcl | 83 ++++++++- loc/lcl/KOR/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/PLK/Microsoft.SSHDebugPS.dll.lcl | 86 ++++++++- loc/lcl/PLK/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/PTB/Microsoft.SSHDebugPS.dll.lcl | 86 ++++++++- loc/lcl/PTB/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/RUS/Microsoft.SSHDebugPS.dll.lcl | 84 ++++++++- loc/lcl/RUS/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- loc/lcl/TRK/Microsoft.SSHDebugPS.dll.lcl | 86 ++++++++- loc/lcl/TRK/OpenFolderSchema.json.lcl | 215 +++++++++++++++-------- 26 files changed, 2926 insertions(+), 961 deletions(-) diff --git a/loc/lcl/CHS/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/CHS/Microsoft.SSHDebugPS.dll.lcl index ccb50c6bb..52b61863f 100644 --- a/loc/lcl/CHS/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/CHS/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/CHS/OpenFolderSchema.json.lcl b/loc/lcl/CHS/OpenFolderSchema.json.lcl index e106ec7cf..3eed67250 100644 --- a/loc/lcl/CHS/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHS/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/CHT/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/CHT/Microsoft.SSHDebugPS.dll.lcl index 26bbb8a9c..a1267d4a2 100644 --- a/loc/lcl/CHT/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/CHT/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/CHT/OpenFolderSchema.json.lcl b/loc/lcl/CHT/OpenFolderSchema.json.lcl index e468e74a6..094c6c48c 100644 --- a/loc/lcl/CHT/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHT/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/CSY/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/CSY/Microsoft.SSHDebugPS.dll.lcl index 198da66b0..64b3cae58 100644 --- a/loc/lcl/CSY/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/CSY/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,15 @@ + + + + + + + + + ]]> @@ -292,6 +337,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +370,15 @@ + + + + + + + + + @@ -769,7 +847,7 @@ - + @@ -777,7 +855,7 @@ - + @@ -792,7 +870,7 @@ - + @@ -807,7 +885,7 @@ - + diff --git a/loc/lcl/CSY/OpenFolderSchema.json.lcl b/loc/lcl/CSY/OpenFolderSchema.json.lcl index 8091205be..37a7836aa 100644 --- a/loc/lcl/CSY/OpenFolderSchema.json.lcl +++ b/loc/lcl/CSY/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/DEU/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/DEU/Microsoft.SSHDebugPS.dll.lcl index 1b0c00b83..7746cf63a 100644 --- a/loc/lcl/DEU/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/DEU/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/DEU/OpenFolderSchema.json.lcl b/loc/lcl/DEU/OpenFolderSchema.json.lcl index 4bb2bfe73..22155594a 100644 --- a/loc/lcl/DEU/OpenFolderSchema.json.lcl +++ b/loc/lcl/DEU/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/ESN/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/ESN/Microsoft.SSHDebugPS.dll.lcl index 5dc0d3ff7..0a6d757bc 100644 --- a/loc/lcl/ESN/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/ESN/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/ESN/OpenFolderSchema.json.lcl b/loc/lcl/ESN/OpenFolderSchema.json.lcl index 9aa6ca651..3fba543f3 100644 --- a/loc/lcl/ESN/OpenFolderSchema.json.lcl +++ b/loc/lcl/ESN/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -37,7 +64,7 @@ - + @@ -70,7 +97,7 @@ - + @@ -115,7 +142,7 @@ - + @@ -181,50 +208,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -239,13 +278,13 @@ - + - + @@ -260,13 +299,13 @@ - + - + @@ -281,43 +320,43 @@ - + - + - + - + - + - + - + @@ -332,7 +371,7 @@ - + @@ -347,13 +386,13 @@ - + - + @@ -368,7 +407,7 @@ - + @@ -383,13 +422,13 @@ - + - + @@ -404,7 +443,7 @@ - + @@ -419,7 +458,7 @@ - + @@ -434,7 +473,7 @@ - + @@ -449,25 +488,25 @@ - + - + - + - + @@ -482,7 +521,7 @@ - + @@ -497,7 +536,7 @@ - + @@ -512,11 +551,20 @@ - + + + + + + + + + + @@ -527,25 +575,25 @@ - + - + - + - + @@ -560,7 +608,7 @@ - + @@ -575,17 +623,32 @@ - + - + + + + + + + + + + + + + + + + @@ -596,7 +659,7 @@ - + @@ -611,7 +674,7 @@ - + @@ -626,7 +689,7 @@ - + @@ -641,7 +704,7 @@ - + @@ -656,13 +719,13 @@ - + - + @@ -695,11 +758,23 @@ - + + + + + + + + + + + + + @@ -710,13 +785,13 @@ - + - + @@ -740,13 +815,13 @@ - + - + @@ -761,31 +836,31 @@ - + - + - + - + - + @@ -809,13 +884,13 @@ - + - + @@ -830,43 +905,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/FRA/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/FRA/Microsoft.SSHDebugPS.dll.lcl index 0ca13ac3b..5bf0ba6e1 100644 --- a/loc/lcl/FRA/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/FRA/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/FRA/OpenFolderSchema.json.lcl b/loc/lcl/FRA/OpenFolderSchema.json.lcl index 546b75a40..7b3517ab4 100644 --- a/loc/lcl/FRA/OpenFolderSchema.json.lcl +++ b/loc/lcl/FRA/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/ITA/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/ITA/Microsoft.SSHDebugPS.dll.lcl index 9291fc77c..2072d6537 100644 --- a/loc/lcl/ITA/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/ITA/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/ITA/OpenFolderSchema.json.lcl b/loc/lcl/ITA/OpenFolderSchema.json.lcl index 6c713286f..cabdec440 100644 --- a/loc/lcl/ITA/OpenFolderSchema.json.lcl +++ b/loc/lcl/ITA/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/JPN/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/JPN/Microsoft.SSHDebugPS.dll.lcl index 97a06a0ca..c92c263ae 100644 --- a/loc/lcl/JPN/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/JPN/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/JPN/OpenFolderSchema.json.lcl b/loc/lcl/JPN/OpenFolderSchema.json.lcl index 00d9b7e9b..7ffd2b3d3 100644 --- a/loc/lcl/JPN/OpenFolderSchema.json.lcl +++ b/loc/lcl/JPN/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/KOR/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/KOR/Microsoft.SSHDebugPS.dll.lcl index b58d334f4..62fdb025f 100644 --- a/loc/lcl/KOR/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/KOR/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,12 @@ + + + + + + ]]> @@ -292,6 +334,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +367,15 @@ + + + + + + + + + @@ -769,7 +844,7 @@ - + @@ -777,7 +852,7 @@ - + @@ -792,7 +867,7 @@ - + @@ -807,7 +882,7 @@ - + diff --git a/loc/lcl/KOR/OpenFolderSchema.json.lcl b/loc/lcl/KOR/OpenFolderSchema.json.lcl index 4ec4a054c..b87880e33 100644 --- a/loc/lcl/KOR/OpenFolderSchema.json.lcl +++ b/loc/lcl/KOR/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/PLK/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/PLK/Microsoft.SSHDebugPS.dll.lcl index fcc7bdd72..69c4f0bc2 100644 --- a/loc/lcl/PLK/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/PLK/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,15 @@ + + + + + + + + + ]]> @@ -292,6 +337,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +370,15 @@ + + + + + + + + + @@ -769,7 +847,7 @@ - + @@ -777,7 +855,7 @@ - + @@ -792,7 +870,7 @@ - + @@ -807,7 +885,7 @@ - + diff --git a/loc/lcl/PLK/OpenFolderSchema.json.lcl b/loc/lcl/PLK/OpenFolderSchema.json.lcl index 68cf86dcf..824db11f1 100644 --- a/loc/lcl/PLK/OpenFolderSchema.json.lcl +++ b/loc/lcl/PLK/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/PTB/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/PTB/Microsoft.SSHDebugPS.dll.lcl index 8de8ebb39..8f1f8a373 100644 --- a/loc/lcl/PTB/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/PTB/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,15 @@ + + + + + + + + + ]]> @@ -292,6 +337,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +370,15 @@ + + + + + + + + + @@ -769,7 +847,7 @@ - + @@ -777,7 +855,7 @@ - + @@ -792,7 +870,7 @@ - + @@ -807,7 +885,7 @@ - + diff --git a/loc/lcl/PTB/OpenFolderSchema.json.lcl b/loc/lcl/PTB/OpenFolderSchema.json.lcl index 2f6d76397..7d77fa863 100644 --- a/loc/lcl/PTB/OpenFolderSchema.json.lcl +++ b/loc/lcl/PTB/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/RUS/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/RUS/Microsoft.SSHDebugPS.dll.lcl index 19d8f8604..e27735d1c 100644 --- a/loc/lcl/RUS/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/RUS/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,15 @@ + + + + + + + + + ]]> @@ -292,6 +337,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +370,15 @@ + + + + + + + + + @@ -769,7 +847,7 @@ - + @@ -795,7 +873,7 @@ - + @@ -810,7 +888,7 @@ - + diff --git a/loc/lcl/RUS/OpenFolderSchema.json.lcl b/loc/lcl/RUS/OpenFolderSchema.json.lcl index a7f1633db..e23b5580b 100644 --- a/loc/lcl/RUS/OpenFolderSchema.json.lcl +++ b/loc/lcl/RUS/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -37,7 +64,7 @@ - + @@ -70,7 +97,7 @@ - + @@ -115,7 +142,7 @@ - + @@ -181,50 +208,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -239,13 +278,13 @@ - + - + @@ -260,13 +299,13 @@ - + - + @@ -281,43 +320,43 @@ - + - + - + - + - + - + - + @@ -332,7 +371,7 @@ - + @@ -347,13 +386,13 @@ - + - + @@ -368,7 +407,7 @@ - + @@ -383,13 +422,13 @@ - + - + @@ -404,7 +443,7 @@ - + @@ -419,7 +458,7 @@ - + @@ -434,7 +473,7 @@ - + @@ -449,25 +488,25 @@ - + - + - + - + @@ -482,7 +521,7 @@ - + @@ -497,7 +536,7 @@ - + @@ -512,11 +551,20 @@ - + + + + + + + + + + @@ -527,25 +575,25 @@ - + - + - + - + @@ -560,7 +608,7 @@ - + @@ -575,17 +623,32 @@ - + - + + + + + + + + + + + + + + + + @@ -596,7 +659,7 @@ - + @@ -611,7 +674,7 @@ - + @@ -626,7 +689,7 @@ - + @@ -641,7 +704,7 @@ - + @@ -656,13 +719,13 @@ - + - + @@ -695,11 +758,23 @@ - + + + + + + + + + + + + + @@ -710,13 +785,13 @@ - + - + @@ -740,13 +815,13 @@ - + - + @@ -761,31 +836,31 @@ - + - + - + - + - + @@ -809,13 +884,13 @@ - + - + @@ -830,43 +905,43 @@ - + - + - + - + - + - + - + diff --git a/loc/lcl/TRK/Microsoft.SSHDebugPS.dll.lcl b/loc/lcl/TRK/Microsoft.SSHDebugPS.dll.lcl index 19f2dd536..d5e538f47 100644 --- a/loc/lcl/TRK/Microsoft.SSHDebugPS.dll.lcl +++ b/loc/lcl/TRK/Microsoft.SSHDebugPS.dll.lcl @@ -247,6 +247,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -283,6 +319,15 @@ + + + + + + + + + ]]> @@ -292,6 +337,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,6 +370,15 @@ + + + + + + + + + @@ -769,7 +847,7 @@ - + @@ -777,7 +855,7 @@ - + @@ -792,7 +870,7 @@ - + @@ -807,7 +885,7 @@ - + diff --git a/loc/lcl/TRK/OpenFolderSchema.json.lcl b/loc/lcl/TRK/OpenFolderSchema.json.lcl index d30d026c4..64f62e58b 100644 --- a/loc/lcl/TRK/OpenFolderSchema.json.lcl +++ b/loc/lcl/TRK/OpenFolderSchema.json.lcl @@ -10,6 +10,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,7 +67,7 @@ - + @@ -73,7 +100,7 @@ - + @@ -118,7 +145,7 @@ - + @@ -187,50 +214,62 @@ - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -245,13 +284,13 @@ - + - + @@ -266,13 +305,13 @@ - + - + @@ -287,43 +326,43 @@ - + - + - + - + - + - + - + @@ -341,7 +380,7 @@ - + @@ -356,13 +395,13 @@ - + - + @@ -380,7 +419,7 @@ - + @@ -398,13 +437,13 @@ - + - + @@ -419,7 +458,7 @@ - + @@ -437,7 +476,7 @@ - + @@ -455,7 +494,7 @@ - + @@ -473,25 +512,25 @@ - + - + - + - + @@ -509,7 +548,7 @@ - + @@ -527,7 +566,7 @@ - + @@ -545,11 +584,20 @@ - + + + + + + + + + + @@ -563,25 +611,25 @@ - + - + - + - + @@ -596,7 +644,7 @@ - + @@ -614,17 +662,32 @@ - + - + + + + + + + + + + + + + + + + @@ -635,7 +698,7 @@ - + @@ -650,7 +713,7 @@ - + @@ -665,7 +728,7 @@ - + @@ -683,7 +746,7 @@ - + @@ -701,13 +764,13 @@ - + - + @@ -743,11 +806,23 @@ - + + + + + + + + + + + + + @@ -761,13 +836,13 @@ - + - + @@ -791,13 +866,13 @@ - + - + @@ -812,31 +887,31 @@ - + - + - + - + - + @@ -860,13 +935,13 @@ - + - + @@ -881,43 +956,43 @@ - + - + - + - + - + - + - +