Setelah membaca semua jawaban ini di sini untuk melambangkan crash log (dan akhirnya berhasil) saya pikir ada beberapa poin yang hilang di sini yang sangat penting untuk menentukan mengapa doa simbolisatrash tidak menghasilkan output yang disimbolkan.
Ada 3 aset yang harus disatukan ketika menyimbolkan log mogok:
- File log kerusakan itu sendiri (yaitu
example.crash
), baik diekspor dari organizer XCode atau diterima dari iTunes Connect.
- The
.app
paket (yaitu example.app
) itu sendiri berisi biner aplikasi milik log kecelakaan. Jika Anda memiliki .ipa
paket (yaitu example.ipa
) maka Anda dapat mengekstrak .app
paket dengan membuka ritsleting .ipa
paket (yaitu unzip example.ipa
). Setelah itu .app
paket berada di Payload/
folder yang diekstrak .
- The
.dSYM
paket berisi simbol-simbol debug (yaitu example.app.dSYM
)
Sebelum memulai simbolikasi, Anda harus memeriksa apakah semua artefak cocok, yang berarti bahwa log kerusakan adalah milik biner yang Anda miliki dan bahwa simbol debug adalah yang diproduksi selama pembuatan biner itu.
Setiap biner dirujuk oleh UUID yang dapat dilihat pada file log kerusakan:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
Dalam ekstrak ini, crash log milik gambar biner aplikasi bernama example.app/example dengan UUID aa5e633efda8346cab92b01320043dc3
.
Anda dapat memeriksa UUID paket biner yang Anda miliki dengan dwarfdump:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
Setelah itu Anda harus memeriksa apakah simbol debug yang Anda miliki juga termasuk dalam biner itu:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
Dalam contoh ini semua aset cocok bersama dan Anda harus dapat melambangkan stacktrace Anda.
Melanjutkan ke symbolicatecrash
skrip:
Dalam Xcode 8.3 Anda harus dapat memohon skrip melalui
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
Jika tidak ada, Anda dapat menjalankan find . -name symbolicatecrash
di direktori Xcode.app Anda untuk menemukannya.
Seperti yang Anda lihat tidak ada lagi parameter yang diberikan. Jadi skrip harus menemukan biner aplikasi Anda dan simbol debug dengan menjalankan pencarian sorotan. Itu mencari simbol debug dengan indeks spesifik yang disebut com_apple_xcode_dsym_uuids
. Anda dapat melakukan pencarian ini sendiri:
mdfind 'com_apple_xcode_dsym_uuids = *'
resp.
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
Doa sorotan pertama memberi Anda semua paket dSYM yang diindeks dan yang kedua memberi Anda .dSYM
paket dengan UUID tertentu. Jika spotlight tidak menemukan .dSYM
paket Anda maka symbolicatecrash
tidak akan ada. Jika Anda melakukan semua hal ini misalnya dalam subfolder dari ~/Desktop
sorotan Anda harus dapat menemukan segalanya.
Jika symbolicatecrash
menemukan .dSYM
paket Anda harus ada garis seperti berikut ini di symbolicate.log
:
@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
Untuk menemukan .app
paket Anda, pencarian sorotan seperti berikut dilakukan oleh symbolicatecrash
:
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
Jika symbolicatecrash
menemukan .app
paket Anda harus ada ekstrak berikut di symbolicate.log
:
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
Jika semua sumber daya ditemukan oleh symbolicatecrash
itu harus mencetak versi log crash disimbolkan Anda.
Jika tidak, Anda dapat mengirimkan file dSYM dan .app Anda secara langsung.
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
Catatan: Backtrace yang disimbolkan akan di-output ke terminal, bukan symbolicate.log
.
symbolicatecrash
perintah, bagaimana menggunakannya, dan bagaimana menemukan file dSYM yang diperlukan untuk melakukan simbolisasi.