Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
TraceProcessor támogatja a szimbólumok betöltését és a veremlekérést több adatforrásból. Az alábbi konzolalkalmazás a cpu-mintákat vizsgálja, és egy adott függvény becsült időtartamát adja ki (a nyomkövetés processzorhasználatának statisztikai mintavételezése alapján).
using Microsoft.Windows.EventTracing;
using Microsoft.Windows.EventTracing.Cpu;
using Microsoft.Windows.EventTracing.Symbols;
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
if (args.Length != 3)
{
Console.Error.WriteLine("Usage: GetCpuSampleDuration.exe <trace.etl> <imageName> <functionName>");
return;
}
string tracePath = args[0];
string imageName = args[1];
string functionName = args[2];
Dictionary<string, Duration> matchDurationByCommandLine = new Dictionary<string, Duration>();
using (ITraceProcessor trace = TraceProcessor.Create(tracePath))
{
IPendingResult<ISymbolDataSource> pendingSymbolData = trace.UseSymbols();
IPendingResult<ICpuSampleDataSource> pendingCpuSamplingData = trace.UseCpuSamplingData();
trace.Process();
ISymbolDataSource symbolData = pendingSymbolData.Result;
ICpuSampleDataSource cpuSamplingData = pendingCpuSamplingData.Result;
symbolData.LoadSymbolsForConsoleAsync(SymCachePath.Automatic, SymbolPath.Automatic).GetAwaiter().GetResult();
Console.WriteLine();
IThreadStackPattern pattern = AnalyzerThreadStackPattern.Parse($"{imageName}!{functionName}");
foreach (ICpuSample sample in cpuSamplingData.Samples)
{
if (sample.Stack != null && sample.Stack.Matches(pattern))
{
string commandLine = sample.Process.CommandLine;
if (!matchDurationByCommandLine.ContainsKey(commandLine))
{
matchDurationByCommandLine.Add(commandLine, Duration.Zero);
}
matchDurationByCommandLine[commandLine] += sample.Weight;
}
}
foreach (string commandLine in matchDurationByCommandLine.Keys)
{
Console.WriteLine($"{commandLine}: {matchDurationByCommandLine[commandLine]}");
}
}
}
}
A program futtatása a következőhöz hasonló kimenetet hoz létre:
C:\GetCpuSampleDuration\bin\Debug\> GetCpuSampleDuration.exe C:\boot.etl user32.dll LoadImageInternal
0.0% (0 of 1165; 0 loaded)
<snip>
100.0% (1165 of 1165; 791 loaded)
wininit.exe: 15.99 ms
C:\Windows\Explorer.EXE: 5 ms
winlogon.exe: 20.15 ms
"C:\Users\AdminUAC\AppData\Local\Microsoft\OneDrive\OneDrive.exe" /background: 2.09 ms
(A kimenet részletei a nyomkövetéstől függően változnak).
Szimbólumok formátuma
A TraceProcessor belsőleg a SymCache formátumot használja, amely a PDB-ben tárolt adatok egy részének gyorsítótára. Szimbólumok betöltésekor a TraceProcessornak meg kell adnia a SymCache-fájlokhoz (SymCache-elérési út) használandó helyet, és támogatja a SymbolPath megadását a PDF-fájlok eléréséhez. A SymbolPath megadása után a TraceProcessor szükség szerint létrehozza a SymCache-fájlokat a PDB-fájlokból, és ugyanezen adatok későbbi feldolgozása közvetlenül a SymCache-fájlokat használhatja a jobb teljesítmény érdekében.
Következő lépések
Ebben az oktatóanyagban megtanulta, hogyan tölthet be szimbólumokat a nyomkövetések feldolgozásakor.
A következő lépésben megtudhatja, hogyan a streamelési használatával elérni a nyomkövetési adatokat anélkül, hogy a memóriában mindent pufferelt.
Windows developer