mirror of https://github.com/icsharpcode/ILSpy.git
Browse Source
Collecting from the two EventSource providers differs by tooling, not by platform: dotnet-trace/EventPipe works the same everywhere, with ETW/PerfView as the Windows-only alternative. The doc lists the keyword masks and levels so sessions can enable only the areas of interest. Assisted-by: Claude:claude-fable-5:Claude Codepull/3906/head
1 changed files with 81 additions and 0 deletions
@ -0,0 +1,81 @@ |
|||||||
|
# Collecting event traces |
||||||
|
|
||||||
|
ILSpy emits performance trace events through two `EventSource` providers: |
||||||
|
|
||||||
|
| Provider | Instruments | |
||||||
|
| --- | --- | |
||||||
|
| `ICSharpCode.Decompiler` | Decompilation pipeline: per-type/per-member decompilation, type system init, assembly resolution, whole-project decompilation, per-transform timing | |
||||||
|
| `ICSharpCode.ILSpyX` | Frontend support: assembly loading, reference resolution, search, analyzers, bundle/zip extraction, PDB loading | |
||||||
|
|
||||||
|
Events are Start/Stop pairs, so trace viewers derive durations and nesting from the |
||||||
|
event timestamps. Tracing is off by default and costs nothing until a session attaches. |
||||||
|
|
||||||
|
## Keywords and levels |
||||||
|
|
||||||
|
Enable only what you need; the keyword masks combine with bitwise OR. |
||||||
|
|
||||||
|
`ICSharpCode.Decompiler` (all = `0x1F`): |
||||||
|
|
||||||
|
| Keyword | Mask | Level | |
||||||
|
| --- | --- | --- | |
||||||
|
| Decompilation (per type/member) | `0x1` | Informational (4) | |
||||||
|
| TypeSystem | `0x2` | Informational (4) | |
||||||
|
| AssemblyResolver | `0x4` | Informational (4) | |
||||||
|
| ProjectDecompiler | `0x8` | Informational (4) | |
||||||
|
| Transforms (per IL/AST transform, high volume) | `0x10` | Verbose (5) | |
||||||
|
|
||||||
|
`ICSharpCode.ILSpyX` (all = `0x3F`): |
||||||
|
|
||||||
|
| Keyword | Mask | Level | |
||||||
|
| --- | --- | --- | |
||||||
|
| AssemblyLoad | `0x1` | Informational (4) | |
||||||
|
| Resolver | `0x2` | Informational (4) | |
||||||
|
| Search | `0x4` | Informational (4) | |
||||||
|
| Analyzers | `0x8` | Informational (4) | |
||||||
|
| Packages (per-entry extraction is Verbose) | `0x10` | Informational (4) / Verbose (5) | |
||||||
|
| DebugInfo | `0x20` | Informational (4) | |
||||||
|
|
||||||
|
Provider specs below use the `Name:KeywordMask:Level` syntax. |
||||||
|
|
||||||
|
## All platforms: dotnet-trace (EventPipe) |
||||||
|
|
||||||
|
Works identically on Windows, Linux and macOS. |
||||||
|
|
||||||
|
``` |
||||||
|
dotnet tool install --global dotnet-trace |
||||||
|
``` |
||||||
|
|
||||||
|
Attach to a running ILSpy instance (start ILSpy first, interact while collecting, |
||||||
|
Ctrl+C to stop): |
||||||
|
|
||||||
|
``` |
||||||
|
dotnet-trace ps |
||||||
|
dotnet-trace collect -p <pid> --providers "ICSharpCode.Decompiler:0x1F:5,ICSharpCode.ILSpyX:0x3F:5" |
||||||
|
``` |
||||||
|
|
||||||
|
Or launch ILSpy under the collector to also capture startup (assembly list loading): |
||||||
|
|
||||||
|
``` |
||||||
|
dotnet-trace collect --providers "ICSharpCode.Decompiler:0x1F:5,ICSharpCode.ILSpyX:0x3F:5" -- <path-to>/ILSpy |
||||||
|
``` |
||||||
|
|
||||||
|
Viewing the resulting `.nettrace` file: |
||||||
|
|
||||||
|
- Windows: open it in PerfView (Events view) or Visual Studio. |
||||||
|
- Cross-platform: `dotnet-trace convert --format speedscope trace.nettrace` and open |
||||||
|
the output at <https://speedscope.app>, or `--format chromium` for `about:tracing` |
||||||
|
in a Chromium browser. |
||||||
|
|
||||||
|
## Windows alternative: ETW |
||||||
|
|
||||||
|
PerfView (`choco install perfview`) collects the same providers over ETW, which also |
||||||
|
gives you the Start/Stop duration pairing in the Events view: |
||||||
|
|
||||||
|
``` |
||||||
|
PerfView "/onlyProviders=*ICSharpCode.Decompiler,*ICSharpCode.ILSpyX" run ILSpy.exe |
||||||
|
``` |
||||||
|
|
||||||
|
Other options: |
||||||
|
|
||||||
|
- `PerfView collect "/onlyProviders=..."` to attach machine-wide instead of launching. |
||||||
|
- `wpr`/Windows Performance Analyzer with a custom profile listing the two providers. |
||||||
Loading…
Reference in new issue