Description
This issue probably applies to other things than perf but it's what I mainly use.
When using perf on a .NET process, you'll get such symbols
class [System.Runtime]System.Threading.Tasks.Task`1<int32> [Test] Program::AsyncVoidMethodChild1(valuetype [System.Runtime]System.ValueTuple`2<int32,class [System.Collections]System.Collections.Generic.List`1<string>>)[MinOptJitted]
Spotting the method name (AsyncVoidMethodChild1
here) can be challenging which doesn't help analysis the perf result.
I've tried building the regex to parse a symbol but it's very challenging because it seems like there a lot of inconsistencies.
Would it possible to somehow have cleaned .NET symbols? For example above that would give
System.Threading.Tasks.Task<int32> Program.AsyncVoidMethodChild1((int32, System.Collections.Generic.List<string>))
Or alternatively, have a consistence mangling so it can be parsed.
What do I mean by inconsistent? Here are some examples:
void [Test] DummyWork::Consume(!!0&)[MinOptJitted]
What's !!0
?
instance void [Criteo.KeyValueStore] Criteo.KeyValueStore.Storage.BucketStorage+<Sdk-Interfaces-KeyValueStore-IAsyncStorage-GetAsync>d__16::MoveNext()[OptimizedTier1]
why is -
used
instance bool [System.Private.CoreLib] System.Collections.Generic.List`1+Enumerator[System.__Canon]::MoveNext()[OptimizedTier1]
Generic for the parent is '1 and doesn't specify the types, generic for the child class doesn't use '1 but brackets and what is System.__Canon
.