Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Visual Studio App Center dihentikan pada 31 Maret 2025, kecuali untuk fitur Analitik dan Diagnostik, yang akan terus didukung hingga 30 Juni 2026. Pelajari lebih lanjut.
App Center Crash secara otomatis menghasilkan log crash setiap kali aplikasi Anda mengalami crash, dengan log ke penyimpanan perangkat. Saat pengguna memulai aplikasi lagi, SDK mengirimkan laporan crash ke App Center. Pengumpulan crash berfungsi untuk aplikasi versi beta maupun versi rilis, yaitu crash yang dilaporkan ke Google Play. Catatan kerusakan berisi informasi berharga bagi Anda untuk membantu memperbaiki masalah.
Ikuti instruksi di bagian Memulai Unity jika Anda belum menyiapkan SDK di aplikasi Anda.
Log crash di iOS memerlukan simbolisasi. Untuk mengaktifkan simbolisasi, lihat dokumentasi Diagnostik App Center, yang menjelaskan cara menyediakan simbol untuk aplikasi Anda.
Penting
Crashes SDK untuk Unity tidak mendukung UWP. Instruksi di halaman ini hanya mencakup Android dan iOS.
Nota
SDK tidak akan meneruskan log crash jika Anda telah melampirkan debugger. Pastikan debugger tidak terpasang saat aplikasi mengalami crash.
Nota
Jika Anda telah Enable CrashReport API mengaktifkan di PlayerSettings, SDK tidak akan mengumpulkan log crash.
Membuat crash pengujian
App Center Crashes memberi Anda API untuk menghasilkan crash uji yang mempermudah pengujian SDK. API ini memeriksa konfigurasi debug vs rilis. Jadi Anda hanya dapat menggunakannya saat debugging karena tidak akan berfungsi untuk aplikasi yang dirilis.
Crashes.GenerateTestCrash();
Nota
Metode ini hanya akan berfungsi dengan pengaturan Build Pengembangan yang diaktifkan.
Dapatkan informasi selengkapnya tentang crash sebelumnya
App Center Crashes memiliki dua API yang memberi Anda informasi lebih lanjut jika aplikasi Anda mengalami crash.
Apakah aplikasi menerima peringatan memori rendah di sesi sebelumnya?
Kapan saja setelah memulai SDK, Anda dapat memeriksa apakah aplikasi menerima peringatan memori di sesi sebelumnya:
bool hadLowMemoryWarning = Crashes.HasReceivedMemoryWarningInLastSessionAsync().Result;
Nota
Metode ini tidak akan berfungsi di Awake().
Nota
Dalam beberapa kasus, perangkat dengan memori rendah tidak dapat mengirim peristiwa.
Apakah aplikasi mengalami crash di sesi sebelumnya?
Kapan saja setelah memulai SDK, Anda dapat memeriksa apakah aplikasi mengalami crash di peluncuran sebelumnya:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
HasCrashedInLastSessionAsync Panggilan berguna jika Anda ingin menyesuaikan perilaku atau UI aplikasi Anda setelah crash terjadi. Beberapa pengembang menunjukkan UI tambahan untuk meminta maaf kepada pengguna mereka, atau ingin menghubungi setelah crash terjadi.
Detail-detail tentang kerusakan terakhir
Jika aplikasi Anda mengalami crash sebelumnya, Anda bisa mendapatkan detail tentang crash terakhir.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Kasus penggunaan yang paling umum untuk API ini adalah ketika pengguna menerapkan delegasi atau pendengar Crash kustom mereka.
Sesuaikan penggunaan App Center Crashes Anda
App Center Crash menyediakan panggilan balik bagi pengembang untuk mengambil tindakan tambahan sebelum dan kapan mereka mengirim log crash ke App Center.
Nota
Atur panggilan balik sebelum App Center dimulai, misalnya, dalam metode Awake, karena App Center mulai memproses crash segera setelah dimulai.
Apakah kerusakan harus diproses?
Atur panggilan balik berikut jika Anda ingin memutuskan apakah crash tertentu perlu diproses atau tidak. Misalnya, mungkin ada crash tingkat sistem yang ingin Anda abaikan dan tidak dikirim ke App Center.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Minta persetujuan pengguna untuk mengirim log crash
Jika privasi pengguna penting bagi Anda, Anda mungkin ingin mendapatkan konfirmasi pengguna sebelum mengirim laporan crash ke App Center. SDK mengekspos panggilan balik yang memberi tahu App Center Crashes untuk menunggu konfirmasi dari pengguna sebelum mengirimkan laporan crash.
Jika kode Anda menggunakan panggilan balik ini, Anda bertanggung jawab untuk mendapatkan konfirmasi pengguna. Salah satu opsinya adalah melalui perintah dialog dengan salah satu opsi berikut: Selalu Kirim, Kirim, dan Jangan kirim. Berdasarkan input, Anda akan memberi tahu App Center Crashes apa yang harus dilakukan, dan crash kemudian akan ditangani secara sesuai.
Nota
SDK tidak menampilkan dialog untuk ini, aplikasi harus menyediakan UI sendiri untuk meminta persetujuan pengguna.
Panggilan balik berikut menunjukkan cara memberi tahu SDK untuk menunggu konfirmasi pengguna sebelum mengirim crash:
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;
};
Jika panggilan balik mengembalikan true, Anda harus mendapatkan izin pengguna dan mengirim pesan ke SDK dengan hasilnya menggunakan API berikut:
// 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);
Sebagai contoh, Anda dapat merujuk ke contoh dialog kustom kami.
Dapatkan informasi tentang status pengiriman log kerusakan.
Terkadang, Anda ingin mengetahui status crash aplikasi Anda. Kasus penggunaan umum adalah menampilkan sebuah UI yang memberi tahu pengguna bahwa aplikasi sedang mengirimkan laporan kerusakan. Skenario lain adalah ketika Anda ingin menyesuaikan perilaku aplikasi untuk memastikan log crash dapat dikirimkan segera setelah diluncurkan kembali. App Center Crash menyediakan tiga panggilan balik berbeda yang dapat Anda buat untuk diberi tahu tentang apa yang terjadi:
Panggilan balik berikut akan dipanggil sebelum SDK mengirim log crash
Crashes.SendingErrorReport += (errorReport) =>
{
// Your code, e.g. to present a custom UI.
};
Jika kami mengalami masalah jaringan atau pemadaman di titik akhir, dan Anda memulai ulang aplikasi, SendingErrorReport dipicu lagi setelah proses dimulai ulang.
Panggilan balik berikut akan dipanggil setelah SDK berhasil mengirim log crash
Crashes.SentErrorReport += (errorReport) =>
{
// Your code, e.g. to hide the custom UI.
};
Panggilan balik berikut akan dipanggil jika SDK gagal mengirim log crash
Crashes.FailedToSendErrorReport += (errorReport, exception) =>
{
// Your code goes here.
};
Penerimaan FailedToSendErrorReport berarti terjadi kesalahan yang tidak dapat dipulihkan seperti kode 4xx . Misalnya, 401 berarti appSecret salah.
Panggilan balik ini tidak dipicu jika merupakan masalah jaringan. Dalam hal ini, SDK terus mencoba kembali (dan juga menjeda percobaan kembali saat koneksi jaringan tidak berfungsi).
Tambahkan lampiran ke kerusakan sistem atau laporan pengecualian tidak tertangani
Anda juga dapat secara opsional menambahkan lampiran biner dan teks ke crash atau laporan pengecualian yang tidak tertangani . SDK akan mengirimkannya bersama dengan laporan sehingga Anda dapat melihatnya di portal App Center. Panggilan balik berikut akan dipanggil tepat sebelum mengirim laporan tersimpan. Untuk crash, kejadian tersebut terjadi pada peluncuran aplikasi berikutnya. Untuk pengecualian yang tidak tertangani, Anda harus ikut serta untuk mengirim lampiran. Pastikan file lampiran tidak dinamai minidump.dmp karena nama tersebut diperuntukkan untuk file minidump. Berikut adalah contoh cara melampirkan teks dan gambar ke laporan:
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")
};
};
Crash dibedakan dari pengecualian yang tidak tertangani dalam laporan dari properti IsCrash. Properti akan bernilai benar untuk kerusakan sistem dan bernilai salah sebaliknya.
Nota
Batas ukuran adalah untuk lampiran saat ini 7 MB. Mencoba mengirim lampiran yang lebih besar akan memicu kesalahan.
Nota
GetErrorAttachments dipanggil pada utas utama dan tidak membagi pekerjaan ke dalam beberapa frame waktu. Untuk menghindari pemblokiran loop game, jangan lakukan tugas yang berjalan lama di dalam callback ini.
Mengaktifkan atau menonaktifkan App Center Crash selama waktu eksekusi
Anda dapat mengaktifkan dan menonaktifkan App Center Crash pada runtime. Jika Anda menonaktifkannya, SDK tidak akan melakukan pelaporan crash untuk aplikasi.
Crashes.SetEnabledAsync(false);
Untuk mengaktifkan kembali App Center Crashes, gunakan API yang sama tetapi masukkan true sebagai parameter.
Crashes.SetEnabledAsync(true);
Anda tidak perlu menunggu panggilan ini agar panggilan API lain (seperti IsEnabledAsync) konsisten.
Status ini bertahan di penyimpanan perangkat di seluruh peluncuran aplikasi.
Periksa apakah App Center Crashes diaktifkan
Anda juga dapat memeriksa apakah App Center Crashes diaktifkan atau tidak:
bool isEnabled = await Crashes.IsEnabledAsync();
Pengecualian yang Ditangani di Unity
App Center juga memungkinkan Anda melacak kesalahan menggunakan pengecualian yang ditangani di Unity. Untuk melakukannya, gunakan TrackError metode :
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Untuk konteks lebih lanjut tentang kesalahan Anda, Anda juga dapat melampirkan properti ke dalamnya. Berikan properti sebagai daftar string. Langkah ini bersifat opsional.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On" }
};
Crashes.TrackError(exception, properties);
}
Anda juga dapat menambahkan lampiran biner dan teks secara opsional ke laporan kesalahan yang ditangani. Lewatkan lampiran sebagai array objek ErrorAttachmentLog seperti ditunjukkan pada contoh di bawah.
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);
}
Pengecualian Tidak Tertangani di Unity
Melaporkan pengecualian yang tidak tertangani
Secara default, App Center SDK tidak melaporkan pengecualian yang tidak tertangani yang dilemparkan di aplikasi Anda yang tidak menyebabkan crash fatal. Untuk mengaktifkan fungsionalitas ini, panggil metode berikut:
Crashes.ReportUnhandledExceptions(true);
Setelah memanggil API ini, App Center mencatat semua pengecualian yang tidak tertangani sebagai Masalah di portal App Center, mirip dengan pengecualian yang ditangani yang disebutkan sebelumnya. Untuk menonaktifkan fungsionalitas ini, panggil API yang sama dengan melewatkan false sebagai parameter.
Crashes.ReportUnhandledExceptions(false);
Nota
Beberapa pengecualian yang tidak tertangani yang terdeteksi oleh App Center SDK akan muncul sebagai kesalahan di UI App Center. Ini karena Unity menangkap pengecualian yang tidak tertangani secara default, yang berarti aplikasi tidak keluar dan tidak dianggap sebagai crash.
Menambahkan lampiran ke laporan pengecualian yang tidak tertangani
Secara default, App Center SDK tidak mengaktifkan lampiran pada pengecualian yang tidak tertangani. Untuk mengaktifkan fungsionalitas ini, atur enableAttachmentsCallback parameter boolean metode ReportUnhandledExceptions ke true:
Crashes.ReportUnhandledExceptions(true, true);
Kemudian Anda dapat secara opsional menambahkan lampiran ke laporan pengecualian yang tidak tertangani dengan menerapkan panggilan balik GetErrorAttachments .
Melaporkan kerusakan NDK
Pelaporan kerusakan sistem
Untuk menerima laporan crash yang tepat di App Center, pertama-tama pastikan Anda menyiapkan App Center Crashes SDK dengan mengikuti instruksi yang tercantum di atas.
Membangun perpustakaan breakpad
Selanjutnya, Anda harus menyertakan dan mengkompilasi Google Breakpad dengan mengikuti petunjuk yang tercantum di Google Breakpad resmi untuk README Android. Untuk menggunakannya di Unity, sertakan biner dengan aplikasi Anda.
Nota
App Center SDK tidak menggabungkan Google Breakpad secara default.
Melampirkan penangani pengecualian
Setelah Anda menyertakan Google Breakpad, lampirkan NDK Crash Handler:
/* Attach NDK Crash Handler. */
var minidumpDir = Crashes.GetMinidumpDirectoryAsync();
setupNativeCrashesListener(minidumpDir.Result);
...
[DllImport("YourLib")]
private static extern void setupNativeCrashesListener(string path);
Metode setupNativeCrashesListener ini adalah metode asli yang harus Anda terapkan di C/C++:
#include <android/log.h>
#include "google-breakpad/src/client/linux/handler/exception_handler.h"
#include "google-breakpad/src/client/linux/handler/minidump_descriptor.h"
static google_breakpad::ExceptionHandler exception_handler(google_breakpad::MinidumpDescriptor(), NULL, dumpCallback, NULL, true, -1);
/**
* Registers breakpad as the exception handler for NDK code.
* @param path minidump directory path returned from Crashes.GetMinidumpDirectoryAsync()
*/
extern "C" void setupNativeCrashesListener(const char *path) {
google_breakpad::MinidumpDescriptor descriptor(path);
exception_handler.set_minidump_descriptor(descriptor);
}
Tempat dumpCallback digunakan untuk pemecahan masalah:
/*
* Triggered automatically after an attempt to write a minidump file to the breakpad folder.
*/
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor,
void *context,
bool succeeded) {
/* Allow system to log the native stack trace. */
__android_log_print(ANDROID_LOG_INFO, "YourLogTag",
"Wrote breakpad minidump at %s succeeded=%d\n", descriptor.path(),
succeeded);
return false;
}
Setelah metode ini disiapkan dengan benar, aplikasi mengirimkan minidump ke App Center secara otomatis setelah dimulai ulang. Untuk memecahkan masalah, Anda dapat menggunakan log verbose untuk memeriksa apakah minidump dikirim setelah aplikasi dimulai ulang.
Nota
App Center menggunakan nama minidump.dmp yang dipesan untuk lampiran minidump. Pastikan untuk memberi lampiran Anda nama yang berbeda kecuali itu adalah file minidump sehingga kami dapat menanganinya dengan benar.
Peringatan
Ada bug yang diketahui di breakpad yang membuatnya tidak dapat menangkap kerusakan pada emulator x86.
Simbolikasi
Lihat dokumentasi diagnostik untuk informasi selengkapnya mengenai pemrosesan kerusakan.