背景:
我有一些运行非常缓慢的代码,因此建议我对代码进行分析以找出原因。
下图显示了在Linux上运行的Visual Studio Code,我在下面使用了一些dotnet命令来创建trace.nettrace
和trace.speedscope.json
文件:
然后,我尝试将trace.speedscope.json
文件导入到https://www.speedscope.app/中,并出现以下错误:
命令:
我使用以下页面作为创建跟踪Speedscope文件的指南:
https://github.com/jlfwong/speedscope/wiki/Importing-from-.NET-Core
具体来说,我使用的命令是:dotnet trace collect -p <process id> --format speedscope
示例:
生成的速度表跟踪文件示例可以在此处查看:
https://pastebin.com/4WW2tbiF
问题:
如何创建可与https://www.speedscope.app/一起使用的Speedscope跟踪文件?
最佳答案
您的命令(基于manual和screenshot:
$ dotnet tool install --global dotnet-trace
$ dotnet trace collect -p <process id> --format speedscope
No profile or providers specified, defaulting to trace profile 'cpu-sampling'
Provider Name Level Enabled by
Microsoft-DotNETCore-SampleProfiler Informational(4) --profile
Microsoft-Windows-DotNETRuntime Informational(4) --profile
Process: /Code/mysql-insert-1234/bin/Debug/netcoreapp3.1/mysql-insert-1234
Output File: /Code/mysql-insert-1234/trace.nettrace
[00:00:00:02] Recording trace 2.0604 (MB)
Press <Enter> or <Ctrl+C> to exit... Trace completed.
$ dotnet trace convert --format speedscope trace.nettrace
Writing: /Code/mysql-insert-1234/trace.speedscope.json
Conversion complete
来自screenshot的错误消息(类似的错误是从原始json文件再现的):speedscope v1.8.0
Importing as speedscope json file
Failed to load format error: Tried to leave frame "AppendExtraBuffer" while frame "TryGetValue" was at the top at 31.8
at n._leaveFrame (160)
at n.leaveFrame (160)
at speedscope.js:166
at a (166)
at speedscope.js:166
at Array.map (<anonymous>)
at s (166)
at import.js:111
at Generator.next (<anonymous>)
at s (import.js:111)
基于错误的“错误:试图离开框架”片段,我能够找到两个相似错误的报告:https://github.com/dotnet/diagnostics/issues/1206
和
https://github.com/microsoft/perfview/issues/1178
因此,据说该错误与speedscope的https://github.com/jlfwong/speedscope/pull/273更新(“从jlfwong/fail-fail-unmatched-loudly 2020年5月23日将jlfwong合并为2个提交提交到master”)which was included转换为Speedscope的v1.6.0(2020年5月31日)版本有关。应用程式。我可以建议您尝试使用早期版本的speedscope来解析此文件(2020年1月16日起为v1.5.3)或获取更高版本的perfview(应用https://github.com/microsoft/perfview/pull/1212 commit)。
有speedscope应用程序的预编译脱机版本:https://github.com/jlfwong/speedscope/releases-从https://github.com/jlfwong/speedscope/releases/download/v1.5.3/speedscope-1.5.3.zip获取pull/273更新之前的版本
解压缩它,使用浏览器打开index.html并加载您的json跟踪文件。我能够使用较早版本的speedscope从https://pastebin.com/4WW2tbiF渲染您的示例
不知道如何使用npm或更新microsoft/perfview或使用非发行版的microsoft/perfview。
关于c# - 当导入Speedscope时,为什么在Linux中跟踪C#代码失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63020262/