From 5f5e815b84ce366145e48e7244a4b63cfb985f77 Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Wed, 22 Jul 2020 16:11:09 +0200 Subject: [PATCH 1/5] Fix issue with missing filenames and linenumbers in stacktraces under mono Add option for specifying if mono should be started with --debug when starting new agents. This is a mono specific option since the mono. --- .../nunit3-console.tests/NetCoreConsoleOptionsTest.cs | 1 + src/NUnitConsole/nunit3-console/ConsoleOptions.cs | 5 +++++ src/NUnitConsole/nunit3-console/ConsoleRunner.cs | 3 +++ src/NUnitConsole/nunit3-console/EnginePackageSettings.cs | 7 +++++++ src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs | 7 +++++++ src/NUnitEngine/nunit.engine/Services/AgentProcess.cs | 3 ++- 6 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs b/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs index d413e9b20..459c42741 100644 --- a/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs +++ b/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs @@ -93,6 +93,7 @@ private static IEnumerable TestCases "-loaduserprofile", "-agents=1", "-debug", + "-debugmono", "-pause", "-set-principal-policy=NoPrincipal", #if DEBUG diff --git a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs index 485fbe7dd..17bf499fa 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs @@ -173,6 +173,8 @@ public IList ResultOutputSpecifications public bool DebugAgent { get; private set; } + public bool DebugMono { get; private set; } + public bool ListExtensions { get; private set; } public bool PauseBeforeRun { get; private set; } @@ -397,6 +399,9 @@ private void ConfigureOptions() this.AddNetFxOnlyOption("debug", "Launch debugger to debug tests.", NetFxOnlyOption("debug", v => DebugTests = v != null)); + this.AddNetFxOnlyOption("debugmono", "Agents launched using mono is launched with --debug", + NetFxOnlyOption("debugmono", v => DebugMono = v != null)); + this.AddNetFxOnlyOption("pause", "Pause before running to allow attaching a debugger.", NetFxOnlyOption("pause", v => PauseBeforeRun = v != null)); diff --git a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs index 8c9530605..3ff5d5706 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs @@ -447,6 +447,9 @@ public static TestPackage MakeTestPackage(ConsoleOptions options) package.AddSetting(FrameworkPackageSettings.NumberOfTestWorkers, 0); } + if (options.DebugMono) + package.AddSetting(EnginePackageSettings.DebugMono, true); + if (options.PauseBeforeRun) package.AddSetting(FrameworkPackageSettings.PauseBeforeRun, true); diff --git a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs index c7a1168a4..8f4c3a996 100644 --- a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs +++ b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs @@ -70,6 +70,13 @@ public static class EnginePackageSettings /// public const string DebugAgent = "DebugAgent"; + /// + /// Bool flag indicating whether an agent started under using mono should + /// be started with --debug or not. This allows filenames and line numbers in + /// stacktraces when portable pdb files exists. Default is disabled. + /// + public const string DebugMono = "DebugMono"; + /// /// Indicates how to load tests across application domains. Values are: /// "Default", "None", "Single", "Multiple". Default is "Multiple" diff --git a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs index 104f5f7dd..e7e30e3cd 100644 --- a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs +++ b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs @@ -75,6 +75,13 @@ public static class EnginePackageSettings /// public const string DebugAgent = "DebugAgent"; + /// + /// Bool flag indicating whether an agent started under using mono should + /// be started with --debug or not. This allows filenames and line numbers in + /// stacktraces when portable pdb files exists. Default is disabled. + /// + public const string DebugMono = "DebugMono"; + /// /// Indicates how to load tests across application domains. Values are: /// "Default", "None", "Single", "Multiple". Default is "Multiple" diff --git a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs index bdc344819..dc9793bb1 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs @@ -27,6 +27,7 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) bool runAsX86 = package.GetSetting(EnginePackageSettings.RunAsX86, false); bool debugTests = package.GetSetting(EnginePackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(EnginePackageSettings.DebugAgent, false); + bool debugMono = package.GetSetting(EnginePackageSettings.DebugMono, false); string traceLevel = package.GetSetting(EnginePackageSettings.InternalTraceLevel, "Off"); bool loadUserProfile = package.GetSetting(EnginePackageSettings.LoadUserProfile, false); string workDirectory = package.GetSetting(EnginePackageSettings.WorkDirectory, string.Empty); @@ -55,7 +56,7 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) { StartInfo.FileName = RuntimeFramework.MonoExePath; string monoOptions = "--runtime=v" + TargetRuntime.ClrVersion.ToString(3); - if (debugTests || debugAgent) monoOptions += " --debug"; + if (debugTests || debugAgent || debugMono) monoOptions += " --debug"; StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, AgentExePath, AgentArgs); } else if (TargetRuntime.Runtime == RuntimeType.Net) From de3f0e35a2dddc72e68e1afbc14efa715ac3c2a2 Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Thu, 23 Jul 2020 12:14:45 +0200 Subject: [PATCH 2/5] Fix: Naming of mono debug --- src/NUnitConsole/nunit3-console/ConsoleOptions.cs | 6 +++--- src/NUnitConsole/nunit3-console/ConsoleRunner.cs | 4 ++-- src/NUnitConsole/nunit3-console/EnginePackageSettings.cs | 2 +- src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs | 2 +- src/NUnitEngine/nunit.engine/Services/AgentProcess.cs | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs index 17bf499fa..7c1a22bc0 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs @@ -173,7 +173,7 @@ public IList ResultOutputSpecifications public bool DebugAgent { get; private set; } - public bool DebugMono { get; private set; } + public bool MonoUseDebugOption { get; private set; } public bool ListExtensions { get; private set; } @@ -399,8 +399,8 @@ private void ConfigureOptions() this.AddNetFxOnlyOption("debug", "Launch debugger to debug tests.", NetFxOnlyOption("debug", v => DebugTests = v != null)); - this.AddNetFxOnlyOption("debugmono", "Agents launched using mono is launched with --debug", - NetFxOnlyOption("debugmono", v => DebugMono = v != null)); + this.AddNetFxOnlyOption("monodebug", "Agents launched using mono is launched with --debug", + NetFxOnlyOption("monodebug", v => MonoUseDebugOption = v != null)); this.AddNetFxOnlyOption("pause", "Pause before running to allow attaching a debugger.", NetFxOnlyOption("pause", v => PauseBeforeRun = v != null)); diff --git a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs index 3ff5d5706..fee684954 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs @@ -447,8 +447,8 @@ public static TestPackage MakeTestPackage(ConsoleOptions options) package.AddSetting(FrameworkPackageSettings.NumberOfTestWorkers, 0); } - if (options.DebugMono) - package.AddSetting(EnginePackageSettings.DebugMono, true); + if (options.MonoUseDebugOption) + package.AddSetting(EnginePackageSettings.MonoUseDebugOption, true); if (options.PauseBeforeRun) package.AddSetting(FrameworkPackageSettings.PauseBeforeRun, true); diff --git a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs index 8f4c3a996..377e95689 100644 --- a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs +++ b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs @@ -75,7 +75,7 @@ public static class EnginePackageSettings /// be started with --debug or not. This allows filenames and line numbers in /// stacktraces when portable pdb files exists. Default is disabled. /// - public const string DebugMono = "DebugMono"; + public const string MonoUseDebugOption = "MonoUseDebugOption"; /// /// Indicates how to load tests across application domains. Values are: diff --git a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs index e7e30e3cd..81cb9630c 100644 --- a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs +++ b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs @@ -80,7 +80,7 @@ public static class EnginePackageSettings /// be started with --debug or not. This allows filenames and line numbers in /// stacktraces when portable pdb files exists. Default is disabled. /// - public const string DebugMono = "DebugMono"; + public const string MonoUseDebugOption = "MonoUseDebugOption"; /// /// Indicates how to load tests across application domains. Values are: diff --git a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs index dc9793bb1..4bc9982ba 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs @@ -27,7 +27,7 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) bool runAsX86 = package.GetSetting(EnginePackageSettings.RunAsX86, false); bool debugTests = package.GetSetting(EnginePackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(EnginePackageSettings.DebugAgent, false); - bool debugMono = package.GetSetting(EnginePackageSettings.DebugMono, false); + bool monoDebug = package.GetSetting(EnginePackageSettings.MonoUseDebugOption, false); string traceLevel = package.GetSetting(EnginePackageSettings.InternalTraceLevel, "Off"); bool loadUserProfile = package.GetSetting(EnginePackageSettings.LoadUserProfile, false); string workDirectory = package.GetSetting(EnginePackageSettings.WorkDirectory, string.Empty); @@ -56,7 +56,7 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) { StartInfo.FileName = RuntimeFramework.MonoExePath; string monoOptions = "--runtime=v" + TargetRuntime.ClrVersion.ToString(3); - if (debugTests || debugAgent || debugMono) monoOptions += " --debug"; + if (debugTests || debugAgent || monoDebug) monoOptions += " --debug"; StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, AgentExePath, AgentArgs); } else if (TargetRuntime.Runtime == RuntimeType.Net) From 26bd166ebf15b8da54ea24dcd0fc66f2af7ecae9 Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Thu, 23 Jul 2020 16:10:19 +0200 Subject: [PATCH 3/5] Change to always keep --debug for mono --- .../nunit3-console.tests/NetCoreConsoleOptionsTest.cs | 1 - src/NUnitConsole/nunit3-console/ConsoleOptions.cs | 5 ----- src/NUnitConsole/nunit3-console/ConsoleRunner.cs | 3 --- src/NUnitConsole/nunit3-console/EnginePackageSettings.cs | 7 ------- src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs | 7 ------- src/NUnitEngine/nunit.engine/Services/AgentProcess.cs | 4 +--- 6 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs b/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs index 459c42741..d413e9b20 100644 --- a/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs +++ b/src/NUnitConsole/nunit3-console.tests/NetCoreConsoleOptionsTest.cs @@ -93,7 +93,6 @@ private static IEnumerable TestCases "-loaduserprofile", "-agents=1", "-debug", - "-debugmono", "-pause", "-set-principal-policy=NoPrincipal", #if DEBUG diff --git a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs index 7c1a22bc0..485fbe7dd 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs @@ -173,8 +173,6 @@ public IList ResultOutputSpecifications public bool DebugAgent { get; private set; } - public bool MonoUseDebugOption { get; private set; } - public bool ListExtensions { get; private set; } public bool PauseBeforeRun { get; private set; } @@ -399,9 +397,6 @@ private void ConfigureOptions() this.AddNetFxOnlyOption("debug", "Launch debugger to debug tests.", NetFxOnlyOption("debug", v => DebugTests = v != null)); - this.AddNetFxOnlyOption("monodebug", "Agents launched using mono is launched with --debug", - NetFxOnlyOption("monodebug", v => MonoUseDebugOption = v != null)); - this.AddNetFxOnlyOption("pause", "Pause before running to allow attaching a debugger.", NetFxOnlyOption("pause", v => PauseBeforeRun = v != null)); diff --git a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs index fee684954..8c9530605 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs @@ -447,9 +447,6 @@ public static TestPackage MakeTestPackage(ConsoleOptions options) package.AddSetting(FrameworkPackageSettings.NumberOfTestWorkers, 0); } - if (options.MonoUseDebugOption) - package.AddSetting(EnginePackageSettings.MonoUseDebugOption, true); - if (options.PauseBeforeRun) package.AddSetting(FrameworkPackageSettings.PauseBeforeRun, true); diff --git a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs index 377e95689..c7a1168a4 100644 --- a/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs +++ b/src/NUnitConsole/nunit3-console/EnginePackageSettings.cs @@ -70,13 +70,6 @@ public static class EnginePackageSettings /// public const string DebugAgent = "DebugAgent"; - /// - /// Bool flag indicating whether an agent started under using mono should - /// be started with --debug or not. This allows filenames and line numbers in - /// stacktraces when portable pdb files exists. Default is disabled. - /// - public const string MonoUseDebugOption = "MonoUseDebugOption"; - /// /// Indicates how to load tests across application domains. Values are: /// "Default", "None", "Single", "Multiple". Default is "Multiple" diff --git a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs index 81cb9630c..104f5f7dd 100644 --- a/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs +++ b/src/NUnitEngine/nunit.engine.core/EnginePackageSettings.cs @@ -75,13 +75,6 @@ public static class EnginePackageSettings /// public const string DebugAgent = "DebugAgent"; - /// - /// Bool flag indicating whether an agent started under using mono should - /// be started with --debug or not. This allows filenames and line numbers in - /// stacktraces when portable pdb files exists. Default is disabled. - /// - public const string MonoUseDebugOption = "MonoUseDebugOption"; - /// /// Indicates how to load tests across application domains. Values are: /// "Default", "None", "Single", "Multiple". Default is "Multiple" diff --git a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs index 4bc9982ba..360e1ffda 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs @@ -8,7 +8,6 @@ using System.Diagnostics; using System.IO; using System.Text; -using NUnit.Engine; using NUnit.Engine.Internal; namespace NUnit.Engine.Services @@ -27,7 +26,6 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) bool runAsX86 = package.GetSetting(EnginePackageSettings.RunAsX86, false); bool debugTests = package.GetSetting(EnginePackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(EnginePackageSettings.DebugAgent, false); - bool monoDebug = package.GetSetting(EnginePackageSettings.MonoUseDebugOption, false); string traceLevel = package.GetSetting(EnginePackageSettings.InternalTraceLevel, "Off"); bool loadUserProfile = package.GetSetting(EnginePackageSettings.LoadUserProfile, false); string workDirectory = package.GetSetting(EnginePackageSettings.WorkDirectory, string.Empty); @@ -56,7 +54,7 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) { StartInfo.FileName = RuntimeFramework.MonoExePath; string monoOptions = "--runtime=v" + TargetRuntime.ClrVersion.ToString(3); - if (debugTests || debugAgent || monoDebug) monoOptions += " --debug"; + monoOptions += " --debug"; StartInfo.Arguments = string.Format("{0} \"{1}\" {2}", monoOptions, AgentExePath, AgentArgs); } else if (TargetRuntime.Runtime == RuntimeType.Net) From fbffdff3ba44aec733115d8f9cf924c36a90d3d7 Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Thu, 23 Jul 2020 16:18:10 +0200 Subject: [PATCH 4/5] Minor clean up of now unused code --- src/NUnitEngine/nunit.engine/Services/AgentProcess.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs index 360e1ffda..1dfb79628 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs @@ -24,7 +24,6 @@ public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) // Access other package settings bool runAsX86 = package.GetSetting(EnginePackageSettings.RunAsX86, false); - bool debugTests = package.GetSetting(EnginePackageSettings.DebugTests, false); bool debugAgent = package.GetSetting(EnginePackageSettings.DebugAgent, false); string traceLevel = package.GetSetting(EnginePackageSettings.InternalTraceLevel, "Off"); bool loadUserProfile = package.GetSetting(EnginePackageSettings.LoadUserProfile, false); From 6b42aa0284de5f9f06632785c0b219b2e48804fb Mon Sep 17 00:00:00 2001 From: Christian Bay Date: Thu, 23 Jul 2020 16:46:48 +0200 Subject: [PATCH 5/5] Fix unittests --- src/NUnitEngine/nunit.engine.tests/Services/AgentProcessTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NUnitEngine/nunit.engine.tests/Services/AgentProcessTests.cs b/src/NUnitEngine/nunit.engine.tests/Services/AgentProcessTests.cs index 8811b30e8..55e45fbea 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/AgentProcessTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/AgentProcessTests.cs @@ -80,6 +80,7 @@ public void DefaultValues(string framework) if (targetRuntime.Runtime == RuntimeType.Mono) { string monoOptions = "--runtime=v" + targetRuntime.ClrVersion.ToString(3); + monoOptions += " --debug"; Assert.That(startInfo.FileName, Is.EqualTo(RuntimeFramework.MonoExePath)); Assert.That(startInfo.Arguments, Is.EqualTo( $"{monoOptions} \"{process.AgentExePath}\" {process.AgentArgs}"));