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.
Bu makale şunlar için geçerlidir: ✔️ .NET Core 3.1 ve sonraki sürümler ✔️ .NET Framework 4.5 ve üzeri sürümler
Başlarken kılavuzu, en az EventSource oluşturmayı ve izleme dosyasında olayları toplamayı gösterdi. Bu öğreticide, farklı araçların izlemede hangi olayların toplandığını nasıl yapılandırabileceği ve ardından izlemeleri nasıl görüntüleyebileceği gösterilmektedir.
Örnek uygulama
Bu öğretici için olaylar oluşturan aşağıdaki örnek uygulamayı kullanacaksınız. Aşağıdaki kodu içeren bir .NET konsol uygulaması derleyin:
using System.Diagnostics.Tracing;
namespace EventSourceDemo
{
public static class Program
{
public static void Main(string[] args)
{
DemoEventSource.Log.AppStarted("Hello World!", 12);
DemoEventSource.Log.DebugMessage("Got here");
DemoEventSource.Log.DebugMessage("finishing startup");
DemoEventSource.Log.RequestStart(3);
DemoEventSource.Log.RequestStop(3);
}
}
[EventSource(Name = "Demo")]
class DemoEventSource : EventSource
{
public static DemoEventSource Log { get; } = new DemoEventSource();
[Event(1, Keywords = Keywords.Startup)]
public void AppStarted(string message, int favoriteNumber) => WriteEvent(1, message, favoriteNumber);
[Event(2, Keywords = Keywords.Requests)]
public void RequestStart(int requestId) => WriteEvent(2, requestId);
[Event(3, Keywords = Keywords.Requests)]
public void RequestStop(int requestId) => WriteEvent(3, requestId);
[Event(4, Keywords = Keywords.Startup, Level = EventLevel.Verbose)]
public void DebugMessage(string message) => WriteEvent(4, message);
public class Keywords
{
public const EventKeywords Startup = (EventKeywords)0x0001;
public const EventKeywords Requests = (EventKeywords)0x0002;
}
}
}
Hangi olayların toplayacağını yapılandırma
Olay toplama araçlarının çoğu, izlemede hangi olayların dahil edilmesi gerektiğine karar vermek için bu yapılandırma seçeneklerini kullanır:
- Sağlayıcı adları - Bu, bir veya daha fazla EventSource adının listesidir. Yalnızca bu listedeki EventSources'ta tanımlanan olaylar dahil edilmeye uygundur. Önceki örnek uygulamadaki DemoEventSource sınıfından olayları toplamak için, sağlayıcı adları listesine EventSource adını "Demo" eklemeniz gerekir.
- Olay ayrıntı düzeyi - Her sağlayıcı için bir ayrıntı düzeyi tanımlayabilirsiniz ve ayrıntı düzeyi bu düzeyden yüksek olan olaylar izlemenin dışında tutulur. Önceki örnek uygulamadaki "Tanıtım" sağlayıcısının Bilgi ayrıntı düzeyinde toplanması gerektiğini belirttiyseniz DebugMessage olayı daha yüksek bir düzeye sahip olduğundan dışlanır. LogAlways(0) belirtilmesi EventLevel , ayrıntı düzeyindeki olayların dahil edilmesi gerektiğini belirten özel bir durumdur.
- Olay anahtar sözcükleri - Her sağlayıcı için bir anahtar sözcük kümesi tanımlayabilirsiniz ve yalnızca anahtar sözcüklerden en az biriyle etiketlenmiş olaylar eklenir. Yukarıdaki örnek uygulamada Startup anahtar sözcüğünü belirttiyseniz yalnızca AppStarted ve DebugMessage olayları dahil edilir. Anahtar sözcük belirtilmezse bu özel bir durumdur ve herhangi bir anahtar sözcük içeren olayların dahil edilmesi gerektiği anlamına gelir.
Sağlayıcı yapılandırmasını açıklamaya yönelik kurallar
Her araç izleme yapılandırmasını ayarlamak için kendi kullanıcı arabirimini belirlese de, birçok aracın yapılandırmayı metin dizesi olarak belirtirken kullandığı ortak bir kural vardır. Sağlayıcı listesi noktalı virgülle ayrılmış liste olarak belirtilir ve listedeki her sağlayıcı öğesi ad, anahtar sözcükler ve iki nokta üst üste ile ayrılmış düzeyden oluşur. Örneğin, "Tanıtım:3:5", bit maskesi 3 ( Startup bit ve bit) ve RequestsEventLevel 5 Verboseanahtar sözcüğü olan "Demo" adlı EventSource'ı tanımlar. Birçok araç, düzey veya anahtar sözcük filtrelemesi istenmediyse düzeyi ve anahtar sözcükleri atlamanıza da olanak sağlar. Örneğin, "Tanıtım::5" yalnızca düzey tabanlı filtreleme yapar, "Tanıtım:3" yalnızca anahtar sözcük tabanlı filtreleme yapar ve "Tanıtım" anahtar sözcük veya düzey filtrelemesi yapmaz.
Visual Studio
Visual Studio profil oluşturucu, izlemeleri toplamayı ve görüntülemeyi destekler. Ayrıca dotnet-trace gibi diğer araçlar tarafından önceden toplanan izlemeleri de görüntüleyebilir.
İzleme toplama
Visual Studio'nun profil oluşturma araçlarının çoğu, CPU kullanımını veya ayırmalarını analiz etme gibi belirli bir amaca hizmet eden önceden tanımlanmış olay kümelerini kullanır. Özelleştirilmiş olaylar içeren bir izleme toplamak için Olay Görüntüleyicisi aracını kullanacaksınız.
Visual Studio'da Performans Profili Oluşturucu'yu açmak için Alt+F2'yi seçin.
Olay Görüntüleyicisi onay kutusunu seçin.
Yapılandırma penceresini açmak için Olay Görüntüleyicisi'nin sağındaki küçük dişli simgesini seçin.
Ek Sağlayıcılar'ın altındaki tabloda, Etkin onay kutusuna tıklayıp sağlayıcı adını, anahtar sözcükleri ve düzeyi girerek yapılandırmak istediğiniz her sağlayıcı için bir satır ekleyin. Sağlayıcı GUID'sini girmeniz gerekmez; otomatik olarak hesaplanır.
Yapılandırma ayarlarını onaylamak için Tamam'ı seçin.
Uygulamayı çalıştırmaya ve günlükleri toplamaya başlamak için Başlat'ı seçin.
Günlükleri toplamayı durdurmak ve toplanan verileri göstermek için Koleksiyonu Durdur'u seçin veya uygulamadan çıkın.
İzlemeyi görüntüleme
Visual Studio kendi topladığı izlemeleri görüntüleyebilir veya diğer araçlarda toplanan izlemeleri görüntüleyebilir. Diğer araçlardaki izlemeleri görüntülemek için Dosya>Aç'ı kullanın ve dosya seçicide bir izleme dosyası seçin. Visual Studio profil oluşturucu .etl dosyalarını (ETW'nin standart biçimi), .nettrace dosyalarını (EventPipe'in standart biçimi) ve .diagsession dosyalarını (Visual Studio'nun standart biçimi) destekler. Visual Studio'da izleme dosyalarıyla çalışma hakkında bilgi için Visual Studio belgelerine bakın.
Not
Visual Studio, açıkça yapılandırılmamış olsalar bile bazı olayları ETW veya EventPipe'den otomatik olarak toplar. Sağlayıcı Adı veya Olay Adı sütununda tanımadığınız olayları görürseniz ve bunları filtrelemek istiyorsanız, yalnızca görüntülemek istediğiniz olayları seçmek için sağdaki filtre simgesini kullanın.
PerfView
PerfView, .NET ekibi tarafından oluşturulan ve ETW izlemelerini toplayıp görüntüleyebilen bir performans aracıdır. Ayrıca çeşitli biçimlerde diğer araçlar tarafından toplanan izleme dosyalarını da görüntüleyebilir. Bu öğreticide, tanıtım uygulamasının ETW izlemesini toplayacak ve ardından PerfView'un olay görüntüleyicisinde toplanan olayları inceleyeceksiniz.
İzleme toplama
Sürümler sayfasından PerfView'ı indirin. Bu öğretici PerfView sürüm 2.0.76 ile yapılmıştır, ancak son sürümler işe yaramalıdır.
Yönetici izinleriyle PerfView.exe başlatın.
Not
ETW izleme koleksiyonu her zaman yönetici izinleri gerektirir, ancak önceden var olan bir izlemeyi görüntülemek için yalnızca PerfView kullanıyorsanız, özel izin gerekmez.
Topla menüsünde Çalıştır'ı seçin. Bu, tanıtım uygulamasının yolunu gireceğiniz yeni bir iletişim kutusu açar.
Hangi olayların toplandığını yapılandırmak için iletişim kutusunun altındaki Gelişmiş Seçenekler'i genişletin. Ek Sağlayıcılar metin kutusuna, daha önce açıklanan geleneksel metin biçimini kullanarak sağlayıcılar girin. Bu durumda, "Tanıtım:1:4" girersiniz; bu, anahtar sözcük biti 1 (
Startupolaylar) ve ayrıntı 4 (Informationalanlamına gelir).Uygulamayı başlatmak ve izlemeyi toplamaya başlamak için Komutu Çalıştır düğmesini seçin. Uygulamadan çıkıldığında PerfViewData.etl izlemesi geçerli dizine kaydedilir.
İzlemeyi görüntüleme
Sol üstteki ana pencere açılan metin kutusunda, izleme dosyasını içeren dizini seçin. Ardından aşağıdaki ağaç görünümünde izleme dosyasına çift tıklayın.
Olaylar görüntüleyicisini açmak için izleme dosyasının altındaki ağaç görünümünde görüntülenen Olaylar öğesine çift tıklayın.
İzlemedeki tüm olay türleri soldaki listede gösterilir. Sağ taraftaki tabloda bu türdeki tüm olayları göstermek için Demo\AppStarted gibi bir olay türüne çift tıklayın.
Daha fazla bilgi edinin
PerfView kullanma hakkında daha fazla bilgi edinmek için Bkz. PerfView video öğreticileri.
dotnet-trace
dotnet-trace , EventPipe izleme kullanarak .NET Core uygulamalarından izleme toplayan platformlar arası bir komut satırı aracıdır. İzleme verilerini görüntülemeyi desteklemez, ancak topladığı izlemeler PerfView veya Visual Studio gibi diğer araçlar tarafından görüntülenebilir. dotnet-trace ayrıca varsayılan .nettrace biçim izlemelerini Chromium veya Speedscope gibi diğer biçimlere dönüştürmeyi de destekler.
İzleme toplama
dotnet-trace'i indirin ve yükleyin.
Komut satırında dotnet-trace collect komutunu çalıştırın:
E:\temp\EventSourceDemo\bin\Debug\net6.0>dotnet-trace collect --providers Demo:1:4 -- EventSourceDemo.exeBu, şuna benzer bir çıkış göstermelidir:
E:\temp\EventSourceDemo\bin\Debug\net6.0> dotnet-trace collect --providers Demo:1:4 -- EventSourceDemo.exe Provider Name Keywords Level Enabled By Demo 0x0000000000000001 Informational(4) --providers Launching: EventSourceDemo.exe Process : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe Output File : E:\temp\EventSourceDemo\bin\Debug\net6.0\EventSourceDemo.exe_20220317_021512.nettrace [00:00:00:00] Recording trace 0.00 (B) Press <Enter> or <Ctrl+C> to exit... Trace completed.dotnet-trace bağımsız değişkeninde sağlayıcı yapılandırmasını
--providerstanımlamak için geleneksel metin biçimini kullanır. dotnet-trace kullanarak izleme alma hakkında daha fazla seçenek için dotnet-trace belgelerine bakın.
EventListener
System.Diagnostics.Tracing.EventListener , tarafından oluşturulan olaylar için geri çağırmaları almak üzere işlem içinde kullanılabilecek bir .NET API'dir System.Diagnostics.Tracing.EventSource. Bu API, özel günlük araçları oluşturmak veya bellekteki olayları seri hale getirmeden analiz etmek için kullanılabilir.
kullanmak EventListeneriçin, öğesinden EventListenertüretilen bir tür bildirin, ilgilendiğiniz herhangi bir EventSource'tan olaylara abone olmak için komutunu çağırın EnableEvents ve yeni bir olay kullanılabilir olduğunda çağrılacak olan öğesini geçersiz kılın OnEventWritten. Hangi EventSource nesnelerinin mevcut olduğunu bulmak için geçersiz kılmak OnEventSourceCreated genellikle yararlıdır, ancak bu gerekli değildir. İletiler alındığında konsola yazdıran örnek EventListener bir uygulama aşağıda verilmiştir:
Bu kodu tanıtım uygulamasına ekleyin.
class ConsoleWriterEventListener : EventListener { protected override void OnEventSourceCreated(EventSource eventSource) { if(eventSource.Name == "Demo") { EnableEvents(eventSource, EventLevel.Informational); } } protected override void OnEventWritten(EventWrittenEventArgs eventData) { Console.WriteLine(eventData.TimeStamp + " " + eventData.EventName); } }MainYöntemini değiştirerek yeni dinleyicinin bir örneğini oluşturun.public static void Main(string[] args) { ConsoleWriterEventListener listener = new ConsoleWriterEventListener(); DemoEventSource.Log.AppStarted("Hello World!", 12); DemoEventSource.Log.DebugMessage("Got here"); DemoEventSource.Log.DebugMessage("finishing startup"); DemoEventSource.Log.RequestStart(3); DemoEventSource.Log.RequestStop(3); }Uygulamayı derleyin ve çalıştırın. Daha önce çıkışı yoktu, ancak şimdi olayları konsola yazıyor:
3/24/2022 9:23:35 AM AppStarted 3/24/2022 9:23:35 AM RequestStart 3/24/2022 9:23:35 AM RequestStop