From 4aef1f46e460748d6a98aca5156371701f259a75 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Thu, 19 Dec 2024 16:45:36 -0800 Subject: [PATCH 01/28] Merge pull request #1485 from microsoft/dev/waan/complianceFixes Update Nuget Packages for Compliance --- .github/workflows/Build-And-Test.yml | 8 +++++--- build/Analyzers.targets | 10 ---------- build/package_versions.settings.targets | 18 +++++++++--------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/.github/workflows/Build-And-Test.yml b/.github/workflows/Build-And-Test.yml index 9fe5827ac..aec71a4df 100644 --- a/.github/workflows/Build-And-Test.yml +++ b/.github/workflows/Build-And-Test.yml @@ -150,7 +150,7 @@ jobs: path: ${{ github.workspace }}/bin/DebugAdapterProtocolTests/Debug/CppTests/results.trx osx_build: - runs-on: macos-12 + runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 @@ -168,8 +168,10 @@ jobs: - run: | ${{ github.workspace }}/eng/Scripts/CI-Build.sh - - run: | - ${{ github.workspace }}/eng/Scripts/CI-Test.sh + # Disabling lldb-mi tests since DownloadLldbMI.sh will obtain + # an x64 version instead of an arm64 and test will fail. + # - run: | + # ${{ github.workspace }}/eng/Scripts/CI-Test.sh - name: 'Upload Test Results' uses: actions/upload-artifact@v4 diff --git a/build/Analyzers.targets b/build/Analyzers.targets index 572fad403..a2074bfd9 100644 --- a/build/Analyzers.targets +++ b/build/Analyzers.targets @@ -1,18 +1,8 @@ - - false true ..\IDECodeAnalysis.ruleset - - - - - - - - \ No newline at end of file diff --git a/build/package_versions.settings.targets b/build/package_versions.settings.targets index 248548b8e..5870c79ac 100644 --- a/build/package_versions.settings.targets +++ b/build/package_versions.settings.targets @@ -1,14 +1,14 @@ 1.0.1 - 17.11.40262 + 17.12.40391 13.0.3 17.2.60629.1 16.7.1 - 2.4.1 - 2.4.3 + 2.9.2 + 3.0.0 1.3.0 2.1.2 @@ -25,19 +25,19 @@ 17.5.33428.366 17.5.33428.366 17.5.33428.366 - 17.11.40262 - 17.11.40262 - 17.11.20 - 17.11.40262 + 17.12.40392 + 17.12.40391 + 17.12.19 + 17.12.40391 15.0.26932 15.0.392 15.0.392 - 17.11.40262 + 17.12.40391 17.3.2093 4.3.0 6.0.1 - 8.0.4 + 8.0.5 \ No newline at end of file From d51041d0c001006ddde2781acbd2ac4d9c7a2c66 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Tue, 11 Feb 2025 16:58:48 -0800 Subject: [PATCH 02/28] DAR: Allow caller to control VSASSERT path (#1489) For other internal clients, it would be helpful if one could control the VSASSERT path, as this path is also used to write out where dump files are stored on Windows. This PR updates support to enable this. --- test/DebugAdapterRunner/DebugAdapterRunner.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/DebugAdapterRunner/DebugAdapterRunner.cs b/test/DebugAdapterRunner/DebugAdapterRunner.cs index 2d7315f6e..6d7a51899 100644 --- a/test/DebugAdapterRunner/DebugAdapterRunner.cs +++ b/test/DebugAdapterRunner/DebugAdapterRunner.cs @@ -8,6 +8,7 @@ using System.Diagnostics; using System.Globalization; using System.IO; +using System.Linq; using System.Text; using System.Threading; @@ -163,8 +164,25 @@ private void StartDebugAdapter( if (redirectVSAssert) { - _assertionFileName = Path.Combine(Path.GetTempPath(), string.Format(CultureInfo.InvariantCulture, "vsassert.{0}.txt", Guid.NewGuid())); - startInfo.Environment["VSASSERT"] = _assertionFileName; + string vsassertPath = null; + + // First see if the caller already specified the assertion path + if (additionalEnvironmentVariables != null) + { + vsassertPath = additionalEnvironmentVariables + .Where(pair => pair.Key.Equals("VSASSERT", StringComparison.OrdinalIgnoreCase)) + .Select(pair => pair.Value) + .FirstOrDefault(); + } + + if (string.IsNullOrEmpty(vsassertPath)) + { + // If the caller didn't specify a path, create a temporary one + vsassertPath = Path.Combine(Path.GetTempPath(), string.Format(CultureInfo.InvariantCulture, "vsassert.{0}.txt", Guid.NewGuid())); + startInfo.Environment["VSASSERT"] = vsassertPath; + } + + _assertionFileName = vsassertPath; } if (additionalEnvironmentVariables != null) From 6c549169ed0e5a78e59feb31101e349b6bf236c6 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Wed, 12 Feb 2025 10:04:22 -0800 Subject: [PATCH 03/28] Fix DebuggerTesting-release build (#1490) The DebuggerTesting-release build was failing. This fixes it. --- eng/pipelines/templates/DebuggerTesting-release.template.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/pipelines/templates/DebuggerTesting-release.template.yml b/eng/pipelines/templates/DebuggerTesting-release.template.yml index 52ad45a5e..927d7a00f 100644 --- a/eng/pipelines/templates/DebuggerTesting-release.template.yml +++ b/eng/pipelines/templates/DebuggerTesting-release.template.yml @@ -29,6 +29,8 @@ steps: TargetFolders: '$(Build.SourcesDirectory)\bin\DebugAdapterProtocolTests\Release\drop' - template: ../steps/CopyAndPublishSymbols.yml + parameters: + SourceFolder: '$(Build.SourcesDirectory)\bin\DebugAdapterProtocolTests\Release\drop' - template: ../tasks/PublishPipelineArtifact.yml parameters: From 8dae5397c27a5b21178c57e1a9a25e0aa6f6da90 Mon Sep 17 00:00:00 2001 From: Hermann von Kleist Date: Mon, 24 Feb 2025 23:53:07 +0100 Subject: [PATCH 04/28] Don't try to parse JSON strings as date (#1492) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When parsing launch options from JSON, the JSON parser's default behavior is – for whatever reason – to parse slightly datetime-ish looking strings as date objects. This PR explicitly forbids this behavior when parsing launch options. Partially fixes #1491, microsoft/vscode-cpptools#13241 and microsoft/vscode#238514. --- src/MICore/LaunchOptions.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/MICore/LaunchOptions.cs b/src/MICore/LaunchOptions.cs index 711bdfecb..6b8f91e05 100644 --- a/src/MICore/LaunchOptions.cs +++ b/src/MICore/LaunchOptions.cs @@ -1267,7 +1267,11 @@ public static LaunchOptions GetInstance(HostConfigurationStore configStore, stri { try { - JObject parsedOptions = JObject.Parse(options); + JObject parsedOptions = JsonConvert.DeserializeObject(options, new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }); + if (parsedOptions is null) + { + throw new InvalidLaunchOptionsException(MICoreResources.Error_UnknownLaunchOptions); + } // if the customLauncher element is present then try using the custom launcher implementation from the config store if (parsedOptions["customLauncher"] != null && !string.IsNullOrWhiteSpace(parsedOptions["customLauncher"].Value())) From 37ba00694985dc80c644a83c1fdf99cd4ff1da57 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Tue, 25 Feb 2025 17:12:42 -0800 Subject: [PATCH 05/28] Update VSCodeDebugProtocol library (#1493) This PR updates the version of Microsoft.VisualStudio.Shared.VSCodeDebugProtocol to 17.14.10225.1. This completes the work for #1491. I also noticed the solution doesn't reference README.md, so this adds a link. --- build/package_versions.settings.targets | 2 +- src/MIDebugEngine.sln | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build/package_versions.settings.targets b/build/package_versions.settings.targets index 5870c79ac..b869f0778 100644 --- a/build/package_versions.settings.targets +++ b/build/package_versions.settings.targets @@ -3,7 +3,7 @@ 1.0.1 17.12.40391 13.0.3 - 17.2.60629.1 + 17.14.10225.1 16.7.1 diff --git a/src/MIDebugEngine.sln b/src/MIDebugEngine.sln index 087bbc247..248c15efe 100755 --- a/src/MIDebugEngine.sln +++ b/src/MIDebugEngine.sln @@ -11,6 +11,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject ..\.editorconfig = ..\.editorconfig IDECodeAnalysis.ruleset = IDECodeAnalysis.ruleset + ..\README.md = ..\README.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MICoreUnitTests", "MICoreUnitTests\MICoreUnitTests.csproj", "{6D565BAE-4764-40C3-9C0F-204B6FFA0389}" From a7e17489fd19eb06177ff7a238e6db618db88e0c Mon Sep 17 00:00:00 2001 From: paulmaybee Date: Fri, 7 Mar 2025 14:57:20 -0800 Subject: [PATCH 06/28] Dev/paulmay/kill on close (#1495) * Kill pipeTransport process on close * Remove blank line --- src/MICore/Transports/PipeTransport.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/MICore/Transports/PipeTransport.cs b/src/MICore/Transports/PipeTransport.cs index e19b6b137..1add33c76 100644 --- a/src/MICore/Transports/PipeTransport.cs +++ b/src/MICore/Transports/PipeTransport.cs @@ -197,11 +197,19 @@ public override void Close() if (_process != null) { - if (_killOnClose && !_process.HasExited) + if (!_process.HasExited) { try { - KillPipeProcessAndChildren(_process); + if (_killOnClose) + { + KillPipeProcessAndChildren(_process); + } + else + { + // kill only the process + _process.Kill(); + } } catch { From 8ae5577267c6b0e7bec85ff1f3a8417e8aa55bf4 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Fri, 4 Apr 2025 18:38:13 -0700 Subject: [PATCH 07/28] [Builds] Update MicroBuildInsertVsPayload to v5 (#1497) VS Eng has requested that we update from v4 to v5. --- eng/pipelines/VS-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/VS-release.yml b/eng/pipelines/VS-release.yml index d86512dc1..71125331e 100644 --- a/eng/pipelines/VS-release.yml +++ b/eng/pipelines/VS-release.yml @@ -59,7 +59,7 @@ extends: Write-Host "##vso[task.setvariable variable=MDDPackageVersion;]$version" displayName: 'Set MDDPackage Version' - - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@4 + - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@5 displayName: 'Insert VS Payload' inputs: TargetBranch: $(TargetBranch) From cb12caa07b1f86c0c99e1ec7322b1bc0cc27e8ee Mon Sep 17 00:00:00 2001 From: paulmaybee Date: Mon, 7 Apr 2025 08:09:23 -0700 Subject: [PATCH 08/28] Enable debuginfod (#1500) --- src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs b/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs index 4a0335f06..aaabb974a 100755 --- a/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs +++ b/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs @@ -624,6 +624,7 @@ private async Task> GetInitializeCommands() if (_launchOptions.DebuggerMIMode == MIMode.Gdb) { commands.Add(new LaunchCommand("-interpreter-exec console \"set pagination off\"")); + commands.Add(new LaunchCommand("set debuginfod enabled on", ignoreFailures:true)); } // When user specifies loading directives then the debugger cannot auto load symbols, the MIEngine must intervene at each solib-load event and make a determination From c526ddd0cb0506354d6251bd47266791d9e8d48a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 14:08:29 -0700 Subject: [PATCH 09/28] Docker 'Platform' returns an object instead of a string in Docker Desktop v4.42.0 (#1505) * Add JsonIgnore attribute to Platform property to prevent deserialization Co-authored-by: WardenGnaw <3953714+WardenGnaw@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: WardenGnaw <3953714+WardenGnaw@users.noreply.github.com> --- src/SSHDebugPS/Docker/DockerContainerInstance.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SSHDebugPS/Docker/DockerContainerInstance.cs b/src/SSHDebugPS/Docker/DockerContainerInstance.cs index 61b95713f..810975773 100644 --- a/src/SSHDebugPS/Docker/DockerContainerInstance.cs +++ b/src/SSHDebugPS/Docker/DockerContainerInstance.cs @@ -62,6 +62,7 @@ private DockerContainerInstance() { } [JsonProperty("CreatedAt")] public string Created { get; private set; } + [JsonIgnore] public string Platform { get; set; } #endregion From 7a8b338aa0225aaa65d6da55a71ae537aba4ad89 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Mon, 23 Jun 2025 10:01:44 -0700 Subject: [PATCH 10/28] Update MS.VS. Packages for CG Alert (#1508) This PR also updates the PIA tool to handle AssemblyKeyFileAttribute and AssemblySignatureKeyAttribute --- build/package_versions.settings.targets | 10 +++++----- src/tools/MakePIAPortableTool/MakePIAPortableTool.cs | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/build/package_versions.settings.targets b/build/package_versions.settings.targets index b869f0778..ebddc4a8a 100644 --- a/build/package_versions.settings.targets +++ b/build/package_versions.settings.targets @@ -1,7 +1,7 @@ 1.0.1 - 17.12.40391 + 17.13.40008 13.0.3 17.14.10225.1 @@ -26,13 +26,13 @@ 17.5.33428.366 17.5.33428.366 17.12.40392 - 17.12.40391 - 17.12.19 - 17.12.40391 + 17.13.40008 + 17.13.2 + 17.13.40008 15.0.26932 15.0.392 15.0.392 - 17.12.40391 + 17.13.40008 17.3.2093 4.3.0 diff --git a/src/tools/MakePIAPortableTool/MakePIAPortableTool.cs b/src/tools/MakePIAPortableTool/MakePIAPortableTool.cs index 7019f918e..3a9bcfbc3 100644 --- a/src/tools/MakePIAPortableTool/MakePIAPortableTool.cs +++ b/src/tools/MakePIAPortableTool/MakePIAPortableTool.cs @@ -40,6 +40,8 @@ class Program { "System.Collections.Generic.IEnumerable", System_Runtime }, { "System.Reflection.DefaultMemberAttribute", System_Runtime }, { "System.Reflection.AssemblyDelaySignAttribute", System_Runtime}, + { "System.Reflection.AssemblyKeyFileAttribute", System_Runtime }, + { "System.Reflection.AssemblySignatureKeyAttribute", System_Runtime }, { "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", System_Runtime }, { "System.Runtime.CompilerServices.RuntimeCompatibilityAttribute", System_Runtime }, { "System.Diagnostics.DebuggableAttribute", System_Runtime }, From 1b8a2336b47daad3f5d1f6b501ac9784b5187668 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Mon, 30 Jun 2025 17:01:12 -0700 Subject: [PATCH 11/28] Build improvements (#1510) ## Changes This PR contains two fixes to make MIEngine's build work better on my machine: 1. The incremental build rules were incorrect for MakePIAPortable, so it could run when it didn't need to, and it might not run when it was necessary. 2. On one of my machines, the sgen code didn't work anymore as it couldn't find csc.exe. This switches to using the `Csc` task instead. ## Testing - Verified MakePIAPortable doesn't run the `GeneratePortablePIA` target after touching dummy.cs - Verified MakePIAPortable runs the `GeneratePortablePIA` target after touching package_versions.settings.targets - Verified no IL differences in Microsoft.MICore.XmlSerializers.dll between the version currently shipping in VS and a locally compiled Lab.Release version - Verified no IL differences in Microsoft.MICore.XmlSerializers.dll between current main build and build with these changes --- .../GenerateXmlSerializersAssembly.targets | 29 +++++++++++-------- src/MakePIAPortable/MakePIAPortable.csproj | 12 ++++++-- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/MICore/GenerateXmlSerializersAssembly.targets b/src/MICore/GenerateXmlSerializersAssembly.targets index fba2f522f..652d2010a 100755 --- a/src/MICore/GenerateXmlSerializersAssembly.targets +++ b/src/MICore/GenerateXmlSerializersAssembly.targets @@ -80,32 +80,37 @@ If TEST_LAB_BUILD is set, we are public signing. sgen.exe does not have -publicsign and does not work if a keyfile is passed in. --> - /keyfile:$(AssemblyOriginatorKeyFile) - + $(AssemblyOriginatorKeyFile) + /keyfile:$(SerializationSigningKeyFile) + - $(SerializationSigningCompilerOptions) /delaysign $(MIEngineRoot)src\MICore\SGEN_SHA2_SIGNATUREKEY - - $(CscToolPath)$(CscToolExe) - $(MSBuildBinPath)\csc.exe - $(MSBuildBinPath)\roslyn\csc.exe - - - $(RoslynTargetsPath)\csc.exe + SGEN_SHA2_SIGNATUREKEY + $(SerializationSigningCompilerOptions) /delaysign $(MIEngineRoot)src\MICore\$(SgenSha2SignatureKeyFile) $(MSBuildFrameworkToolsPath) - - + diff --git a/src/MakePIAPortable/MakePIAPortable.csproj b/src/MakePIAPortable/MakePIAPortable.csproj index 235f6baf0..4c51828d1 100644 --- a/src/MakePIAPortable/MakePIAPortable.csproj +++ b/src/MakePIAPortable/MakePIAPortable.csproj @@ -65,9 +65,17 @@ $(MIDefaultOutputPath)tools\MakePIAPortableTool.dll true + ..\..\build\package_versions.settings.targets - - + + + + + + + From 23718f86706f7b12439c55c88ff3f3d6149a1f4a Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Wed, 20 Aug 2025 17:25:31 -0700 Subject: [PATCH 12/28] Remove IOSDebugLauncher (#1511) This PR removes the iOS MDD C++ Debugging support in MIEngine. --- README.md | 5 +- src/IOSDebugLauncher/IOSDebugLauncher.csproj | 69 ------- src/IOSDebugLauncher/IOSLaunchOptions.cs | 57 ------ src/IOSDebugLauncher/Launcher.cs | 182 ------------------ src/IOSDebugLauncher/LauncherException.cs | 19 -- .../LauncherResources.Designer.cs | 180 ----------------- src/IOSDebugLauncher/LauncherResources.resx | 159 --------------- .../Microsoft.IOSDebugLauncher.pkgdef | 4 - .../Properties/AssemblyInfo.cs | 22 --- src/IOSDebugLauncher/RequestAuthHandler.cs | 86 --------- src/IOSDebugLauncher/Telemetry.cs | 94 --------- src/IOSDebugLauncher/VcRemoteClient.cs | 168 ---------------- src/MICore/LaunchOptions.cs | 5 +- src/MICore/MICoreResources.Designer.cs | 11 +- src/MICore/MICoreResources.resx | 3 + src/MIDebugEngine.sln | 11 -- src/MIDebugPackage/Install.cmd | 2 +- src/MIDebugPackage/MIDebugPackage.csproj | 11 +- .../source.extension.vsixmanifest | 1 - test/MIEngine.regdef | 7 +- tools/VS.list | 2 - 21 files changed, 20 insertions(+), 1078 deletions(-) delete mode 100755 src/IOSDebugLauncher/IOSDebugLauncher.csproj delete mode 100644 src/IOSDebugLauncher/IOSLaunchOptions.cs delete mode 100644 src/IOSDebugLauncher/Launcher.cs delete mode 100644 src/IOSDebugLauncher/LauncherException.cs delete mode 100644 src/IOSDebugLauncher/LauncherResources.Designer.cs delete mode 100644 src/IOSDebugLauncher/LauncherResources.resx delete mode 100644 src/IOSDebugLauncher/Microsoft.IOSDebugLauncher.pkgdef delete mode 100644 src/IOSDebugLauncher/Properties/AssemblyInfo.cs delete mode 100644 src/IOSDebugLauncher/RequestAuthHandler.cs delete mode 100644 src/IOSDebugLauncher/Telemetry.cs delete mode 100644 src/IOSDebugLauncher/VcRemoteClient.cs diff --git a/README.md b/README.md index 60b3c3a37..0deed2038 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,9 @@ This repo also includes: ### Debug Multiple Platforms -* Support for debugging C/C++ on [Android](http://blogs.msdn.com/b/vcblog/archive/2014/12/12/debug-jni-android-applications-using-visual-c-cross-platform-mobile.aspx) and [iOS](http://blogs.msdn.com/b/vcblog/archive/2015/04/29/debugging-c-code-on-ios-with-visual-studio-2015.aspx). -* Debug on any platform that supports GDB, such as Linux and even [Raspberry Pi](http://blogs.msdn.com/b/vcblog/archive/2015/04/29/debug-c-code-on-linux-from-visual-studio.aspx). +* Support for debugging C/C++ on [Android](http://blogs.msdn.com/b/vcblog/archive/2014/12/12/debug-jni-android-applications-using-visual-c-cross-platform-mobile.aspx) ~~and [iOS](http://blogs.msdn.com/b/vcblog/archive/2015/04/29/debugging-c-code-on-ios-with-visual-studio-2015.aspx).~~ + * Note: iOS support is not available after Visual Studio 2022. +* * Debug on any platform that supports GDB, such as Linux and even [Raspberry Pi](http://blogs.msdn.com/b/vcblog/archive/2015/04/29/debug-c-code-on-linux-from-visual-studio.aspx). ### Prerequisites MIEngine can be built with either [Visual Studio](https://visualstudio.microsoft.com/downloads/) or with the [.NET CLI](https://dotnet.microsoft.com/download/dotnet). diff --git a/src/IOSDebugLauncher/IOSDebugLauncher.csproj b/src/IOSDebugLauncher/IOSDebugLauncher.csproj deleted file mode 100755 index 2de6b9236..000000000 --- a/src/IOSDebugLauncher/IOSDebugLauncher.csproj +++ /dev/null @@ -1,69 +0,0 @@ - - - - {D2A11674-F677-4B11-9989-2F6099A6F0A2} - Library - Properties - IOSDebugLauncher - Microsoft.IOSDebugLauncher - net472 - 512 - - $(MIDefaultOutputPath) - - - - - True - True - LauncherResources.resx - - - - - - ResXFileCodeGenerator - LauncherResources.Designer.cs - - - - - - - - - - False - - - False - - - - - - Always - - - - - - {ea876a2d-ab0f-4204-97dd-dfb3b5568978} - DebugEngineHost.Stub - False - - - {54c33afa-438d-4932-a2f0-d0f2bb2fadc9} - MICore - - - - - - \ No newline at end of file diff --git a/src/IOSDebugLauncher/IOSLaunchOptions.cs b/src/IOSDebugLauncher/IOSLaunchOptions.cs deleted file mode 100644 index e45404cb9..000000000 --- a/src/IOSDebugLauncher/IOSLaunchOptions.cs +++ /dev/null @@ -1,57 +0,0 @@ -// 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.Text; -using System.Threading.Tasks; -using System.Xml; - -using MICore; -using System.Runtime.InteropServices; -using System.IO; -using System.Globalization; -using System.Diagnostics; - -namespace IOSDebugLauncher -{ - public enum IOSDebugTarget - { - Device, - Simulator, - } - - internal class IOSLaunchOptions - { - public IOSLaunchOptions(string exePath, MICore.Xml.LaunchOptions.IOSLaunchOptions xmlOptions) - { - if (string.IsNullOrEmpty(exePath)) - throw new ArgumentNullException(nameof(exePath)); - if (xmlOptions == null) - throw new ArgumentNullException(nameof(xmlOptions)); - - this.ExePath = exePath; - this.RemoteMachineName = LaunchOptions.RequireAttribute(xmlOptions.RemoteMachineName, "RemoteMachineName"); - this.PackageId = LaunchOptions.RequireAttribute(xmlOptions.PackageId, "PackageId"); - this.VcRemotePort = LaunchOptions.RequirePortAttribute(xmlOptions.vcremotePort, "vcremotePort"); - Debug.Assert((uint)IOSDebugTarget.Device == (uint)MICore.Xml.LaunchOptions.IOSLaunchOptionsIOSDebugTarget.Device); - Debug.Assert((uint)IOSDebugTarget.Simulator == (uint)MICore.Xml.LaunchOptions.IOSLaunchOptionsIOSDebugTarget.Simulator); - this.IOSDebugTarget = (IOSDebugTarget)xmlOptions.IOSDebugTarget; - this.TargetArchitecture = LaunchOptions.ConvertTargetArchitectureAttribute(xmlOptions.TargetArchitecture); - this.AdditionalSOLibSearchPath = xmlOptions.AdditionalSOLibSearchPath; - this.Secure = (xmlOptions.Secure == MICore.Xml.LaunchOptions.IOSLaunchOptionsSecure.True); - this.DeviceUdid = xmlOptions.DeviceUdid ?? string.Empty; - } - - public string ExePath { get; private set; } - public string RemoteMachineName { get; private set; } - public string PackageId { get; private set; } - public int VcRemotePort { get; private set; } - public IOSDebugTarget IOSDebugTarget { get; private set; } - public string DeviceUdid { get; private set; } - public TargetArchitecture TargetArchitecture { get; private set; } - public string AdditionalSOLibSearchPath { get; private set; } - public bool Secure { get; private set; } - } -} diff --git a/src/IOSDebugLauncher/Launcher.cs b/src/IOSDebugLauncher/Launcher.cs deleted file mode 100644 index 9c5461a4c..000000000 --- a/src/IOSDebugLauncher/Launcher.cs +++ /dev/null @@ -1,182 +0,0 @@ -// 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.Collections.ObjectModel; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Net.Security; -using System.Runtime.InteropServices; -using System.Security.Cryptography.X509Certificates; -using MICore; -using Microsoft.DebugEngineHost; -using Newtonsoft.Json; - -namespace IOSDebugLauncher -{ - [ComVisible(true)] - [Guid("316783D1-1824-4847-B3D3-FB048960EDCF")] - internal class Launcher : IPlatformAppLauncher - { - private IDeviceAppLauncherEventCallback _callback; - private IOSLaunchOptions _launchOptions; - private VcRemoteClient _client; - private string _appRemotePath; - - private bool _onResumeCalled = false; - - internal class RemotePorts - { - [JsonProperty(PropertyName = "idevicedebugserverproxyport")] - public int IDeviceDebugServerProxyPort { get; set; } - [JsonProperty(PropertyName = "debugListenerPort")] - public int DebugListenerPort { get; set; } - } - private RemotePorts _remotePorts; - - void IPlatformAppLauncher.Initialize(HostConfigurationStore configStore, IDeviceAppLauncherEventCallback eventCallback) - { - _callback = eventCallback; - } - - void IPlatformAppLauncher.SetLaunchOptions(string exePath, string args, string dir, object launcherXmlOptions, TargetEngine targetEngine) - { - if (launcherXmlOptions == null) - throw new ArgumentNullException(nameof(launcherXmlOptions)); - - if (targetEngine != TargetEngine.Native) - throw new LauncherException(String.Format(CultureInfo.CurrentCulture, LauncherResources.Error_BadTargetEngine, targetEngine.ToString())); - - var iosXmlOptions = (MICore.Xml.LaunchOptions.IOSLaunchOptions)launcherXmlOptions; - - if (_callback == null) - { - Debug.Fail("Why is ParseLaunchOptions called before Initialize?"); - throw new InvalidOperationException(); - } - - if (_launchOptions != null) - { - Debug.Fail("Why is ParseLaunchOptions being called more than once?"); - throw new InvalidOperationException(); - } - - _launchOptions = new IOSLaunchOptions(exePath, iosXmlOptions); - } - - void IPlatformAppLauncher.SetupForDebugging(out LaunchOptions debuggerLaunchOptions) - { - if (_launchOptions == null) - { - Debug.Fail("Why is SetupForDebugging being called before ParseLaunchOptions?"); - throw new InvalidOperationException(); - } - - _client = VcRemoteClient.GetInstance(_launchOptions); - - _remotePorts = _client.StartDebugListener(); - - if (_launchOptions.IOSDebugTarget == IOSDebugTarget.Device) - { - _appRemotePath = _client.GetRemoteAppPath(); - } - - debuggerLaunchOptions = new TcpLaunchOptions(_launchOptions.RemoteMachineName, _remotePorts.DebugListenerPort, _launchOptions.Secure); - - if (_client.ServerCertificateValidationCallback != null) - { - (debuggerLaunchOptions as TcpLaunchOptions).ServerCertificateValidationCallback = (object sender, object/*X509Certificate*/ certificate, object/*X509Chain*/ chain, SslPolicyErrors sslPolicyErrors) => - { - return _client.ServerCertificateValidationCallback(sender, (X509Certificate)certificate, (X509Chain)chain, sslPolicyErrors); - }; - } - - debuggerLaunchOptions.TargetArchitecture = _launchOptions.TargetArchitecture; - debuggerLaunchOptions.AdditionalSOLibSearchPath = _launchOptions.AdditionalSOLibSearchPath; - debuggerLaunchOptions.DebuggerMIMode = MIMode.Lldb; - debuggerLaunchOptions.CustomLaunchSetupCommands = GetCustomLaunchSetupCommands(); - debuggerLaunchOptions.LaunchCompleteCommand = GetLaunchCompleteCommand(); - } - - private ReadOnlyCollection GetCustomLaunchSetupCommands() - { - var commands = new List(); - - string fileCommand = String.Empty; - - if (_launchOptions.IOSDebugTarget == IOSDebugTarget.Device) - { - fileCommand = string.Format(CultureInfo.InvariantCulture, "-file-exec-and-symbols \"{0}\" -p remote-ios -r \"{1}\"", _launchOptions.ExePath, _appRemotePath); - } - else - { - fileCommand = string.Format(CultureInfo.InvariantCulture, "-file-exec-and-symbols \"{0}\" -p ios-simulator", _launchOptions.ExePath); - } - - string targetCommand = string.Format(CultureInfo.InvariantCulture, "-target-select remote localhost:{0}", _remotePorts.IDeviceDebugServerProxyPort.ToString(CultureInfo.InvariantCulture)); - string breakInMainCommand = string.Format(CultureInfo.InvariantCulture, "-break-insert main"); - - commands.Add(new LaunchCommand(fileCommand, LauncherResources.DefinePlatform)); - commands.Add(new LaunchCommand(targetCommand, LauncherResources.Connecting)); - commands.Add(new LaunchCommand(breakInMainCommand, LauncherResources.SettingBreakpoint)); - - if (_launchOptions.IOSDebugTarget == IOSDebugTarget.Simulator) - { - string file = Path.GetFileName(_launchOptions.ExePath); - if (!String.IsNullOrWhiteSpace(file) && file.EndsWith(".app", StringComparison.Ordinal)) - { - file = file.Substring(0, file.Length - 4); - } - if (!String.IsNullOrWhiteSpace(file)) - { - string targetAttachCommand = string.Format(CultureInfo.InvariantCulture, "-target-attach -n {0} --waitfor", file); - string launchMessage = string.Format(CultureInfo.CurrentCulture, LauncherResources.WaitingForApp, file); - commands.Add(new LaunchCommand(targetAttachCommand, launchMessage)); - } - else - { - throw new Exception(String.Format(CultureInfo.InvariantCulture, LauncherResources.BadNameFormat, _launchOptions.ExePath)); - } - } - return commands.AsReadOnly(); - } - - private LaunchCompleteCommand GetLaunchCompleteCommand() - { - if (_launchOptions.IOSDebugTarget == IOSDebugTarget.Simulator) - { - return LaunchCompleteCommand.ExecContinue; - } - else - { - return LaunchCompleteCommand.ExecRun; - } - } - - void IPlatformAppLauncher.OnResume() - { - _onResumeCalled = true; - Telemetry.SendLaunchError(Telemetry.LaunchFailureCode.LaunchSuccess.ToString(), _launchOptions.IOSDebugTarget); - //Nothing to do for this. - } - - public void Dispose() - { - if (_client != null) - { - _client.Dispose(); - } - } - - public void Terminate() - { - if (!_onResumeCalled) - { - Telemetry.SendLaunchError(Telemetry.LaunchFailureCode.LaunchFailure.ToString(), _launchOptions.IOSDebugTarget); - } - //Nothing to do for this. - } - } -} diff --git a/src/IOSDebugLauncher/LauncherException.cs b/src/IOSDebugLauncher/LauncherException.cs deleted file mode 100644 index 67031a1c5..000000000 --- a/src/IOSDebugLauncher/LauncherException.cs +++ /dev/null @@ -1,19 +0,0 @@ -// 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.Text; -using System.Threading.Tasks; - -namespace IOSDebugLauncher -{ - internal class LauncherException : Exception - { - public LauncherException(string message) - : base(message) - { - } - } -} diff --git a/src/IOSDebugLauncher/LauncherResources.Designer.cs b/src/IOSDebugLauncher/LauncherResources.Designer.cs deleted file mode 100644 index a5376b6df..000000000 --- a/src/IOSDebugLauncher/LauncherResources.Designer.cs +++ /dev/null @@ -1,180 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace IOSDebugLauncher { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // 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.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class LauncherResources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal LauncherResources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("IOSDebugLauncher.LauncherResources", typeof(LauncherResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Cannot get name from executable path '{0}'.. - /// - internal static string BadNameFormat { - get { - return ResourceManager.GetString("BadNameFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connecting to remote device or simulator. - /// - internal static string Connecting { - get { - return ResourceManager.GetString("Connecting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Defining platform and loading executable for debugging. - /// - internal static string DefinePlatform { - get { - return ResourceManager.GetString("DefinePlatform", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An incorrect response was received from vcremote. Make sure that a compatible vcremote is installed on the remote machine.. - /// - internal static string Error_BadJSon { - get { - return ResourceManager.GetString("Error_BadJSon", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot launch iOS debugging for target engine '{0}'.. - /// - internal static string Error_BadTargetEngine { - get { - return ResourceManager.GetString("Error_BadTargetEngine", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to reach the vcremote server. Make sure that the vcremote server is running and is configured with the same security setting as Visual Studio.. - /// - internal static string Error_UnableToReachServer { - get { - return ResourceManager.GetString("Error_UnableToReachServer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unauthorized Request. Use vcremote to generate a new client certificate and enter the PIN in project properties.. - /// - internal static string Error_Unauthorized { - get { - return ResourceManager.GetString("Error_Unauthorized", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown or unsupported debug target '{0}'.. - /// - internal static string Error_UnknownDebugTarget { - get { - return ResourceManager.GetString("Error_UnknownDebugTarget", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unexecpted failure trying to reach vcremote: {0}. - /// - internal static string Error_VcRemoteUnknown { - get { - return ResourceManager.GetString("Error_VcRemoteUnknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Obtaining information from vcremote.. - /// - internal static string Info_GettingInfo { - get { - return ResourceManager.GetString("Info_GettingInfo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting Remote Debug Listener.. - /// - internal static string Info_StartingDebugListener { - get { - return ResourceManager.GetString("Info_StartingDebugListener", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Setting initial breakpoint. - /// - internal static string SettingBreakpoint { - get { - return ResourceManager.GetString("SettingBreakpoint", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting for application to launch. Please (re)start application '{0}' in the simulator.. - /// - internal static string WaitingForApp { - get { - return ResourceManager.GetString("WaitingForApp", resourceCulture); - } - } - } -} diff --git a/src/IOSDebugLauncher/LauncherResources.resx b/src/IOSDebugLauncher/LauncherResources.resx deleted file mode 100644 index ef10d6381..000000000 --- a/src/IOSDebugLauncher/LauncherResources.resx +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Cannot get name from executable path '{0}'. - - - Connecting to remote device or simulator - - - Defining platform and loading executable for debugging - - - An incorrect response was received from vcremote. Make sure that a compatible vcremote is installed on the remote machine. - - - Cannot launch iOS debugging for target engine '{0}'. - - - Unable to reach the vcremote server. Make sure that the vcremote server is running and is configured with the same security setting as Visual Studio. - - - Unauthorized Request. Use vcremote to generate a new client certificate and enter the PIN in project properties. - - - Unknown or unsupported debug target '{0}'. - - - Unexecpted failure trying to reach vcremote: {0} - - - Obtaining information from vcremote. - - - Starting Remote Debug Listener. - - - Setting initial breakpoint - - - Waiting for application to launch. Please (re)start application '{0}' in the simulator. - - \ No newline at end of file diff --git a/src/IOSDebugLauncher/Microsoft.IOSDebugLauncher.pkgdef b/src/IOSDebugLauncher/Microsoft.IOSDebugLauncher.pkgdef deleted file mode 100644 index e7e85df6e..000000000 --- a/src/IOSDebugLauncher/Microsoft.IOSDebugLauncher.pkgdef +++ /dev/null @@ -1,4 +0,0 @@ -[$RootKey$\CLSID\{316783D1-1824-4847-B3D3-FB048960EDCF}] -"Assembly"="Microsoft.IOSDebugLauncher" -"Class"="IOSDebugLauncher.Launcher" -"CodeBase"="$PackageFolder$\Microsoft.IOSDebugLauncher.dll" \ No newline at end of file diff --git a/src/IOSDebugLauncher/Properties/AssemblyInfo.cs b/src/IOSDebugLauncher/Properties/AssemblyInfo.cs deleted file mode 100644 index a8ed6cb46..000000000 --- a/src/IOSDebugLauncher/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IOSDebugLauncher")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("6f721eab-b52d-424a-a314-44ec11e671fb")] diff --git a/src/IOSDebugLauncher/RequestAuthHandler.cs b/src/IOSDebugLauncher/RequestAuthHandler.cs deleted file mode 100644 index 5c61664c9..000000000 --- a/src/IOSDebugLauncher/RequestAuthHandler.cs +++ /dev/null @@ -1,86 +0,0 @@ -// 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.Net.Http; -using System.Net.Security; -using System.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; - -namespace IOSDebugLauncher -{ - internal class RequestAuthHandler : WebRequestHandler - { - /// - /// Creates a new instance of the RequestAuthHandler class. - /// - public RequestAuthHandler() - { - this.ClientCertificateOptions = ClientCertificateOption.Automatic; - this.UseDefaultCredentials = false; - this.UseProxy = false; - this.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { - if (sslPolicyErrors == SslPolicyErrors.None) - return true; - if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch) != 0) - { - if (sender is HttpWebRequest) - { - var request2 = sender as HttpWebRequest; - var requestUri = request2.RequestUri; - if (requestUri.HostNameType == UriHostNameType.IPv4 || requestUri.HostNameType == UriHostNameType.IPv6 || requestUri.HostNameType == UriHostNameType.Dns) - { - X509Extension ext2 = (certificate as X509Certificate2).Extensions["Subject Alternative Name"]; - if (ext2 != null) - { - string subjAltName = ext2.Format(false); - if (subjAltName.IndexOf(requestUri.Host, StringComparison.OrdinalIgnoreCase) == -1) - return false; - } - else - return false; - } - else - return false; - } - else if (sender is SslStream) - { - //nothing to do, fall through - } - else - return false; - } - if ((sslPolicyErrors & System.Net.Security.SslPolicyErrors.RemoteCertificateChainErrors) != 0) - { - if (chain != null && chain.ChainStatus != null) - { - foreach (System.Security.Cryptography.X509Certificates.X509ChainStatus status in chain.ChainStatus) - { - if (status.Status == System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.UntrustedRoot) - { - // Self-signed certificates with an untrusted root are valid. - continue; - } - else - { - if (status.Status != System.Security.Cryptography.X509Certificates.X509ChainStatusFlags.NoError) - { - // If there are any other errors in the certificate chain, the certificate is invalid, - // so the method returns false. - return false; - } - } - } - return true; - } - } - return false; - }; - } - } -} diff --git a/src/IOSDebugLauncher/Telemetry.cs b/src/IOSDebugLauncher/Telemetry.cs deleted file mode 100644 index 2e0eefc42..000000000 --- a/src/IOSDebugLauncher/Telemetry.cs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.DebugEngineHost; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace IOSDebugLauncher -{ - /// - /// Class for sending telemetry - /// - internal static class Telemetry - { - private const string Event_LaunchError = @"VS/Diagnostics/Debugger/iOS/LaunchFailure"; - private const string Property_LaunchErrorResult = @"VS.Diagnostics.Debugger.iOS.FailureResult"; - private const string Property_LaunchErrorTarget = @"VS.Diagnostics.Debugger.iOS.Target"; - - private const string Event_VcRemoteClientError = @"VS/Diagnostics/Debugger/iOS/VcRemoteClientFailure"; - private const string Property_VcRemoteClientErrorResult = @"VS.Diagnostics.Debugger.iOS.VcRemoteClientFailureResult"; - - - #region LaunchFailure support - - public enum LaunchFailureCode - { - /// - /// Indicates that the error shouldn't be sent to telemetry - /// - NoReport, - - /// - /// No error, launch is success - /// - LaunchSuccess, - - /// - /// Launch failed for unkown reason - /// - LaunchFailure, - - /// - /// vcremote is returning json that cannot be parsed correctly - /// - BadJson, - - /// - /// vcremote was unable to return a remote path for the given packageID - /// - BadPackageId, - }; - - public enum VcRemoteFailureCode - { - /// - /// Indicates no error occured when calling vcremote - /// - VcRemoteSucces, - - /// - /// Unable to access vcremote due to bad authorization (certificate issue) - /// - VcRemoteUnauthorized, - - /// - /// Unable to reach vcremote for some reason - /// - VcRemoteNoConnection, - - /// - /// Unknown Error from vcremote - /// - VcRemoteUnkown, - } - - public static void SendLaunchError(string failureCode, IOSDebugTarget target) - { - HostTelemetry.SendEvent(Event_LaunchError, - new KeyValuePair(Property_LaunchErrorResult, failureCode), - new KeyValuePair(Property_LaunchErrorTarget, target.ToString()) - ); - } - - public static void SendVcRemoteClientError(string failureCode) - { - HostTelemetry.SendEvent(Event_VcRemoteClientError, new KeyValuePair(Property_VcRemoteClientErrorResult, failureCode)); - } - - #endregion - } -} diff --git a/src/IOSDebugLauncher/VcRemoteClient.cs b/src/IOSDebugLauncher/VcRemoteClient.cs deleted file mode 100644 index 30e5aeb2f..000000000 --- a/src/IOSDebugLauncher/VcRemoteClient.cs +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.DebugEngineHost; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Security; -using System.Runtime.ExceptionServices; -using System.Text; -using System.Threading; -using System.Threading.Tasks; - -namespace IOSDebugLauncher -{ - internal class VcRemoteClient : HttpClient - { - private IOSLaunchOptions _launchOptions; - - private VcRemoteClient() - : base() - { - } - - private VcRemoteClient(HttpMessageHandler handler) - : base(handler, true) - { - } - - public static VcRemoteClient GetInstance(IOSLaunchOptions options) - { - VcRemoteClient client = null; - string baseAddressFormat = string.Empty; - if (options.Secure) - { - var handler = new RequestAuthHandler(); - client = new VcRemoteClient(handler); - client.ServerCertificateValidationCallback = handler.ServerCertificateValidationCallback; - baseAddressFormat = @"https://{0}:{1}/"; - } - else - { - client = new VcRemoteClient(); - baseAddressFormat = @"http://{0}:{1}/"; - } - client.BaseAddress = new Uri(string.Format(CultureInfo.InvariantCulture, baseAddressFormat, options.RemoteMachineName, options.VcRemotePort)); - client.Timeout = new TimeSpan(0, 0, 10); //10 second timeout - client.Secure = options.Secure; - client._launchOptions = options; - - return client; - } - - public Launcher.RemotePorts StartDebugListener() - { - string remotePortsJsonString; - CallVcRemote(new Uri("debug/setupForDebugging?target=" + _launchOptions.IOSDebugTarget.ToString() + "&deviceUdid=" + _launchOptions.DeviceUdid, UriKind.Relative), LauncherResources.Info_StartingDebugListener, out remotePortsJsonString); - - try - { - return JsonConvert.DeserializeObject(remotePortsJsonString); - } - catch (JsonException) - { - Telemetry.SendLaunchError(Telemetry.LaunchFailureCode.BadJson.ToString(), _launchOptions.IOSDebugTarget); - throw new LauncherException(LauncherResources.Error_BadJSon); - } - } - - public string GetRemoteAppPath() - { - string appPath = string.Empty; - var response = CallVcRemote(new Uri("debug/appRemotePath?package=" + _launchOptions.PackageId + "&deviceUdid=" + _launchOptions.DeviceUdid, UriKind.Relative), LauncherResources.Info_GettingInfo, out appPath); - - if (string.IsNullOrWhiteSpace(appPath)) - { - Telemetry.SendLaunchError(Telemetry.LaunchFailureCode.BadPackageId.ToString(), _launchOptions.IOSDebugTarget); - Debug.Fail("Invalid return from vcremote for packageId"); - throw new InvalidOperationException(); - } - - return appPath; - } - - private HttpResponseMessage CallVcRemote(Uri endpoint, string waitLoopMessage, out string responseBody) - { - ManualResetEvent doneEvent = new ManualResetEvent(false); - CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); - var waitLoop = new HostWaitLoop(waitLoopMessage); - ExceptionDispatchInfo exceptionDispatchInfo = null; - - HttpResponseMessage response = null; - string content = null; - ThreadPool.QueueUserWorkItem(async (object o) => - { - string failureCode = Telemetry.VcRemoteFailureCode.VcRemoteSucces.ToString(); - - try - { - response = await this.GetAsync(endpoint, cancellationTokenSource.Token); - response.EnsureSuccessStatusCode(); - - content = await response.Content.ReadAsStringAsync(); - } - catch (HttpRequestException) - { - if (response != null) - { - if (response.StatusCode == HttpStatusCode.Unauthorized) - { - exceptionDispatchInfo = ExceptionDispatchInfo.Capture(new LauncherException(LauncherResources.Error_Unauthorized)); - failureCode = Telemetry.VcRemoteFailureCode.VcRemoteUnauthorized.ToString(); - } - else - { - exceptionDispatchInfo = ExceptionDispatchInfo.Capture(new LauncherException(string.Format(CultureInfo.CurrentCulture, LauncherResources.Error_VcRemoteUnknown, response.StatusCode.ToString()))); - failureCode = Telemetry.VcRemoteFailureCode.VcRemoteUnkown.ToString(); - } - } - else - { - exceptionDispatchInfo = ExceptionDispatchInfo.Capture(new LauncherException(LauncherResources.Error_UnableToReachServer)); - failureCode = Telemetry.VcRemoteFailureCode.VcRemoteNoConnection.ToString(); - } - } - catch (TaskCanceledException) - { - //timeout - exceptionDispatchInfo = ExceptionDispatchInfo.Capture(new LauncherException(LauncherResources.Error_UnableToReachServer)); - failureCode = Telemetry.VcRemoteFailureCode.VcRemoteNoConnection.ToString(); - } - catch (Exception e) - { - exceptionDispatchInfo = ExceptionDispatchInfo.Capture(e); - failureCode = e.GetType().FullName; - } - - doneEvent.Set(); - - Telemetry.SendLaunchError(failureCode, _launchOptions.IOSDebugTarget); - }); - - waitLoop.Wait(doneEvent, cancellationTokenSource); - - if (exceptionDispatchInfo != null) - { - exceptionDispatchInfo.Throw(); - } - - if (response == null) - { - Debug.Fail("Null resposne? Should be impossible."); - throw new InvalidOperationException(); - } - - responseBody = content; - return response; - } - - public RemoteCertificateValidationCallback ServerCertificateValidationCallback { get; private set; } - public bool Secure { get; private set; } - } -} diff --git a/src/MICore/LaunchOptions.cs b/src/MICore/LaunchOptions.cs index 6b8f91e05..dbe934817 100644 --- a/src/MICore/LaunchOptions.cs +++ b/src/MICore/LaunchOptions.cs @@ -1341,11 +1341,8 @@ public static LaunchOptions GetInstance(HostConfigurationStore configStore, stri case "IOSLaunchOptions": { - serializer = GetXmlSerializer(typeof(IOSLaunchOptions)); - launcherXmlOptions = Deserialize(serializer, reader); - clsidLauncher = new Guid("316783D1-1824-4847-B3D3-FB048960EDCF"); + throw new InvalidLaunchOptionsException(MICoreResources.Error_Deprecated_iOS_Debugging); } - break; case "AndroidLaunchOptions": { diff --git a/src/MICore/MICoreResources.Designer.cs b/src/MICore/MICoreResources.Designer.cs index 20e83aedb..bb4c11247 100755 --- a/src/MICore/MICoreResources.Designer.cs +++ b/src/MICore/MICoreResources.Designer.cs @@ -19,7 +19,7 @@ namespace MICore { // 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()] public class MICoreResources { @@ -138,6 +138,15 @@ public static string Error_DebugServerInitializationFailed { } } + /// + /// Looks up a localized string similar to Debugging C++ on iOS Mobile has been deprecated and is no longer available. + /// + public static string Error_Deprecated_iOS_Debugging { + get { + return ResourceManager.GetString("Error_Deprecated_iOS_Debugging", resourceCulture); + } + } + /// /// Looks up a localized string similar to PipePath cannot be empty.. /// diff --git a/src/MICore/MICoreResources.resx b/src/MICore/MICoreResources.resx index 0421a7999..a5d886e53 100755 --- a/src/MICore/MICoreResources.resx +++ b/src/MICore/MICoreResources.resx @@ -329,4 +329,7 @@ Error: {1} 'visualizerFile' must be a string or array of strings. + + Debugging C++ on iOS Mobile has been deprecated and is no longer available + \ No newline at end of file diff --git a/src/MIDebugEngine.sln b/src/MIDebugEngine.sln index 248c15efe..ed5df3b55 100755 --- a/src/MIDebugEngine.sln +++ b/src/MIDebugEngine.sln @@ -28,8 +28,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JDbg", "JDbg\JDbg.csproj", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JDbgUnitTests", "JDbgUnitTests\JDbgUnitTests.csproj", "{207FD4CC-116B-466D-8893-F9565248A085}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IOSDebugLauncher", "IOSDebugLauncher\IOSDebugLauncher.csproj", "{D2A11674-F677-4B11-9989-2F6099A6F0A2}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DebugEngineHost.Stub", "DebugEngineHost.Stub\DebugEngineHost.Stub.csproj", "{EA876A2D-AB0F-4204-97DD-DFB3B5568978}" ProjectSection(ProjectDependencies) = postProject {114039A0-87B5-425B-90C9-6AFC1960A247} = {114039A0-87B5-425B-90C9-6AFC1960A247} @@ -145,14 +143,6 @@ Global {207FD4CC-116B-466D-8893-F9565248A085}.Lab.Release|Any CPU.Build.0 = Lab.Release|Any CPU {207FD4CC-116B-466D-8893-F9565248A085}.Release|Any CPU.ActiveCfg = Release|Any CPU {207FD4CC-116B-466D-8893-F9565248A085}.Release|Any CPU.Build.0 = Release|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Lab.Debug|Any CPU.ActiveCfg = Lab.Debug|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Lab.Debug|Any CPU.Build.0 = Lab.Debug|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Lab.Release|Any CPU.ActiveCfg = Lab.Release|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Lab.Release|Any CPU.Build.0 = Lab.Release|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2A11674-F677-4B11-9989-2F6099A6F0A2}.Release|Any CPU.Build.0 = Release|Any CPU {EA876A2D-AB0F-4204-97DD-DFB3B5568978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EA876A2D-AB0F-4204-97DD-DFB3B5568978}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA876A2D-AB0F-4204-97DD-DFB3B5568978}.Lab.Debug|Any CPU.ActiveCfg = Lab.Debug|Any CPU @@ -298,7 +288,6 @@ Global {E0844BFF-2D67-4CB0-8E2A-E9CD888F2EB0} = {2865BFC4-770D-4219-945A-75670F98A6A6} {78728205-DB3E-4B7B-A7D2-5CBE38E9C607} = {2865BFC4-770D-4219-945A-75670F98A6A6} {207FD4CC-116B-466D-8893-F9565248A085} = {2865BFC4-770D-4219-945A-75670F98A6A6} - {D2A11674-F677-4B11-9989-2F6099A6F0A2} = {B864C337-1AA8-42B3-BF01-90901F55DE70} {AE7F97CA-DFD2-41BC-B581-98C91C83065C} = {B864C337-1AA8-42B3-BF01-90901F55DE70} {FCE5D242-33FC-4570-88F3-A3DDE8C27643} = {9D97EF1A-BCD5-4932-BBCC-98194CF8A841} {A65FA6DE-D455-4662-9593-8EBBE61BA134} = {9D97EF1A-BCD5-4932-BBCC-98194CF8A841} diff --git a/src/MIDebugPackage/Install.cmd b/src/MIDebugPackage/Install.cmd index d4012d878..48bd0afda 100644 --- a/src/MIDebugPackage/Install.cmd +++ b/src/MIDebugPackage/Install.cmd @@ -35,7 +35,7 @@ if NOT "%ERRORLEVEL%"=="0" echo ERROR: Must be called from an elevated command p set BackupDir=%DestDir%\.MDDDebuggerBackup\ set MDDDebuggerDir=%DestDir%\Common7\IDE\CommonExtensions\Microsoft\MDD\Debugger\ -set FilesToInstall=Microsoft.MICore.dll Microsoft.MIDebugEngine.dll Microsoft.MIDebugEngine.pkgdef Microsoft.MIDebugPackage.dll Microsoft.MIDebugPackage.pkgdef Microsoft.AndroidDebugLauncher.dll Microsoft.AndroidDebugLauncher.pkgdef Microsoft.IOSDebugLauncher.dll Microsoft.IOSDebugLauncher.pkgdef Microsoft.JDbg.dll Microsoft.DebugEngineHost.dll Microsoft.MICore.XmlSerializers.dll Microsoft.SSHDebugPS.dll Microsoft.SSHDebugPS.pkgdef OpenFolderSchema.json +set FilesToInstall=Microsoft.MICore.dll Microsoft.MIDebugEngine.dll Microsoft.MIDebugEngine.pkgdef Microsoft.MIDebugPackage.dll Microsoft.MIDebugPackage.pkgdef Microsoft.AndroidDebugLauncher.dll Microsoft.AndroidDebugLauncher.pkgdef Microsoft.JDbg.dll Microsoft.DebugEngineHost.dll Microsoft.MICore.XmlSerializers.dll Microsoft.SSHDebugPS.dll Microsoft.SSHDebugPS.pkgdef OpenFolderSchema.json REM Add in the Facade assemblies we need to run on the desktop CLR if we are running in VS 2015. In VS 2017, Roslyn adds these, so don't add our own copy. if not exist "%DestDir%\Common7\IDE\PrivateAssemblies\System.Diagnostics.Process.dll" set FilesToInstall=%FilesToInstall% System.Diagnostics.Process.dll System.IO.FileSystem.dll System.IO.FileSystem.Primitives.dll System.Net.Security.dll System.Net.Sockets.dll System.Reflection.TypeExtensions.dll System.Runtime.InteropServices.RuntimeInformation.dll System.Security.Cryptography.X509Certificates.dll System.Threading.Thread.dll diff --git a/src/MIDebugPackage/MIDebugPackage.csproj b/src/MIDebugPackage/MIDebugPackage.csproj index 8e136cb13..3e8ad4d68 100755 --- a/src/MIDebugPackage/MIDebugPackage.csproj +++ b/src/MIDebugPackage/MIDebugPackage.csproj @@ -163,9 +163,6 @@ - - - @@ -208,13 +205,7 @@ false all - - {d2a11674-f677-4b11-9989-2f6099a6f0a2} - IOSDebugLauncher - BuiltProjectOutputGroup;BuiltProjectOutputGroupDependencies;GetCopyToOutputDirectoryItems;SatelliteDllsProjectOutputGroup; - false - all - + {78728205-db3e-4b7b-a7d2-5cbe38e9c607} JDbg diff --git a/src/MIDebugPackage/source.extension.vsixmanifest b/src/MIDebugPackage/source.extension.vsixmanifest index b9a1df549..8d87e5a86 100644 --- a/src/MIDebugPackage/source.extension.vsixmanifest +++ b/src/MIDebugPackage/source.extension.vsixmanifest @@ -20,7 +20,6 @@ - diff --git a/test/MIEngine.regdef b/test/MIEngine.regdef index d28f1516e..e570b38ec 100644 --- a/test/MIEngine.regdef +++ b/test/MIEngine.regdef @@ -34,9 +34,4 @@ Windows Registry Editor Version 5.00 [$RootKey$\CLSID\{C9A403DA-D3AA-4632-A572-E81FF6301E9B}] "Assembly"="Microsoft.AndroidDebugLauncher" "Class"="AndroidDebugLauncher.Launcher" -"CodeBase"="$GlassInstallDir$\Microsoft.AndroidDebugLauncher.dll" - -[$RootKey$\CLSID\{316783D1-1824-4847-B3D3-FB048960EDCF}] -"Assembly"="Microsoft.IOSDebugLauncher" -"Class"="IOSDebugLauncher.Launcher" -"CodeBase"="$GlassInstallDir$\Microsoft.IOSDebugLauncher.dll" \ No newline at end of file +"CodeBase"="$GlassInstallDir$\Microsoft.AndroidDebugLauncher.dll" \ No newline at end of file diff --git a/tools/VS.list b/tools/VS.list index dc274f437..01bf4ac60 100644 --- a/tools/VS.list +++ b/tools/VS.list @@ -4,8 +4,6 @@ Microsoft.Android.natvis,src,AndroidDebugLauncher,\Common7\IDE\CommonExtensions\ 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 From da2c6cc362e679bd234ca87b9976e7172a5d7c63 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Tue, 2 Sep 2025 21:58:14 -0700 Subject: [PATCH 13/28] Fix missing properties in OpenFolderSchema.json.lci (#1515) A number of fields in OpenFolderSchema.json were being localized that shouldn't have been. This fixes OpenFolderSchema.json.lci to hopefully fix this. --- loc/lci/OpenFolderSchema.json.lci | 89 +++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 4 deletions(-) diff --git a/loc/lci/OpenFolderSchema.json.lci b/loc/lci/OpenFolderSchema.json.lci index 2f97d55db..ebffe7839 100644 --- a/loc/lci/OpenFolderSchema.json.lci +++ b/loc/lci/OpenFolderSchema.json.lci @@ -155,6 +155,15 @@ + + + + + + + + + @@ -221,6 +230,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -518,6 +554,24 @@ + + + + + + + + + + + + + + + + + + @@ -527,6 +581,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -617,18 +698,18 @@ - + - + - + - + From 30a70a04c64b619faa11b43653c05ed80d8f314c Mon Sep 17 00:00:00 2001 From: "CSIGS@microsoft.com" Date: Thu, 4 Sep 2025 08:48:26 -0700 Subject: [PATCH 14/28] LEGO: Pull request from lego/hb_d72c5677-3f00-4225-b18e-0a1e8a8f5f0e_20250904101035275 to main (#1516) Juno: check in to lego/hb_d72c5677-3f00-4225-b18e-0a1e8a8f5f0e_20250904101035275. --- loc/lcl/CHS/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/CHT/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/CSY/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/DEU/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/ESN/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/FRA/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/ITA/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/JPN/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/KOR/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/PLK/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/PTB/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/RUS/OpenFolderSchema.json.lcl | 76 +++++++-------------------- loc/lcl/TRK/OpenFolderSchema.json.lcl | 76 +++++++-------------------- 13 files changed, 260 insertions(+), 728 deletions(-) diff --git a/loc/lcl/CHS/OpenFolderSchema.json.lcl b/loc/lcl/CHS/OpenFolderSchema.json.lcl index 1d907d5d2..5d66ad584 100644 --- a/loc/lcl/CHS/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHS/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/CHT/OpenFolderSchema.json.lcl b/loc/lcl/CHT/OpenFolderSchema.json.lcl index 5072a7d00..aafb65de4 100644 --- a/loc/lcl/CHT/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHT/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/CSY/OpenFolderSchema.json.lcl b/loc/lcl/CSY/OpenFolderSchema.json.lcl index 796e5db74..c902e14a8 100644 --- a/loc/lcl/CSY/OpenFolderSchema.json.lcl +++ b/loc/lcl/CSY/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/DEU/OpenFolderSchema.json.lcl b/loc/lcl/DEU/OpenFolderSchema.json.lcl index e89c066ea..512c11e37 100644 --- a/loc/lcl/DEU/OpenFolderSchema.json.lcl +++ b/loc/lcl/DEU/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/ESN/OpenFolderSchema.json.lcl b/loc/lcl/ESN/OpenFolderSchema.json.lcl index 3e06b2806..5aa3fd875 100644 --- a/loc/lcl/ESN/OpenFolderSchema.json.lcl +++ b/loc/lcl/ESN/OpenFolderSchema.json.lcl @@ -259,21 +259,15 @@ - - + + - - - - - + + - - - @@ -325,12 +319,9 @@ - - + + - - - @@ -571,12 +562,9 @@ - - + + - - - @@ -658,12 +646,9 @@ - - + + - - - @@ -748,21 +733,15 @@ - - + + - - - - - + + - - - @@ -790,12 +769,9 @@ - - + + - - - @@ -841,12 +817,9 @@ - - + + - - - @@ -859,12 +832,9 @@ - - + + - - - @@ -1000,12 +970,6 @@ - - - - - - diff --git a/loc/lcl/FRA/OpenFolderSchema.json.lcl b/loc/lcl/FRA/OpenFolderSchema.json.lcl index 613cfd697..90138dee7 100644 --- a/loc/lcl/FRA/OpenFolderSchema.json.lcl +++ b/loc/lcl/FRA/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/ITA/OpenFolderSchema.json.lcl b/loc/lcl/ITA/OpenFolderSchema.json.lcl index 96eae5bef..2bb0f16cd 100644 --- a/loc/lcl/ITA/OpenFolderSchema.json.lcl +++ b/loc/lcl/ITA/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/JPN/OpenFolderSchema.json.lcl b/loc/lcl/JPN/OpenFolderSchema.json.lcl index 07566f91b..00cf0fb9f 100644 --- a/loc/lcl/JPN/OpenFolderSchema.json.lcl +++ b/loc/lcl/JPN/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/KOR/OpenFolderSchema.json.lcl b/loc/lcl/KOR/OpenFolderSchema.json.lcl index ecdc13638..018a3fd87 100644 --- a/loc/lcl/KOR/OpenFolderSchema.json.lcl +++ b/loc/lcl/KOR/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/PLK/OpenFolderSchema.json.lcl b/loc/lcl/PLK/OpenFolderSchema.json.lcl index e6f347966..db44e1aa8 100644 --- a/loc/lcl/PLK/OpenFolderSchema.json.lcl +++ b/loc/lcl/PLK/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/PTB/OpenFolderSchema.json.lcl b/loc/lcl/PTB/OpenFolderSchema.json.lcl index aaecef349..b6dcd9cc5 100644 --- a/loc/lcl/PTB/OpenFolderSchema.json.lcl +++ b/loc/lcl/PTB/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - diff --git a/loc/lcl/RUS/OpenFolderSchema.json.lcl b/loc/lcl/RUS/OpenFolderSchema.json.lcl index 3e4c12882..661f57536 100644 --- a/loc/lcl/RUS/OpenFolderSchema.json.lcl +++ b/loc/lcl/RUS/OpenFolderSchema.json.lcl @@ -259,21 +259,15 @@ - - + + - - - - - + + - - - @@ -325,12 +319,9 @@ - - + + - - - @@ -571,12 +562,9 @@ - - + + - - - @@ -658,12 +646,9 @@ - - + + - - - @@ -748,21 +733,15 @@ - - + + - - - - - + + - - - @@ -790,12 +769,9 @@ - - + + - - - @@ -841,12 +817,9 @@ - - + + - - - @@ -859,12 +832,9 @@ - - + + - - - @@ -1000,12 +970,6 @@ - - - - - - diff --git a/loc/lcl/TRK/OpenFolderSchema.json.lcl b/loc/lcl/TRK/OpenFolderSchema.json.lcl index 7553f7bec..704c2b19d 100644 --- a/loc/lcl/TRK/OpenFolderSchema.json.lcl +++ b/loc/lcl/TRK/OpenFolderSchema.json.lcl @@ -265,21 +265,15 @@ - - + + - - - - - + + - - - @@ -331,12 +325,9 @@ - - + + - - - @@ -604,12 +595,9 @@ - - + + - - - @@ -697,12 +685,9 @@ - - + + - - - @@ -793,21 +778,15 @@ - - + + - - - - - + + - - - @@ -838,12 +817,9 @@ - - + + - - - @@ -892,12 +868,9 @@ - - + + - - - @@ -910,12 +883,9 @@ - - + + - - - @@ -1051,12 +1021,6 @@ - - - - - - From 40af1b11afb375e075a56d968a0e4c5bf4285f62 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Thu, 4 Sep 2025 10:27:39 -0700 Subject: [PATCH 15/28] Merge pull request #1513 from microsoft/dev/waan/updateBuilds Update Release Pipelines --- eng/pipelines/VS-release.yml | 13 +++++++++++-- eng/pipelines/VSCode-release.yml | 11 ++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/VS-release.yml b/eng/pipelines/VS-release.yml index 71125331e..3f5c43f82 100644 --- a/eng/pipelines/VS-release.yml +++ b/eng/pipelines/VS-release.yml @@ -1,6 +1,11 @@ --- name: $(Date:yyyMMdd).$(Rev:r) +trigger: + branches: + include: + - release_mdd + variables: - name: TeamName value: MDDDebugger @@ -34,7 +39,11 @@ extends: mb: signing: enabled: true - signType: real + ${{ if eq(variables['Build.Reason'], 'IndividualCI') }}: + signType: real + signWithProd: true + ${{ else }}: + signType: test zipSources: false localization: enabled: true @@ -68,6 +77,6 @@ extends: DefaultConfigValues: 'VS.Redist.Debugger.MDD.MIEngine=$(MDDPackageVersion)' RevisionTextFiles: 'src/SetupPackages/VC/IDE/MDD/core/revision.txt,src/SetupPackages/VC/IDE/MDD/res/revision.txt' InsertionPayloadName: 'MIEngine $(MDDPackageVersion)' - InsertionDescription: 'Updating MIEngine to $(MDDPackageVersion). See $(Release.Artifacts.MIEngine_MDD.BuildURI)' + InsertionDescription: 'Updating MIEngine to $(MDDPackageVersion).' InsertionReviewers: $(InsertionReviewers) ... \ No newline at end of file diff --git a/eng/pipelines/VSCode-release.yml b/eng/pipelines/VSCode-release.yml index 65912d99a..e1432247b 100644 --- a/eng/pipelines/VSCode-release.yml +++ b/eng/pipelines/VSCode-release.yml @@ -1,6 +1,11 @@ --- name: $(Date:yyyMMdd).$(Rev:r) +trigger: + branches: + include: + - release-cpptools + variables: - name: TeamName value: MDDDebugger @@ -33,7 +38,11 @@ extends: mb: signing: enabled: true - signType: real + ${{ if eq(variables['Build.Reason'], 'IndividualCI') }}: + signType: real + signWithProd: true + ${{ else }}: + signType: test zipSources: false localization: enabled: true From 7c356563e8ef0d3ced67f430f7f6d03a8ddd9661 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Thu, 4 Sep 2025 15:43:04 -0700 Subject: [PATCH 16/28] More localization fixes for OpenFolderSchema.json (#1517) This PR checks in fixes from using lcxadmin.exe to further edit OpenFolderSchema.json.lci. This also deletes a .lsproj and .lcg file which were checked in, but I believe should not have been as these are generated from the build. Notes on how to do this in the future: 1. Add MicroBuild.Plugins.Localization to the local nuget cache. I was able to do so thusly: `nuget install MicroBuild.Plugins.Localization -Source "https://pkgs.dev.azure.com/devdiv/_packaging/MicroBuildToolset/nuget/v3/index.json" -Prerelease -OutputDirectory test`. After running this, you should be able to remove the `test` directory since the plugin should now be in your nuget cache. 2. Build the MIEngine solution 3. In `src\MIDebugPackage`, build using `msbuild /p:LocType=Pseudo /p:LocLanguages=VS /p:LSBuildVersion=V7 /p:LocalizationEnabled=true`. 4. Run `NugetPackages\microsoft.devdiv.localization.toolset\1.1.24090301\current\lcxadmin.exe MIEngine\bin\Debug\localize\ENU\OpenFolderSchema.json.lcg MIEngine\loc\lci\OpenFolderSchema.json.lci` to open the LCI editor, and configured strings. 5. If you made changes in step 4, repeat step 3 6. Use `"C:\Program Files\Git\usr\bin\diff.exe" d:\dd\MIEngine\bin\Debug\OpenFolderSchema.json d:\dd\MIEngine\bin\Debug\localize\CHS\OpenFolderSchema.json | findstr /v /c:"description"` to see if any non-description lines are being changed between ENU and the localized version. --- loc/MIDebugEngine.lsproj | 12 - loc/OpenFolderSchema.json.lcg | 1008 ----------------------------- loc/lci/OpenFolderSchema.json.lci | 292 +++++---- 3 files changed, 153 insertions(+), 1159 deletions(-) delete mode 100644 loc/MIDebugEngine.lsproj delete mode 100644 loc/OpenFolderSchema.json.lcg diff --git a/loc/MIDebugEngine.lsproj b/loc/MIDebugEngine.lsproj deleted file mode 100644 index 18e283fea..000000000 --- a/loc/MIDebugEngine.lsproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/loc/OpenFolderSchema.json.lcg b/loc/OpenFolderSchema.json.lcg deleted file mode 100644 index 6d2c7792d..000000000 --- a/loc/OpenFolderSchema.json.lcg +++ /dev/null @@ -1,1008 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ": "" }' OR '{ "": { "editorPath": "", "useForBreakpoints": true } }'. Example: '{ "/home/user/foo": "C:\foo" }' OR '{ "/home/user/foo": { "editorPath": "c:\foo", "useForBreakpoints": true } }'.]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/loc/lci/OpenFolderSchema.json.lci b/loc/lci/OpenFolderSchema.json.lci index ebffe7839..e3d3ac8b4 100644 --- a/loc/lci/OpenFolderSchema.json.lci +++ b/loc/lci/OpenFolderSchema.json.lci @@ -2,12 +2,23 @@ - + + + + + + + + + + + + @@ -32,6 +43,18 @@ + + + + + + + + + + + + @@ -47,6 +70,18 @@ + + + + + + + + + + + + @@ -101,6 +136,24 @@ + + + + + + + + + + + + + + + + + + @@ -146,16 +199,16 @@ - + - + - + @@ -200,8 +253,8 @@ - - + + @@ -209,29 +262,8 @@ - - - - - - - - - - - - - - - - - - - - - - - + + @@ -239,27 +271,9 @@ - - - - - - - - - - - - - - - - - - - + @@ -304,7 +318,7 @@ - + @@ -340,7 +354,7 @@ - + @@ -358,7 +372,7 @@ - + @@ -376,15 +390,15 @@ - + - - + + @@ -392,8 +406,8 @@ - - + + @@ -421,7 +435,7 @@ - + @@ -439,7 +453,7 @@ - + @@ -457,7 +471,7 @@ - + @@ -473,9 +487,18 @@ + + + + + + + + + - + @@ -538,7 +561,7 @@ - + @@ -554,24 +577,6 @@ - - - - - - - - - - - - - - - - - - @@ -581,42 +586,15 @@ - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - @@ -655,7 +633,7 @@ - + @@ -673,7 +651,7 @@ - + @@ -698,8 +676,8 @@ - - + + @@ -707,8 +685,8 @@ - - + + @@ -718,7 +696,7 @@ - ": "" }' OR '{ "": { "editorPath": "", "useForBreakpoints": true } }'. Example: '{ "C:\foo": "/home/user/foo" }' OR '{ "/home/user/foo": { "editorPath": "c:\foo", "useForBreakpoints": true } }'.]]> + ": "" }' OR '{ "": { "editorPath": "", "useForBreakpoints": true } }'. ]A;Example: '{ "/home/user/foo": "C:\foo" }' OR '{ "/home/user/foo": { "editorPath": "c:\foo", "useForBreakpoints": true } }'.]]> @@ -734,9 +712,18 @@ + + + + + + + + + - + @@ -752,6 +739,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -790,34 +813,34 @@ - + - + - + - + - + - + - + @@ -880,34 +903,34 @@ - + - + - + - + - + - + - + @@ -923,15 +946,6 @@ - - - - - - - - - From 1b5c7123f1ef8bceb9c4c69a12c5e0457a3994ae Mon Sep 17 00:00:00 2001 From: "CSIGS@microsoft.com" Date: Mon, 8 Sep 2025 08:57:51 -0700 Subject: [PATCH 17/28] LEGO: Pull request from lego/hb_d72c5677-3f00-4225-b18e-0a1e8a8f5f0e_20250906094718381 to main (#1518) Juno: check in to lego/hb_d72c5677-3f00-4225-b18e-0a1e8a8f5f0e_20250906094718381. --- loc/lcl/CHS/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/CHT/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/CSY/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/DEU/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/ESN/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/FRA/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/ITA/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/JPN/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/KOR/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/PLK/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/PTB/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/RUS/OpenFolderSchema.json.lcl | 42 ++++++++------------------- loc/lcl/TRK/OpenFolderSchema.json.lcl | 42 ++++++++------------------- 13 files changed, 156 insertions(+), 390 deletions(-) diff --git a/loc/lcl/CHS/OpenFolderSchema.json.lcl b/loc/lcl/CHS/OpenFolderSchema.json.lcl index 5d66ad584..863e9c30e 100644 --- a/loc/lcl/CHS/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHS/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/CHT/OpenFolderSchema.json.lcl b/loc/lcl/CHT/OpenFolderSchema.json.lcl index aafb65de4..611048b03 100644 --- a/loc/lcl/CHT/OpenFolderSchema.json.lcl +++ b/loc/lcl/CHT/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/CSY/OpenFolderSchema.json.lcl b/loc/lcl/CSY/OpenFolderSchema.json.lcl index c902e14a8..12c9c67ed 100644 --- a/loc/lcl/CSY/OpenFolderSchema.json.lcl +++ b/loc/lcl/CSY/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/DEU/OpenFolderSchema.json.lcl b/loc/lcl/DEU/OpenFolderSchema.json.lcl index 512c11e37..56d556b1c 100644 --- a/loc/lcl/DEU/OpenFolderSchema.json.lcl +++ b/loc/lcl/DEU/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/ESN/OpenFolderSchema.json.lcl b/loc/lcl/ESN/OpenFolderSchema.json.lcl index 5aa3fd875..08dcbb227 100644 --- a/loc/lcl/ESN/OpenFolderSchema.json.lcl +++ b/loc/lcl/ESN/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -126,12 +123,9 @@ - - + + - - - @@ -799,21 +793,15 @@ - - + + - - - - - + + - - - @@ -874,12 +862,9 @@ - - + + - - - @@ -943,12 +928,9 @@ - - + + - - - diff --git a/loc/lcl/FRA/OpenFolderSchema.json.lcl b/loc/lcl/FRA/OpenFolderSchema.json.lcl index 90138dee7..e6508bd18 100644 --- a/loc/lcl/FRA/OpenFolderSchema.json.lcl +++ b/loc/lcl/FRA/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/ITA/OpenFolderSchema.json.lcl b/loc/lcl/ITA/OpenFolderSchema.json.lcl index 2bb0f16cd..7cb75e6e3 100644 --- a/loc/lcl/ITA/OpenFolderSchema.json.lcl +++ b/loc/lcl/ITA/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/JPN/OpenFolderSchema.json.lcl b/loc/lcl/JPN/OpenFolderSchema.json.lcl index 00cf0fb9f..4659c48dc 100644 --- a/loc/lcl/JPN/OpenFolderSchema.json.lcl +++ b/loc/lcl/JPN/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/KOR/OpenFolderSchema.json.lcl b/loc/lcl/KOR/OpenFolderSchema.json.lcl index 018a3fd87..12124e286 100644 --- a/loc/lcl/KOR/OpenFolderSchema.json.lcl +++ b/loc/lcl/KOR/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/PLK/OpenFolderSchema.json.lcl b/loc/lcl/PLK/OpenFolderSchema.json.lcl index db44e1aa8..0376ea545 100644 --- a/loc/lcl/PLK/OpenFolderSchema.json.lcl +++ b/loc/lcl/PLK/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/PTB/OpenFolderSchema.json.lcl b/loc/lcl/PTB/OpenFolderSchema.json.lcl index b6dcd9cc5..f32c6669c 100644 --- a/loc/lcl/PTB/OpenFolderSchema.json.lcl +++ b/loc/lcl/PTB/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - diff --git a/loc/lcl/RUS/OpenFolderSchema.json.lcl b/loc/lcl/RUS/OpenFolderSchema.json.lcl index 661f57536..dae93349f 100644 --- a/loc/lcl/RUS/OpenFolderSchema.json.lcl +++ b/loc/lcl/RUS/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -126,12 +123,9 @@ - - + + - - - @@ -799,21 +793,15 @@ - - + + - - - - - + + - - - @@ -874,12 +862,9 @@ - - + + - - - @@ -943,12 +928,9 @@ - - + + - - - diff --git a/loc/lcl/TRK/OpenFolderSchema.json.lcl b/loc/lcl/TRK/OpenFolderSchema.json.lcl index 704c2b19d..2527ff338 100644 --- a/loc/lcl/TRK/OpenFolderSchema.json.lcl +++ b/loc/lcl/TRK/OpenFolderSchema.json.lcl @@ -36,12 +36,9 @@ - - + + - - - @@ -129,12 +126,9 @@ - - + + - - - @@ -850,21 +844,15 @@ - - + + - - - - - + + - - - @@ -925,12 +913,9 @@ - - + + - - - @@ -994,12 +979,9 @@ - - + + - - - From bebd1909fa46c8f7bd5693a5c1785ba79f0adf70 Mon Sep 17 00:00:00 2001 From: iridinite Date: Wed, 7 Aug 2024 16:33:37 +0200 Subject: [PATCH 18/28] Fix Natvis array visualization expression generator. The old format of (T[N])*((Ptr)+Offset) can generate invalid code, since casting a T& to a T[N] is not legal in C++. The new format instead casts the raw address to a pointer-to-array, and then dereferences it so that elements can be read later. --- src/MIDebugEngine/Natvis.Impl/Natvis.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/MIDebugEngine/Natvis.Impl/Natvis.cs b/src/MIDebugEngine/Natvis.Impl/Natvis.cs index 5091a78ae..19d81e1a6 100755 --- a/src/MIDebugEngine/Natvis.Impl/Natvis.cs +++ b/src/MIDebugEngine/Natvis.Impl/Natvis.cs @@ -646,8 +646,9 @@ private IVariableInformation[] ExpandVisualized(IVariableInformation variable) { continue; } - // Creates an expression: (T[50])*( + 50) - // This evaluates for 50 elements of type T, starting at with an offet of 50 elements. + + // Creates a dereferenced pointer-to-array expression: (*(T(*)[50])(ValuePointer + 50)) + // This evaluates for 50 elements of type T, starting at with an offset of 50 elements. // E.g. This will grab elements 50 - 99 from . // Note: // If requestedSize > 1000, the evaluation will only grab the first 1000 elements. @@ -656,15 +657,15 @@ private IVariableInformation[] ExpandVisualized(IVariableInformation variable) uint requestedSize = Math.Min(MAX_EXPAND, totalSize - startIndex); StringBuilder arrayBuilder = new StringBuilder(); - arrayBuilder.Append('('); + arrayBuilder.Append("(*("); arrayBuilder.Append(typename); - arrayBuilder.Append('['); + arrayBuilder.Append("(*)["); arrayBuilder.Append(requestedSize); - arrayBuilder.Append("])*("); + arrayBuilder.Append("])("); arrayBuilder.Append(vp.Value); arrayBuilder.Append('+'); arrayBuilder.Append(startIndex); - arrayBuilder.Append(')'); + arrayBuilder.Append("))"); string arrayStr = arrayBuilder.ToString(); IVariableInformation arrayExpr = GetExpression(arrayStr, variable, visualizer.ScopedNames); From 2c27a7fbd0ae3db92ff79f1ba6ec1982b5eae9f7 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Tue, 16 Sep 2025 09:20:06 -0700 Subject: [PATCH 19/28] Test enabling macOS tests --- test/CppTests/Tests/NatvisTests.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/test/CppTests/Tests/NatvisTests.cs b/test/CppTests/Tests/NatvisTests.cs index d7fdf5d12..d9d644ff6 100644 --- a/test/CppTests/Tests/NatvisTests.cs +++ b/test/CppTests/Tests/NatvisTests.cs @@ -138,11 +138,6 @@ public void TestIndexListItems(ITestSettings settings) [Theory] [DependsOnTest(nameof(CompileNatvisDebuggee))] [RequiresTestSettings] - // Disable on macOS - // Error: - // C-style cast from 'int' to 'int [10]' is not allowed - // (int[10])*(((vec)._start)) - [UnsupportedDebugger(SupportedDebugger.Lldb, SupportedArchitecture.x64 | SupportedArchitecture.x86)] public void TestArrayItems(ITestSettings settings) { this.TestPurpose("This test checks if ArrayItems are visualized."); @@ -193,11 +188,6 @@ public void TestArrayItems(ITestSettings settings) [Theory] [DependsOnTest(nameof(CompileNatvisDebuggee))] [RequiresTestSettings] - // Disable on macOS - // Error: - // C-style cast from 'int' to 'int [10]' is not allowed - // (int[10])*(((vec)._start)) - [UnsupportedDebugger(SupportedDebugger.Lldb, SupportedArchitecture.x64 | SupportedArchitecture.x86)] public void Test2000ArrayItems(ITestSettings settings) { this.TestPurpose("This test checks if ArrayItems can be visualized past 1000 elements."); @@ -484,11 +474,6 @@ public void TestCommaFormatWithSquareBrackets(ITestSettings settings) [Theory] [DependsOnTest(nameof(CompileNatvisDebuggee))] [RequiresTestSettings] - // Disable on macOS - // Error: - // C-style cast from 'int' to 'int [10]' is not allowed - // (int[10])*(((vec)._start)) - [UnsupportedDebugger(SupportedDebugger.Lldb, SupportedArchitecture.x64 | SupportedArchitecture.x86)] public void TestMultipleNatvisFiles(ITestSettings settings) { this.TestPurpose("This test checks if multiple Natvis files can be used."); From 4f4e01b341b03685ad1ca7907941c39dafed3e89 Mon Sep 17 00:00:00 2001 From: iridinite Date: Tue, 23 Sep 2025 01:09:29 +0200 Subject: [PATCH 20/28] Fix anonymous union parsing in Natvis for LLDB (#1521) Consider the following example code: ```c++ int main(int argc, char *argv[]) { struct Foo { union { int a; float b; }; }; Foo f; f.b = 1.0f; __builtin_debugtrap(); } ``` When breaking at the debug trap, the following MI sequence is exchanged when using LLDB-MI (reformatted for readability): ``` 1022-var-create - - "f" --thread 1 --frame 0 1022^done,name="var2",numchild="1",value="{...}",type="Foo",thread-id="1",has_more="0" 1025-var-list-children --all-values "var2" 0 1000 1025^done,numchild="1",children=[ child={name="var2.$0",exp="",numchild="2",type="Foo::(anonymous union)",thread-id="1",value="{...}",has_more="0"} ],has_more="0" 1027-var-list-children --all-values "var2.$0" 0 1000 1027^done,numchild="2",children=[ child={name="var2.$0.a",exp="a",numchild="0",type="int",thread-id="1",value="1065353216",has_more="0"}, child={name="var2.$0.b",exp="b",numchild="0",type="float",thread-id="1",value="1",has_more="0"} ],has_more="0" ``` The anonymous union in `Foo` is listed by LLDB-MI as an unnamed child (no expression) and with type name `Foo::(anonymous union)`. The current check for anonymous unions only accounts for the syntax flavor that GDB uses, and so when using LLDB, anonymous unions incorrectly get flagged as `NodeType.Field` by MIEngine. This in turn affects `FullName()` which will return an incorrect expression if the members of the union are also compounds. This change ensures that the LLDB flavor of anonymous unions get flagged properly. --- src/MIDebugEngine/Engine.Impl/Variables.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MIDebugEngine/Engine.Impl/Variables.cs b/src/MIDebugEngine/Engine.Impl/Variables.cs index 8c297998f..4bae0f861 100644 --- a/src/MIDebugEngine/Engine.Impl/Variables.cs +++ b/src/MIDebugEngine/Engine.Impl/Variables.cs @@ -289,8 +289,9 @@ private VariableInformation(TupleValue results, VariableInformation parent, stri { VariableNodeType = NodeType.ArrayElement; } - else if (Name == "") + else if (Name == "" || TypeName.EndsWith("(anonymous union)", StringComparison.InvariantCulture)) { + // GDB provides anonymous unions in the expression; LLDB includes them in the type name and leaves the expression empty VariableNodeType = NodeType.AnonymousUnion; } else if (Name.Length > 1 && Name[0] == '*') From 1e21dd2c1a5d161a13e3697e104628366eba263c Mon Sep 17 00:00:00 2001 From: iridinite Date: Tue, 23 Sep 2025 02:23:42 +0200 Subject: [PATCH 21/28] Fix Natvis.SimpleWrapper not forwarding FullName correctly (#1525) This would result in array elements in Natvis using incorrect expressions, e.g. the first array element would use the literal '[0]' as expression instead of the actual element path, which does not work. Co-authored-by: Gregg Miskelly --- src/MIDebugEngine/Natvis.Impl/Natvis.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MIDebugEngine/Natvis.Impl/Natvis.cs b/src/MIDebugEngine/Natvis.Impl/Natvis.cs index 19d81e1a6..01d4aaf3c 100755 --- a/src/MIDebugEngine/Natvis.Impl/Natvis.cs +++ b/src/MIDebugEngine/Natvis.Impl/Natvis.cs @@ -50,7 +50,7 @@ public SimpleWrapper(string name, AD7Engine engine, IVariableInformation underly public string EvalDependentExpression(string expr) => Parent.EvalDependentExpression(expr); public void AsyncEval(IDebugEventCallback2 pExprCallback) => Parent.AsyncEval(pExprCallback); public void SyncEval(enum_EVALFLAGS dwFlags, DAPEvalFlags dwDAPFlags) => Parent.SyncEval(dwFlags, dwDAPFlags); - public virtual string FullName() => Name; + public virtual string FullName() => Parent.FullName(); public void EnsureChildren() => Parent.EnsureChildren(); public void AsyncError(IDebugEventCallback2 pExprCallback, IDebugProperty2 error) { From 1efd7165d1e7f206903af27ddead6007232c7c46 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Mon, 22 Sep 2025 17:50:49 -0700 Subject: [PATCH 22/28] Fix bug area path in TSAConfig.json (#1526) Update `areaPath` so that Code Analysis builds succeed. --- eng/pipelines/resources/TSAConfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/resources/TSAConfig.json b/eng/pipelines/resources/TSAConfig.json index bc6b0b5ca..4fecb6c86 100644 --- a/eng/pipelines/resources/TSAConfig.json +++ b/eng/pipelines/resources/TSAConfig.json @@ -3,7 +3,7 @@ "notificationAliases": ["vsdbgnft@microsoft.com"], "instanceUrl": "https://devdiv.visualstudio.com", "projectName": "DevDiv", - "areaPath": "DevDiv\\VS Diagnostics\\Debugger - XPlat\\Cpp", + "areaPath": "DevDiv\\VS Diagnostics\\Debugger\\XPlat\\Cpp", "iterationPath": "DevDiv", "allTools": true } \ No newline at end of file From 58930dbd6012256afdb1fbd7ee8d53863eca516d Mon Sep 17 00:00:00 2001 From: iridinite Date: Tue, 23 Sep 2025 18:11:44 +0200 Subject: [PATCH 23/28] Fix var-set-format MI result processing for LLDB (#1522) Unlike GDB, LLDB-MI has a different result format for var-set-format. It wraps the new value in an array which only ever has one element. This PR adds support for either. --- src/MIDebugEngine/Engine.Impl/Variables.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/MIDebugEngine/Engine.Impl/Variables.cs b/src/MIDebugEngine/Engine.Impl/Variables.cs index 4bae0f861..55a24796f 100644 --- a/src/MIDebugEngine/Engine.Impl/Variables.cs +++ b/src/MIDebugEngine/Engine.Impl/Variables.cs @@ -715,7 +715,20 @@ internal async Task Format() Results results = await _engine.DebuggedProcess.MICommandFactory.VarSetFormat(_internalName, _format, ResultClass.None); if (results.ResultClass == ResultClass.done) { - Value = results.FindString("value"); + if (results.Contains("value")) + { + // Sample output for GDB: ^done,format="natural",value="123" + this.Value = results.FindString("value"); + } + else if (results.TryFind("changelist", out ValueListValue changeList)) + { + // Sample output for LLDB: ^done,changelist=[{name="var1",value="123",in_scope="true",type_changed="false",type_changed="0"}] + this.Value = changeList.Content[0].FindString("value"); + } + else + { + throw new MIResultFormatException("value", results); + } } else if (results.ResultClass == ResultClass.error) { From a0e993281f1b0d15a84080eef9334c8ae970269d Mon Sep 17 00:00:00 2001 From: iridinite Date: Tue, 23 Sep 2025 18:28:54 +0200 Subject: [PATCH 24/28] Fix Natvis not resolving for template args with negative constant (#1524) Given a class `template class Foo {};`, negative constants can be expected in the type name. The regex used to look for constants was missing support for the sign, and hence the above example would fail to parse. --- src/MIDebugEngine/Natvis.Impl/NatvisNames.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MIDebugEngine/Natvis.Impl/NatvisNames.cs b/src/MIDebugEngine/Natvis.Impl/NatvisNames.cs index 85972bdd8..ad8df5021 100644 --- a/src/MIDebugEngine/Natvis.Impl/NatvisNames.cs +++ b/src/MIDebugEngine/Natvis.Impl/NatvisNames.cs @@ -34,7 +34,7 @@ private void SetArraySize(int[] Dims) } private static Regex s_identifier = new Regex("^[a-zA-Z$_][a-zA-Z$_0-9]*"); - private static Regex s_numeric = new Regex("^[0-9]+(u|l|ul)*"); // only decimal constants + private static Regex s_numeric = new Regex("^[-]?[0-9]+(u|l|ul)*"); // only decimal constants private static Regex s_simpleType = new Regex( @"^(signed\s+char|unsigned\s+char|char16_t|char32_t|wchar_t|char|" + @"signed\s+short\s+int|signed\s+short|unsigned\s+short\s+int|unsigned\s+short|short\s+int|short|" From 8b684adfa1d7fd0aa461682149927f2f76e01b49 Mon Sep 17 00:00:00 2001 From: iridinite Date: Tue, 23 Sep 2025 18:59:32 +0200 Subject: [PATCH 25/28] Improve handling of compound format specifiers in Natvis (#1523) These three cases were not recognized by the format specifier parser: - The nvo, na, nr and nd specifiers may appear together with another specifier, e.g. 'nvoXb' is a valid format specifier. - Arrays with static size specifiers may contain additional format specifiers, e.g. 'ptr,[10]s8' is a valid expression. - Arrays with dynamic size specifiers may contain full C++ expressions in them, e.g. 'ptr,[mLength-mFree]' is valid. Without this change, the full expression e.g. '(foo).bar,nvoXb' would be passed to LLDB, which obviously yields a compilation error. Neither of these two cases can be implemented easily with the tools we currently have available, but by ensuring we at least recognize and strip such format specifiers, Natvis does not break completely. --- src/MIDebugEngine/Engine.Impl/Variables.cs | 34 +++++++++++++--------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/MIDebugEngine/Engine.Impl/Variables.cs b/src/MIDebugEngine/Engine.Impl/Variables.cs index 55a24796f..25d5a6cdf 100644 --- a/src/MIDebugEngine/Engine.Impl/Variables.cs +++ b/src/MIDebugEngine/Engine.Impl/Variables.cs @@ -389,10 +389,16 @@ private string ProcessFormatSpecifiers(string exp, out string formatSpecifier) if (lastComma <= 0) return exp; + // Find the format specifier expression + string expFS = exp.Substring(lastComma + 1).Trim(); + + // Strip off modifiers that may be included together with another format specifier, e.g. 'nvoXb' is a valid format specifier, but we only care about the 'Xb' part + // This is not quite the right fix -- really the below switch statement should be a series of if statements. But since none of the supported format specifiers + // contain any of these characters we can fix this the simple way and remove them. + expFS = expFS.Replace("nvo", "").Replace("na", "").Replace("nr", "").Replace("nd", ""); + // https://docs.microsoft.com/en-us/visualstudio/debugger/format-specifiers-in-cpp - string expFS = exp.Substring(lastComma + 1); - string trimmed = expFS.Trim(); - switch (trimmed) + switch (expFS) { case "x": case "X": @@ -433,19 +439,17 @@ private string ProcessFormatSpecifiers(string exp, out string formatSpecifier) return "(char)(" + exp.Substring(0, lastComma) + ")"; // just remove and ignore these case "en": - case "na": - case "nd": - case "nr": case "!": case "": return exp.Substring(0, lastComma); } - // array with static size - var m = Regex.Match(trimmed, @"^\[?(\d+)\]?$"); - if (m.Success) + // Array with static size + // Note that size specifiers may also include format specifiers (e.g. "ptr,[10]s8") which we should recognize in the regex, but ignore, since neither LLDB nor GDB support them + var matchStatic = Regex.Match(expFS, @"^\[?(\d+)\]?[a-zA-Z\d]*$"); + if (matchStatic.Success) { - string count = m.Groups[1].Value; // (\d+) capture group + string count = matchStatic.Groups[1].Value; // (\d+) capture group string expr = exp.Substring(0, lastComma); if (_engine.DebuggedProcess.MICommandFactory.Mode == MIMode.Gdb) @@ -472,9 +476,13 @@ private string ProcessFormatSpecifiers(string exp, out string formatSpecifier) } } - // array with dynamic size - if (Regex.Match(trimmed, @"^\[([a-zA-Z_][a-zA-Z_\d]*)\]$").Success) - return exp.Substring(0, lastComma); + // Array with dynamic size is not supported, discard the format specifier + var matchDynamic = Regex.Match(expFS, @"^\[.*\][a-zA-Z\d]*$"); + if (matchDynamic.Success) + { + string expr = exp.Substring(0, lastComma); + return expr; + } return exp; } From d77b2ed45164466a3e40216f3e448dbf98240950 Mon Sep 17 00:00:00 2001 From: Subham Date: Sat, 20 Dec 2025 03:59:38 +0530 Subject: [PATCH 26/28] Fixes argument truncation where long `launch.json` arguments were cut off at ~2KB, causing debugger launch failures. (#1529) Fixes microsoft/vscode-cpptools#14054 Increased [PipeTransport](cci:2://file:///Users/subhamsangwan/vscode-cpptools/MIEngine_Debug/src/MICore/Transports/PipeTransport.cs:17:4-402:5) buffer size to **64KB** (from 1KB/2KB) to prevent long `launch.json` arguments from being truncated with lldb-mi. --- src/MICore/Transports/PipeTransport.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/MICore/Transports/PipeTransport.cs b/src/MICore/Transports/PipeTransport.cs index 1add33c76..c456ac590 100644 --- a/src/MICore/Transports/PipeTransport.cs +++ b/src/MICore/Transports/PipeTransport.cs @@ -17,6 +17,10 @@ namespace MICore { public class PipeTransport : StreamTransport { + // Using a larger than normal buffer (64KB instead of 1KB default) as lldb-mi has a bug where + // commands that exceed the buffer are truncated + private const int STREAM_BUFFER_SIZE = 65536; + private static readonly object _lock = new object(); private Process _process; @@ -92,7 +96,7 @@ protected virtual void InitProcess(Process proc, out StreamReader stdout, out St _debuggerPid = _process.Id; stdout = _process.StandardOutput; // Creating a new stream writer to set encoding to UTF-8 with UTF8Identifier as false. This prevents sending Byte Order Mask within the stream. - stdin = new StreamWriter(_process.StandardInput.BaseStream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false), 1024 /* note: this is the default buffer size in the BCL */, leaveOpen: true); + stdin = new StreamWriter(_process.StandardInput.BaseStream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false), STREAM_BUFFER_SIZE, leaveOpen: true); _stdErrReader = _process.StandardError; _remainingReaders = 2; From 0d820dc05cf8557fc89390614e0b48582e3fe7f3 Mon Sep 17 00:00:00 2001 From: Gregg Miskelly Date: Fri, 19 Dec 2025 16:12:02 -0800 Subject: [PATCH 27/28] Fix bug area path in TSAConfig.json again (#1530) The area path was changed again, so this updates `areaPath` again so that Code Analysis builds succeed. --- eng/pipelines/resources/TSAConfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/resources/TSAConfig.json b/eng/pipelines/resources/TSAConfig.json index 4fecb6c86..797eacded 100644 --- a/eng/pipelines/resources/TSAConfig.json +++ b/eng/pipelines/resources/TSAConfig.json @@ -3,7 +3,7 @@ "notificationAliases": ["vsdbgnft@microsoft.com"], "instanceUrl": "https://devdiv.visualstudio.com", "projectName": "DevDiv", - "areaPath": "DevDiv\\VS Diagnostics\\Debugger\\XPlat\\Cpp", + "areaPath": "DevDiv\\VS Diagnostics\\Debugger\\VSCode and XPlat\\Cpp", "iterationPath": "DevDiv", "allTools": true } \ No newline at end of file From edfe8ebc7871431ecdaf26af45b7bdb951dde966 Mon Sep 17 00:00:00 2001 From: Francisco Ferreira Date: Tue, 13 Jan 2026 20:34:41 +0000 Subject: [PATCH 28/28] Fix name for enum keys in a map holding structs (#1531) When a map has enum as keys and any type of struct as values, the enum value that was used for the key would be replaced as if it was base class. As the VariableInformation class has a constructor that receives the names directly from the map, use that information to not allow the name override. --- src/MIDebugEngine/Engine.Impl/Variables.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MIDebugEngine/Engine.Impl/Variables.cs b/src/MIDebugEngine/Engine.Impl/Variables.cs index 25d5a6cdf..95821b167 100644 --- a/src/MIDebugEngine/Engine.Impl/Variables.cs +++ b/src/MIDebugEngine/Engine.Impl/Variables.cs @@ -272,7 +272,7 @@ private VariableInformation(TupleValue results, VariableInformation parent, stri int index; - if (!results.Contains("value") && (Name == TypeName || Name.Contains("::"))) + if (!results.Contains("value") && (Name == TypeName || (Name.Contains("::") && name == null))) { // base classes show up with no value and exp==type // (sometimes underlying debugger does not follow this convention, when using typedefs in templated types so look for "::" in the field name too)