in src/Program.cs [62:99]
public static int Main(string[] args)
{
if (args.Length < 1 ||
!int.TryParse(args[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out var pid))
{
return PrintUsageError();
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && Environment.Is64BitOperatingSystem && Environment.Is64BitProcess)
{
var targetProcess = Process.GetProcessById(pid);
if (IsWow64Process(targetProcess.Handle, out var targetProcessIsWow64) && targetProcessIsWow64)
return RerunMainAs32BitProcess(args);
}
args = args.Skip(1).ToArray(); // skip pid
var threadDumpDir = Environment.GetEnvironmentVariable(ThreadDumpDirEnvVar);
if (!string.IsNullOrEmpty(threadDumpDir) && !Directory.Exists(threadDumpDir))
{
Console.Error.WriteLine($"Path [{threadDumpDir}] in THREAD_DUMP_DIR environment variable not exists or not directory");
return 1;
}
var processDumpParameters = TryParseProcessDumpParameters(args, pid);
if (processDumpParameters != null)
{
return ToResult(DumpProcess(processDumpParameters));
}
var threadDumpParameters = TryParseThreadDumpParameters(args, pid, threadDumpDir);
if (threadDumpParameters == null)
{
return PrintUsageError();
}
return ToResult(DumpStackTraces(threadDumpParameters));
}