Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
TraceProcessor , simgeleri yüklemeyi ve çeşitli veri kaynaklarından yığın almayı destekler. Aşağıdaki konsol uygulaması, CPU örneklerine bakar ve belirli bir işlevin çalıştırıldığı tahmini süreyi (izlemenin CPU kullanımına ilişkin istatistiksel örneklemesine göre) gösterir.
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]}");
}
}
}
}
Bu programın çalıştırılması aşağıdakine benzer bir çıkış oluşturur:
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
(Çıkış ayrıntıları izlemeye bağlı olarak değişir).
Simgeler biçimi
TraceProcessor dahili olarak, PDB'de depolanan bazı verilerin önbelleği olan SymCache biçimini kullanır. Sembolleri yüklerken TraceProcessor, bu SymCache dosyaları (SymCache yolu) için kullanılacak bir konum belirtmeyi gerektirir ve isteğe bağlı olarak PDB'lere erişmek için bir SymbolPath belirtmeyi destekler. Bir SymbolPath sağlandığında, TraceProcessor gerektiğinde PDB dosyalarından SymCache dosyaları oluşturur ve aynı verilerin daha sonra işlenmesi daha iyi performans için doğrudan SymCache dosyalarını kullanabilir.
Sonraki Adımlar
Bu öğreticide, izleri işlerken sembolleri nasıl yükleyeceğinizi öğrendiniz.
Sonraki adım, bellekteki her şeyi arabelleğe almadan izleme verilerine erişmek için akış kullanmayı
Windows developer