Fix issue #4464 - dotnet-dump (and other tools) Access Denied when /tmp is R/O (...
authorMike McLaughlin <mikem@microsoft.com>
Wed, 10 Apr 2024 04:54:03 +0000 (21:54 -0700)
committerGitHub <noreply@github.com>
Wed, 10 Apr 2024 04:54:03 +0000 (21:54 -0700)
17 files changed:
src/Tools/Common/CommandExtensions.cs
src/Tools/Common/Commands/ProcessStatus.cs
src/Tools/dotnet-counters/Program.cs
src/Tools/dotnet-dsrouter/Program.cs
src/Tools/dotnet-dump/Program.cs
src/Tools/dotnet-gcdump/CommandLine/CollectCommandHandler.cs
src/Tools/dotnet-gcdump/CommandLine/ConvertCommandHandler.cs
src/Tools/dotnet-gcdump/CommandLine/ReportCommandHandler.cs
src/Tools/dotnet-gcdump/Program.cs
src/Tools/dotnet-sos/Program.cs
src/Tools/dotnet-stack/Program.cs
src/Tools/dotnet-stack/ReportCommand.cs
src/Tools/dotnet-stack/Symbolicate.cs
src/Tools/dotnet-trace/CommandLine/Commands/CollectCommand.cs
src/Tools/dotnet-trace/CommandLine/Commands/ConvertCommand.cs
src/Tools/dotnet-trace/CommandLine/Commands/ReportCommand.cs
src/Tools/dotnet-trace/Program.cs

index 421bb2c740a75d788df403475269081325335918..58f91ce579dd03e1ad466161687f8a0459e601e9 100644 (file)
@@ -2,11 +2,12 @@
 // The .NET Foundation licenses this file to you under the MIT license.
 
 using System.CommandLine;
+using System.CommandLine.Builder;
 using System.CommandLine.Invocation;
 
-namespace Microsoft.Tools.Common
+namespace Microsoft.Internal.Common
 {
-    public static class CommandExtenions
+    public static class CommandExtensions
     {
         /// <summary>
         /// Allows the command handler to be included in the collection initializer.
@@ -15,5 +16,24 @@ namespace Microsoft.Tools.Common
         {
             command.Handler = handler;
         }
+
+        /// <summary>
+        /// Setups the diagnostic tools defaults. Like .UseDefault except RegisterWithDotnetSuggest() which
+        /// causes problems on Linux systems with R/O /tmp directory.
+        /// </summary>
+        public static CommandLineBuilder UseToolsDefaults(this CommandLineBuilder builder)
+        {
+            return builder
+                .UseVersionOption()
+                .UseHelp()
+                .UseEnvironmentVariableDirective()
+                .UseParseDirective()
+                .UseDebugDirective()
+                .UseSuggestDirective()
+                .UseTypoCorrections()
+                .UseParseErrorReporting()
+                .UseExceptionHandler()
+                .CancelOnProcessTermination();
+        }
     }
 }
index 2c5c141877f79b0df22e4c3a5066f95278a6e76e..524dc15cb7404aef80953cebee579af3aaba1e46 100644 (file)
@@ -14,7 +14,7 @@ using System.Runtime.InteropServices;
 using System.Text;
 using Microsoft.Diagnostics.NETCore.Client;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 using Process = System.Diagnostics.Process;
 
 namespace Microsoft.Internal.Common.Commands
index da00ca0784986ded2f1cd57f763f40a17d108f8d..4870e3faf8c3cbed3c9906f88cfc0df1075cf84d 100644 (file)
@@ -11,9 +11,9 @@ using System.CommandLine.Parsing;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Commands;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.Counters
 {
@@ -250,7 +250,7 @@ namespace Microsoft.Diagnostics.Tools.Counters
                 .AddCommand(CollectCommand())
                 .AddCommand(ListCommand())
                 .AddCommand(ProcessStatusCommandHandler.ProcessStatusCommand("Lists the dotnet processes that can be monitored."))
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             ParseResult parseResult = parser.Parse(args);
index bc3b53281ddeba7fa19393b48b07a7322d9008a9..ef5d4541ac94f3ba0a42063717b3f10b44fe7de4 100644 (file)
@@ -8,8 +8,8 @@ using System.CommandLine.Builder;
 using System.CommandLine.Parsing;
 using System.Threading;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.DiagnosticsServerRouter
 {
@@ -260,7 +260,7 @@ namespace Microsoft.Diagnostics.Tools.DiagnosticsServerRouter
                 .AddCommand(IOSRouterCommand())
                 .AddCommand(AndroidEmulatorRouterCommand())
                 .AddCommand(AndroidRouterCommand())
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             ParseResult parseResult = parser.Parse(args);
index ec1facfb43c528fa2fff46c83e82f115a1ee2338..76a6ab777967ba366e9daa2a298e0ea285645ca5 100644 (file)
@@ -8,8 +8,8 @@ using System.CommandLine.Invocation;
 using System.CommandLine.Parsing;
 using System.IO;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Commands;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.Dump
 {
@@ -21,7 +21,7 @@ namespace Microsoft.Diagnostics.Tools.Dump
                 .AddCommand(CollectCommand())
                 .AddCommand(AnalyzeCommand())
                 .AddCommand(ProcessStatusCommandHandler.ProcessStatusCommand("Lists the dotnet processes that dumps can be collected from."))
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             return parser.InvokeAsync(args);
index 63f8912ecc9711d4063bbc53bff57d42aab0d262..5c18fa806319650e61aca781ab190abf7de24234 100644 (file)
@@ -9,8 +9,8 @@ using System.Threading;
 using System.Threading.Tasks;
 using Graphs;
 using Microsoft.Diagnostics.NETCore.Client;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.GCDump
 {
index 60de9b0e9e79bd67ceb1b2a0cb0bf29120610c19..af04a9aba6f2e42a2f06a21345ad86a6187d202e 100644 (file)
@@ -5,7 +5,7 @@ using System;
 using System.CommandLine;
 using System.IO;
 using Graphs;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 
 namespace Microsoft.Diagnostics.Tools.GCDump
 {
index 27dd2400eeebaef844d0fd465e4bfce1ca438f08..538b2ef9646b5c7b30bf6e431b3e10ad133e52f2 100644 (file)
@@ -7,10 +7,10 @@ using System.CommandLine.Binding;
 using System.IO;
 using System.Threading;
 using System.Threading.Tasks;
+using Microsoft.Diagnostics.NETCore.Client;
 using Microsoft.Diagnostics.Tools.GCDump.CommandLine;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Diagnostics.NETCore.Client;
 
 namespace Microsoft.Diagnostics.Tools.GCDump
 {
index 5de61d81ad575435390d2d4055a43c960edbad07..dfb1cc9020db70124167e03c733004af01b5fe0b 100644 (file)
@@ -4,6 +4,7 @@
 using System.CommandLine.Builder;
 using System.CommandLine.Parsing;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Commands;
 
 namespace Microsoft.Diagnostics.Tools.GCDump
@@ -17,7 +18,7 @@ namespace Microsoft.Diagnostics.Tools.GCDump
                 .AddCommand(ProcessStatusCommandHandler.ProcessStatusCommand("Lists the dotnet processes that gcdumps can be collected from."))
                 .AddCommand(ReportCommandHandler.ReportCommand())
                 .AddCommand(ConvertCommandHandler.ConvertCommand())
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             return parser.InvokeAsync(args);
index 31dc56e4b702e5e6f89bc86ff16fbebfe288070a..983c81c9ea7d48dee0f7db856e3ff43d66335c6f 100644 (file)
@@ -8,7 +8,7 @@ using System.CommandLine.IO;
 using System.CommandLine.Parsing;
 using System.Runtime.InteropServices;
 using System.Threading.Tasks;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 using SOS;
 
 namespace Microsoft.Diagnostics.Tools.SOS
@@ -20,7 +20,7 @@ namespace Microsoft.Diagnostics.Tools.SOS
             Parser parser = new CommandLineBuilder()
                 .AddCommand(InstallCommand())
                 .AddCommand(UninstallCommand())
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             return parser.InvokeAsync(args);
index 3d9be0e48c4838ee2c3ed152b2114b6c895a6a1a..fe208f761b2606e69f59f191153cce6f402b9c0c 100644 (file)
@@ -4,6 +4,7 @@
 using System.CommandLine.Builder;
 using System.CommandLine.Parsing;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Commands;
 
 namespace Microsoft.Diagnostics.Tools.Stack
@@ -16,7 +17,7 @@ namespace Microsoft.Diagnostics.Tools.Stack
                 .AddCommand(ReportCommandHandler.ReportCommand())
                 .AddCommand(ProcessStatusCommandHandler.ProcessStatusCommand("Lists the dotnet processes that stack traces can be collected from."))
                 .AddCommand(SymbolicateHandler.SymbolicateCommand())
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
 
             return parser.InvokeAsync(args);
index 76ca818eadf28dbadc65be9f07f10eecb3927d10..4684d58d0bc0a6e1fc19949d6c8e7205dfc793fa 100644 (file)
@@ -15,8 +15,8 @@ using Microsoft.Diagnostics.Symbols;
 using Microsoft.Diagnostics.Tracing;
 using Microsoft.Diagnostics.Tracing.Etlx;
 using Microsoft.Diagnostics.Tracing.Stacks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.Stack
 {
index 7a258ff5d193e94beddc187ab01b5228431a2e48..4420617889e572e22b3d43cc5681d4a99f355e8b 100644 (file)
@@ -12,7 +12,7 @@ using System.Reflection.Metadata;
 using System.Reflection.Metadata.Ecma335;
 using System.Reflection.PortableExecutable;
 using System.Text.RegularExpressions;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 
 namespace Microsoft.Diagnostics.Tools.Stack
 {
index 96a13631e2ae67d32d8d3e050855415f10852bf5..7df395bb7bc63772ed4d415e72cbbbc4883503da 100644 (file)
@@ -14,8 +14,8 @@ using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Diagnostics.Monitoring.EventPipe;
 using Microsoft.Diagnostics.NETCore.Client;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Utils;
-using Microsoft.Tools.Common;
 
 namespace Microsoft.Diagnostics.Tools.Trace
 {
index 3e94fc67379f6c2cfd0318e9366734cdab8b5015..75838ef29bff33e580b560bd64dad4b133a26806 100644 (file)
@@ -7,7 +7,7 @@ using System.CommandLine;
 using System.CommandLine.IO;
 using System.IO;
 using System.Linq;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 
 namespace Microsoft.Diagnostics.Tools.Trace
 {
index 5bf9c8603df9eb6916ec9762099abce9658d655c..87b7e8cade38c4f25b7cccaf7e4613aa9a75775d 100644 (file)
@@ -14,7 +14,7 @@ using Microsoft.Diagnostics.Tools.Trace.CommandLine;
 using Microsoft.Diagnostics.Tracing;
 using Microsoft.Diagnostics.Tracing.Etlx;
 using Microsoft.Diagnostics.Tracing.Stacks;
-using Microsoft.Tools.Common;
+using Microsoft.Internal.Common;
 
 namespace Microsoft.Diagnostics.Tools.Trace
 {
index 84e828f97862e9c02f1921cbd98c47e013d32e64..797e6073aa091e1eef625c19d8dc18b1f4759ca2 100644 (file)
@@ -5,6 +5,7 @@ using System.Collections.Generic;
 using System.CommandLine.Builder;
 using System.CommandLine.Parsing;
 using System.Threading.Tasks;
+using Microsoft.Internal.Common;
 using Microsoft.Internal.Common.Commands;
 using Microsoft.Internal.Common.Utils;
 
@@ -20,7 +21,7 @@ namespace Microsoft.Diagnostics.Tools.Trace
                 .AddCommand(ListProfilesCommandHandler.ListProfilesCommand())
                 .AddCommand(ConvertCommandHandler.ConvertCommand())
                 .AddCommand(ReportCommandHandler.ReportCommand())
-                .UseDefaults()
+                .UseToolsDefaults()
                 .Build();
             ParseResult parseResult = parser.Parse(args);
             string parsedCommandName = parseResult.CommandResult.Command.Name;