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.
Önemli
Visual Studio App Center, 30 Haziran 2026'ya kadar desteklenmeye devam edecek Analiz ve Tanılama özellikleri dışında 31 Mart 2025'te kullanımdan kaldırılmıştır. Daha fazla bilgi edinin.
App Center Kilitlenmeleri, uygulamanız her kilitlenişinde otomatik olarak bir kilitlenme günlüğü oluşturur. Günlük, ilk olarak cihazın depolama alanına yazılır ve kullanıcı uygulamayı tekrar başlattığında, kilitlenme raporu App Center'a gönderilir.
App Center SDK'sı yalnızca işlenmeyen .NET özel durumlarından kaynaklanan kilitlenmeleri toplar. C veya C++ kullanırken örneğin yerel çökmeleri toplamaz. Ancak, C++ kilitlenmeleri olan bir uygulamanız varsa, kilitlenmeleri yükleme API'si aracılığıyla App Center'a yükleyebilirsiniz.
Uygulamanızda SDK'yı henüz ayarlamadıysanız WPF/WinForms Başlarken'i izleyin.
WinForms uygulamalarında işlenmeyen özel durumlar
Uyarı
Bu bölüm ve aşağıdaki alt bölümler yalnızca WinForms için geçerlidir. SDK'yı WPF ile tümleştiriyorsanız bu bölümü atlayabilirsiniz.
Varsayılan olarak, bir WinForms uygulamasında işlenmeyen bir özel durum, hata ayıklayıcı bağlı değilse kilitlenmeyi tetiklemez (uygulamadan çıkılmaz).
Bunun yerine, Windows kullanıcıya uygulama yürütmeye devam etme veya uygulamadan çıkma seçeneğini gösteren bir iletişim kutusu gösterir. Sonuç olarak, App Center SDK'sı bu özel durumları otomatik olarak yakalayamaz (kullanıcı Çık düğmesine tıklasa bile).
Kilitlenmeler App Center'da yalnızca uygulamanın kendiliğinden kapanmasına sebep oluyorsa toplanır. App Center her oturumda yalnızca bir çökme vakasını destekler.
WinForms'ta işlenmeyen özel durumları raporlamanın iki yolu vardır. Uygulama işlenmeyen özel durumlarda kilitlenecek şekilde yapılandırılabilir veya çalışmaya devam edebilir ancak işlenmeyen özel durumları çalışma zamanı hataları olarak bildirebilir.
Uygulamayı kilitlenme durumunda çıkacak şekilde yapılandırın.
İşlenmeyen özel durumu App Center'da çökme olarak raporlamanın tek yolu, işlenmeyen özel durumlarla karşılaşıldığında uygulamayı kapatmaktır.
Bunu yapmak için SDK'yı başlatmadan önce bir Windows yöntemi çağırın:
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
AppCenter.Start(...);
Bu seçenek uygulamanızda kabul edilemezse işlenmeyen özel durumu çalışma zamanı hatası olarak bildirebilirsiniz (aşağıda açıklanmıştır).
İşlenmeyen özel durumu çalışma zamanı hatası olarak bildirme
Uygulamanızın işlenmeyen bir özel durumdan sonra çalışmaya devam etmesi gerekiyorsa, özel durumu App Center'da kilitlenme olarak bildiremezsiniz, ancak bunun yerine hata olarak bildirebilirsiniz.
Bunu yapmak için aşağıdaki kod örneğini kullanabilirsiniz:
Application.ThreadException += (sender, args) =>
{
Crashes.TrackError(args.Exception);
};
AppCenter.Start(...);
Uyarı
Hata ayıklayıcı eklendiğinde, işlenmeyen özel durumlar, bir işleyici eklenmediği sürece uygulamanın kapanmasına (çökmesine Application.ThreadException) neden olur.
Test kilitlenmesi oluştur
App Center Kilitlenmeleri, SDK'nın kolay test edilmesi için bir test kilitlenmesi oluşturmanızı sağlayan bir API sağlar. Bu API, hata ayıklama ve sürüm yapılandırmalarını denetler. Bu nedenle, yalnızca hata ayıklarken kullanabilirsiniz çünkü sürüm uygulamalarında çalışmaz.
Crashes.GenerateTestCrash();
Önceki kilitlenme hakkında daha fazla bilgi edinin
App Center Çökmesi, uygulamanızın çökmesi durumunda size daha fazla bilgi sağlayan iki API'si bulundurur.
Uygulama önceki oturumda kilitleniyor muydu?
SDK'yı başlattıktan sonra istediğiniz zaman uygulamanın önceki başlatmada kilitlenip kilitlenmediğini de kontrol edebilirsiniz:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
Bu, kilitlenme gerçekleştikten sonra uygulamanızın davranışını veya kullanıcı arabirimini ayarlamak istemeniz durumunda kullanışlıdır. Bazı geliştiriciler, kullanıcılarından özür dilemek için ek kullanıcı arayüzü göstermeyi ya da kilitlenme oluştuktan sonra onlarla iletişim kurmanın bir yolunu tercih ediyor.
Uyarı
Bu yöntem, Crashes başlatıldıktan sonra kullanılmalıdır, başlamadan önce her zaman false döndürecektir.
Son çökme ile ilgili ayrıntılar
Uygulamanız daha önce kilitlendiyse son kilitlenmeyle ilgili ayrıntıları alabilirsiniz.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Uyarı
Bu yöntem, Crashes başlatıldıktan sonra kullanılmalıdır, başlamadan önce her zaman null döndürecektir.
Bu API için çok sayıda kullanım örneği vardır. En yaygın olanları, bu API'yi çağıran ve özel Çökme temsilcisini veya dinleyicisini uygulayan kişilerdir.
App Center Kilitlenmelerinin kullanımını özelleştirin
App Center Kilitlenmeleri, geliştiricilerin App Center'a kilitlenme günlükleri göndermeden önce ve gönderirken ek eylemler gerçekleştirebilmesi için geri çağrılar (callbacks) sağlar.
Uyarı
App Center başladıktan hemen sonra kilitlenmeleri işlemeye başladığından, geri aramayı çağrısındanAppCenter.Start() önce ayarlayın.
Kilitlenme işlenmeli mi?
Belirli bir kilitlenmenin işlenmesi gerekip gerekmediğine karar vermek istiyorsanız bu geri çağırmayı ayarlayın. Örneğin, yoksaymak isteyebileceğiniz ve App Center'a göndermek istemediğiniz bir sistem seviyesinde çökme olabilir.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Kullanıcının hata raporu göndermek üzere onay isteyin
Kullanıcı gizliliği sizin için önemliyse, App Center'a kilitlenme raporu göndermeden önce kullanıcı onayı almak isteyebilirsiniz. SDK, App Center Çökmeler modülüne herhangi bir çökme raporu göndermeden önce kullanıcı onayını beklemesini belirten bir geri çağırım sağlar.
Bunu yapmayı seçerseniz, kullanıcının onayını almak sizin sorumluluğundadır; örneğin, aşağıdaki seçeneklerden birini içeren bir iletişim kutusu istemi aracılığıyla: Her Zaman Gönder, Gönder ve Gönderme. Girişe bağlı olarak App Center Crashes'e ne yapması gerektiğini belirteceksiniz ve bu durumda kilitlenme uygun şekilde işlenecektir.
Uyarı
SDK bunun için bir iletişim kutusu görüntülemez, uygulamanın kullanıcı onayı istemek için kendi kullanıcı arabirimini sağlaması gerekir.
Uyarı
Kullanıcı onayı iletişim kutusunu implement etmiyorsa, uygulama NotifyUserConfirmation'yi açıkça çağırmamalıdır; Kilitlenmeler modülü, günlükleri sizin için otomatik olarak gönderir.
Aşağıdaki geri çağırma işlevi, SDK'ya kilitlenmeleri göndermeden önce kullanıcı onayını beklemesi için nasıl talimat vereceğinizi gösterir.
Crashes.ShouldAwaitUserConfirmation = () =>
{
// Build your own UI to ask for user consent here. SDK doesn't provide one by default.
// Return true if you built a UI for user consent and are waiting for user input on that custom UI, otherwise false.
return true;
};
Yukarıdaki geri arama içinde true döndürdüğünüz takdirde, uygulamanızın kullanıcı iznini alması (kendi kodunuzu kullanarak) ve sonucu aşağıdaki API'yi kullanarak SDK'ya iletmesi gerekir.
// Depending on the user's choice, call Crashes.NotifyUserConfirmation() with the right value.
Crashes.NotifyUserConfirmation(UserConfirmation.DontSend);
Crashes.NotifyUserConfirmation(UserConfirmation.Send);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);
Kilitlenme günlüğü için gönderim durumu hakkında bilgi edinme
Bazen uygulamanızın çökme durumunu bilmek istersiniz. Yaygın kullanım örneklerinden biri, kullanıcılara uygulamanızın kilitlenme raporu gönderdiğini bildiren kullanıcı arabirimini göstermek veya başlatma işleminden sonra uygulamanızın hızla kilitlenmesi durumunda kilitlenme günlüklerinin gönderildiğinden emin olmak için uygulamanın davranışını ayarlamak istemenizdir. App Center Çökmeleri, uygulamanızda ne olduğunu bildirmek için kullanabileceğiniz üç farklı geri çağırma sağlar.
Aşağıdaki geri arama, SDK bir kilitlenme günlüğü göndermeden önce çağrılacaktır.
Crashes.SendingErrorReport += (sender, e) =>
{
// Your code, e.g. to present a custom UI.
};
Uç noktada ağ sorunları veya kesinti olması ve uygulamayı yeniden başlatmanız durumunda işlem SendingErrorReport yeniden başlatıldıktan sonra yeniden tetikleniyor.
SDK bir kilitlenme günlüğünü başarıyla gönderdikten sonra aşağıdaki geri arama tetiklenir
Crashes.SentErrorReport += (sender, e) =>
{
// Your code, e.g. to hide the custom UI.
};
SDK bir kilitlenme günlüğü gönderemezse aşağıdaki geri arama çağrılır
Crashes.FailedToSendErrorReport += (sender, e) =>
{
// Your code goes here.
};
Almak FailedToSendErrorReport, 4xx kodu gibi kurtarılamaz bir hata oluştuğu anlamına gelir. Örneğin, 401 yanlış olduğu anlamına gelir appSecret .
Bu geri çağırma bir ağ sorunu olduğunda tetiklenmez. Bu durumda SDK yeniden denemeye devam eder (ve ayrıca ağ bağlantısı kapatılırken yeniden denemeleri duraklatır).
Kilitlenme raporuna ek dosyalar ekleme
Kilitlenme raporuna ikili ve metin ekleri ekleyebilirsiniz. SDK, bunları App Center portalında görebilmeniz için çökme ile birlikte gönderir. Önceki uygulama başlatmalarından kaynaklanan depolanan çökme raporu gönderilmeden hemen önce, aşağıdaki geri çağrı işlevi tetiklenecektir. Kilitlenme gerçekleştiğinde çağrılmayacak. Ek dosyasının, minidump dosyaları için ayrılmış bir ad olduğundan adlandırılmadığındanminidump.dmp emin olun. İşte bir kilitlenmeye metin ve resim eklemenin nasıl yapılacağına dair bir örnek:
Crashes.GetErrorAttachments = (ErrorReport report) =>
{
// Your code goes here.
return new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
};
Uyarı
Boyut sınırı şu anda 7 MB'tır. Daha büyük bir ek göndermeye çalışmak bir hatayı tetikler.
Çalışma zamanında App Center Çökmelerini etkinleştirme veya devre dışı bırakma
Çalışma zamanında App Center Crashes özelliğini etkinleştirebilir ve devre dışı bırakabilirsiniz. Devre dışı bırakırsanız SDK, uygulama için kilitlenme bildirimi yapmaz.
Crashes.SetEnabledAsync(false);
App Center Kilitlenmelerini yeniden etkinleştirmek için, aynı API'yi kullanın, ancak true parametresi olarak geçirin.
Crashes.SetEnabledAsync(true);
Diğer API çağrılarını (örneğin IsEnabledAsync) tutarlı hale getirmek için bu çağrıyı beklemeniz gerekmez.
Durum, uygulama başlatmaları arasında cihazın depolama alanında kalıcı olur.
App Center Çökme Raporlarının etkinleştirilip etkinleştirilmediğini kontrol edin
App Center Kilitlenmelerinin etkinleştirilip etkinleştirilmediğini de de de kontrol edebilirsiniz:
bool isEnabled = await Crashes.IsEnabledAsync();
İşlenen Hatalar
App Center, işlenen özel durumları kullanarak hataları izlemenize de olanak tanır. Bunu yapmak için yöntemini TrackError kullanın:
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Bir uygulama isteğe bağlı olarak daha fazla bağlam sağlamak için işlenen bir hata raporuna özellikler ekleyebilir. Aşağıdaki örnekte gösterildiği gibi özellikleri anahtar/değer çiftlerinin sözlüğü olarak geçirin (yalnızca dizeler).
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On"}
};
Crashes.TrackError(exception, properties);
}
İsteğe bağlı olarak, işlenen bir hata raporuna ikili ve metin ekleri de ekleyebilirsiniz. Aşağıdaki örnekte gösterildiği gibi ekleri bir nesne dizisi ErrorAttachmentLog olarak geçirin.
try {
// your code goes here.
} catch (Exception exception) {
var attachments = new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
Crashes.TrackError(exception, attachments: attachments);
}