dotnet / dotnet/diagnostics

How to halt dotnet-trace in an automated context (CI job)

Open
#2,881 9 comments 0 reactions 0 assignees View on GitHub
dotnet-trace enhancement
Dominant language
C++
Stars
1.3k
Forks
404
Avg merge
2d 5h
Merged PRs (30d)
35

Description

Hi.
The dotnet-trace tool expects to end collection when it receives a Ctrl-C/break command or a newline, however, I've been unsuccessful setting up a script to do this in automated fashion. How exactly are we to send the termination event to the tracing tool.

The basic setup is:
```
echo "Creating dotnet-trace with diagnostic port"

$psi = New-Object System.Diagnostics.ProcessStartInfo;
$psi.FileName = "dotnet-trace"
$psi.Arguments = @("collect", "--output", "AppToMonitor-diag.nettrace", "--diagnostic-port", "AppToMonitor-diag.sock")
$psi.UseShellExecute = $false
$psi.RedirectStandardInput = $true

$p = [System.Diagnostics.Process]::Start($psi);

# Time passes, the application is run, one or more times, etc
# Perhaps it is run from another window in parallel, having set
sleep 10
```

The output of the trace program is:
```
No profile or providers specified, defaulting to trace profile 'cpu-sampling'

Provider Name Keywords Level Enabled By
Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 Informational(4) --profile
Microsoft-Windows-DotNETRuntime 0x00000014C14FCCBD Informational(4) --profile

Waiting for connection on /home/username/Unity.Licensing.Client-diag.sock
Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/username/AppToMonitor-diag.sock
```

Then, to attempt to halt the application, any input should work, since a newline also should terminate the tool:
```
$p.StandardInput.WriteLine([System.Text.Encoding]::ASCII.GetString(3));
```

I can't seem to get it to stop gracefully on Windows (such that the trace is then legible, and the symbols are correctly identified, ie. missing Rundown events?).
On Linux or MacOS (because we need this to be cross-platform), then we could just resort to calling `kill -SIGQUIT $pid`, which appears to notify the trace tool correctly.

See issue #976, where using the `--duration` flag is difficult for us, as we don't know how long the job will run (varies by multiple orders of magnitude, and changes according to load on the host)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.