Saya ingin mencoba dan menyimbolkan laporan kerusakan aplikasi iPhone saya.
Saya mengambil laporan kerusakan dari iTunes Connect. Saya memiliki aplikasi biner yang saya kirimkan ke App Store dan saya memiliki file dSYM yang dihasilkan sebagai bagian dari build.
Saya memiliki semua file ini bersama-sama di dalam satu direktori yang diindeks oleh sorotan.
Apa sekarang?
Saya telah mencoba memohon:
symbolicatecrash crashreport.crash myApp.app.dSYM
dan itu hanya menampilkan teks yang sama dengan yang ada di laporan kerusakan untuk memulai, tidak disimbolkan.
Apakah saya melakukan sesuatu yang salah?
ios
crash-reports
symbolicate
Jasarien
sumber
sumber
symbolicatecrash
perintah, bagaimana menggunakannya, dan bagaimana menemukan file dSYM yang diperlukan untuk melakukan simbolisasi.Jawaban:
Langkah-langkah untuk menganalisis laporan kerusakan dari apel:
Salin file .app rilis yang didorong ke appstore, file .dSYM yang dibuat pada saat rilis dan laporan kerusakan diterima dari APPLE ke FOLDER .
Buka aplikasi terminal dan buka folder yang dibuat di atas (menggunakan
cd
perintah)Lari
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
. Lokasi memori harus menjadi tempat di mana aplikasi mogok sesuai laporan.Ex:
atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
Ini akan menunjukkan kepada Anda baris yang tepat, nama metode yang mengakibatkan crash.
Ex:
[classname functionName:]; -510
Melambangkan IPA
jika kita menggunakan IPA untuk menyimbolkan - cukup ganti nama ekstensi .ipa dengan .zip, ekstrak maka kita bisa mendapatkan Folder Muatan yang berisi aplikasi. Dalam hal ini kita tidak perlu file .dSYM.
Catatan
Ini hanya dapat berfungsi jika biner aplikasi tidak memiliki simbol yang dilucuti. Secara default rilis build menghilangkan simbol. Kita dapat mengubahnya di pengaturan build proyek "Strip Simbol Debug Selama Salin" ke NO.
Lebih detail lihat posting ini
sumber
atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c
dan Anda dapatkan-[HUDWindow sizedHUDBackground] (in myApp) + 1197
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:
example.crash
), baik diekspor dari organizer XCode atau diterima dari iTunes Connect..app
paket (yaituexample.app
) itu sendiri berisi biner aplikasi milik log kecelakaan. Jika Anda memiliki.ipa
paket (yaituexample.ipa
) maka Anda dapat mengekstrak.app
paket dengan membuka ritsleting.ipa
paket (yaituunzip example.ipa
). Setelah itu.app
paket berada diPayload/
folder yang diekstrak ..dSYM
paket berisi simbol-simbol debug (yaituexample.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:
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:
Setelah itu Anda harus memeriksa apakah simbol debug yang Anda miliki juga termasuk dalam biner itu:
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
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:resp.
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 makasymbolicatecrash
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 disymbolicate.log
:Untuk menemukan
.app
paket Anda, pencarian sorotan seperti berikut dilakukan olehsymbolicatecrash
:Jika
symbolicatecrash
menemukan.app
paket Anda harus ada ekstrak berikut disymbolicate.log
: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.
Catatan: Backtrace yang disimbolkan akan di-output ke terminal, bukan
symbolicate.log
.sumber
No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
DEVELOPER_DIR
variabel lingkungan jika script mengeluh tentang hal itu seperti begitu:export DEVELOPER_DIR=`xcode-select --print-path`
. Saya menambahkan baris ini ke~/.bash_profile
. Lihat stackoverflow.com/q/11682789/350761<SYMBOL_PATH> Additional search paths in which to search for symbol rich binaries
-o | --output <OUTPUT_FILE> The symbolicated log will be written to OUTPUT_FILE. Defaults to "-" (i.e. stdout) if not specified
-d | --dsym <DSYM_BUNDLE> Adds additional dSYM that will be consulted if and when a binary's UUID matches (may be specified more than once)
Dengan versi terbaru Xcode (3.2.2), Anda dapat menyeret dan menjatuhkan laporan kerusakan apa pun ke bagian Log Perangkat dari Xcode Organizer dan mereka akan secara otomatis dengan dilambangkan untuk Anda. Saya pikir ini bekerja paling baik jika Anda membuat versi Aplikasi menggunakan Build & Archive (juga bagian dari Xcode 3.2.2)
sumber
Saya berhasil melakukan ini, menggunakan langkah-langkah berikut.
Langkah 1: Buat folder di desktop, saya beri nama untuk "CrashReport" dan letakkan tiga file ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") di dalamnya.
Langkah 2: Buka Finder dan buka Aplikasi, di mana Anda akan menemukan aplikasi Xcode, klik kanan pada ini dan Klik "Tampilkan Paket Isi", setelah ini ikuti jalan sederhana ini. "Isi-> Pengembang-> Platform-> iPhoneOS.platform-> Pengembang-> Perpustakaan-> PrivateFrameworks- > DTDeviceKit.framework -> Versi- > A-> Sumber Daya"
ATAU
"Isi-> Pengembang-> Platform-> iPhoneOS.platform-> Pengembang-> Perpustakaan-> PrivateFrameworks- > DTDeviceKitBase.framework -> Versi- > A-> Sumber Daya"
ATAU
Untuk Xcode 6 dan di atas jalan adalah Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versi / A / Sumber Daya
Di mana Anda menemukan file "symbolicatecrash", salin ini dan tempel ke folder "CrashReport".
Langkah 3: luncurkan terminal, jalankan 3 Perintah ini
cd / Users / mac38 / Desktop / CrashReport dan tekan tombol Enter
export DEVELOPER_DIR = "/ Aplikasi / Xcode.app / Contents / Developer" dan tekan Enter
sumber
Unknown option: A
untuk symbolicatecrash, tetapi prosesnya tetap berjalanLangkah-langkah untuk melambangkan laporan kerusakan secara otomatis menggunakan XCode:
DIPERBARUI UNTUK XCODE 9
Hubungkan semua perangkat iOS ke Mac Anda (ya fisik, ya saya tahu ini bodoh)
Pilih "Perangkat" dari menu "Jendela"
Klik perangkat Anda di sebelah kiri dan LIHAT LOG PERANGKAT di sebelah kanan
Tunggu. Mungkin butuh satu menit untuk muncul. Mungkin melakukan
Command-A
ituDelete
akan mempercepat ini.Langkah tidak berdokumen penting: ganti nama laporan kerusakan yang Anda dapatkan dari iTunesConnect dari
.txt
ekstensi ke.crash
ekstensiSeret laporan kerusakan ke area itu di sebelah kiri
Dan kemudian Xcode akan melambangkan laporan kerusakan dan menampilkan hasilnya.
Sumber: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
sumber
Saya menggunakan Airbrake di aplikasi saya, yang melakukan pekerjaan logging kesalahan jarak jauh dengan cukup baik.
Inilah cara saya melambangkannya dengan atos jika backtrace membutuhkannya:
Di Xcode (4.2) pergi ke organizer, klik kanan pada arsip dari mana file .ipa dihasilkan.
Di Terminal, cd ke xcarchive misalnya
MyCoolApp 10-27-11 1.30 PM.xcarchive
Masukkan yang berikut ini
atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(jangan lupa tanda kutip tunggal)Saya tidak menyertakan simbol saya dalam panggilan itu. Yang Anda dapatkan adalah kursor blok pada baris kosong.
Lalu saya salin / tempel kode simbol saya di blok kursor itu dan tekan enter. Anda akan melihat sesuatu seperti:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
Anda kembali ke kursor blok dan Anda dapat menempelkan simbol lainnya.
Mampu menelusuri backtrace Anda satu item tanpa memasukkan kembali bit pertama adalah penghemat waktu yang baik.
Nikmati!
sumber
Saya juga menempatkan dsym, bundel aplikasi, dan crash log bersama di direktori yang sama sebelum menjalankan crash simbolis
Kemudian saya menggunakan fungsi ini didefinisikan dalam. Profil saya untuk menyederhanakan menjalankan symbolicatecrash:
Argumen yang ditambahkan di sana dapat membantu Anda.
Anda dapat memeriksa untuk memastikan sorotan "melihat" file dysm Anda dengan menjalankan perintah:
Cari dsym yang Anda miliki di direktori Anda.
CATATAN: Pada Xcode terbaru, tidak ada lagi direktori Developer. Anda dapat menemukan utilitas ini di sini:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers ion / A / Sumber Daya / symbolicatecrash
sumber
Hanya jawaban sederhana dan terupdate untuk xcode 6.1.1.
LANGKAH
1.Xcode> Jendela> Perangkat.
2. Pilih perangkat dari daftar perangkat di bawah bagian PERANGKAT.
3. Pilih Lihat Log Perangkat.
4. Di bawah bagian Semua Log, Anda dapat langsung menyeret drop report.crash
5.Xcode akan secara otomatis Melambangkan laporan kerusakan untuk Anda.
6. Anda dapat menemukan laporan kerusakan Simbolik dengan mencocokkan Tanggal / Waktu dengan Tanggal / Waktu yang disebutkan dalam laporan kerusakan Anda.
sumber
Meskipun saya telah mengembangkan aplikasi selama beberapa tahun sekarang, ini adalah pertama kalinya saya debugging biner dan saya merasa seperti NOOB lengkap mencari tahu di mana semua file yaitu di mana * .app * .dSYM dan log kerusakan? Saya harus membaca banyak posting untuk mengetahuinya. Gambar bernilai ribuan kata dan saya harap posting ini membantu orang lain di masa depan.
1- Pertama-tama buka itunesconnect dan unduh log mogok Anda. CATATAN: Apakah sebagian besar kasus Anda mungkin mendapatkan sesuatu seperti "Terlalu sedikit laporan yang dikirimkan untuk ditampilkan." Pada dasarnya tidak cukup banyak pengguna yang mengirimkan laporan log kerusakan ke Apple dalam hal ini Anda tidak dapat melakukan banyak hal pada saat itu.
2 - Sekarang jika Anda belum mengubah kode Anda karena Anda telah mengirimkan biner Anda ke Apple kemudian Luncurkan Xcode untuk proyek itu dan lakukan Product -> Archive lagi. Jika tidak, temukan saja biner yang Anda kirim terbaru dan klik kanan padanya.
sumber
Di Xcode 4.2.1, buka Agenda , lalu buka Perpustakaan / Log Perangkat dan seret file .crash Anda ke daftar log kerusakan. Ini akan disimbolkan untuk Anda setelah beberapa detik.
Perhatikan bahwa Anda harus menggunakan instance Xcode yang sama dengan bangunan aslinya yang diarsipkan (yaitu arsip untuk bangunan Anda harus ada di Organizer ).
sumber
Menggunakan Xcode 4, tugas ini bahkan lebih sederhana:
dan voila. File log diimpor dan dilambangkan secara otomatis untuk Anda. Asalkan Anda Mengarsipkan bangunan menggunakan Xcode -> Produk -> Arsipkan terlebih dahulu.
sumber
Organizer Xcode magis tidak begitu ajaib dalam menyimbolkan aplikasi saya. Saya tidak mendapatkan simbol sama sekali untuk laporan kerusakan yang saya dapatkan dari Apple dari pengiriman aplikasi yang gagal.
Saya mencoba menggunakan baris perintah, meletakkan laporan kerusakan di folder yang sama dengan file .app (yang saya kirimkan ke toko) dan file .dSYM:
Ini hanya memberikan simbol untuk aplikasi saya dan bukan kode fondasi inti, tapi itu lebih baik daripada jumlah dump yang diberikan Organizer kepada saya dan cukup bagi saya untuk menemukan dan memperbaiki kerusakan yang dimiliki aplikasi saya. Jika ada yang tahu cara memperluas ini untuk mendapatkan simbol Foundation, itu akan dihargai.
sumber
Dalam kasus saya, saya menyeret laporan kerusakan langsung dari Mail ke Organizer. Untuk beberapa alasan, itu mencegah agar laporan kerusakan tidak disimbolkan (Saya ingin tahu mengapa).
Menyalin laporan kerusakan ke Desktop terlebih dahulu, dan kemudian menyeretnya dari sana ke Organizer membuatnya disimbolkan dengan benar.
Kasus yang sangat spesifik, saya tahu. Tapi kupikir aku akan berbagi berjaga-jaga.
sumber
Inilah masalah lain yang saya miliki dengan symbolicatecrash - ini tidak akan berfungsi dengan Aplikasi yang memiliki spasi di bundel mereka (yaitu 'Test App.app'). Catatan Saya tidak berpikir Anda dapat memiliki spasi dalam nama mereka saat mengirimkan sehingga Anda harus menghapusnya, tetapi jika Anda sudah memiliki crash yang perlu dianalisis, tempel simbolicatecrash (4.3 GM) sebagai berikut:
sumber
Bagi mereka yang menggunakan Airbrake, ada respons yang solid di atas tetapi itu tidak akan berhasil bagi saya tanpa mengubah:
Bekerja untuk beberapa alamat memori tetapi tidak untuk yang lain, tidak yakin mengapa ...
sumber
Kombinasi yang berhasil bagi saya adalah:
Menggunakan atos saya tidak dapat menyelesaikan informasi simbol yang benar dengan alamat dan penyeimbang yang ada di laporan kerusakan. Ketika saya melakukan ini, saya melihat sesuatu yang lebih bermakna, dan tampaknya menjadi jejak tumpukan yang sah.
sumber
Saya harus melakukan banyak peretasan script simbolicecrash untuk membuatnya berjalan dengan baik.
Sejauh yang saya tahu, symbolicatecrash sekarang memerlukan .app berada di direktori yang sama dengan .dsym. Ini akan menggunakan .dsym untuk menemukan .app, tetapi itu tidak akan menggunakan dsym untuk menemukan simbol.
Anda harus membuat salinan simbolicrrash Anda sebelum mencoba tambalan ini yang akan membuatnya terlihat di dsym:
Sekitar baris 212 di fungsi getSymbolPathFor_dsymUuid
Sekitar garis 265 pada fungsi cocok dengan UUID
sumber
Ini sederhana, setelah mencari banyak saya menemukan langkah-langkah yang jelas untuk melambangkan seluruh file crash log.
selamat coding,
Riyaz
sumber
Saya lebih suka skrip yang akan melambangkan semua log kerusakan saya.
Prasyarat
Buat folder dan letakkan di sana 4 hal:
symbolicatecrash
skrip perl - ada banyak jawaban SO yang memberi tahu lokasi ituArsip build yang cocok dengan crash (dari Xcode Organizer. Sesederhana
Show in Finder
dan salin) [Saya tidak yakin ini diperlukan]Semua
xccrashpoint
paket - (dari Xcode Organizer.Show in Finder
, Anda dapat menyalin semua paket di direktori, atau xccrashpoint tunggal yang ingin Anda simbolkan)Tambahkan skrip pendek itu ke direktori:
Naskah
Saat Anda menjalankan skrip, Anda akan mendapatkan 2 direktori.
allCrashes
- Semua tabrakan dari semuaxccrashpoint
akan ada di sana.symboledCrashes
- Kecelakaan yang sama tetapi sekarang dengan semua simbol.Anda TIDAK perlu membersihkan direktori dari crash lama sebelum menjalankan skrip. itu akan membersihkan secara otomatis. semoga berhasil!
sumber
Saya menemukan sebagian besar alternatif yang diusulkan tidak bekerja di XCode terbaru (diuji dengan Xcode 10). Sebagai contoh, saya tidak beruntung drag-dropping .crash log di Xcode -> Organizer -> Device logs -view.
Saya sarankan menggunakan alat Symbolicator https://github.com/agentsim/Symbolicator
sumber
Untuk melambangkan crash, Spotlight harus dapat menemukan file .dSYM yang dihasilkan pada saat yang sama dengan biner yang Anda kirimkan ke Apple. Karena ini berisi informasi simbol, Anda akan kurang beruntung jika tidak tersedia.
sumber
Saya menjadi sedikit kesal tentang fakta bahwa tidak ada yang tampaknya "hanya berfungsi" di sini sehingga saya melakukan investigasi dan hasilnya adalah:
Penyiapan: QuincyKit back end yang menerima laporan. Tidak ada simbolisasi yang diatur karena saya bahkan tidak bisa mulai mencari tahu apa yang mereka sarankan agar saya lakukan untuk membuatnya bekerja.
Cara mengatasinya: unduh laporan kerusakan dari server secara online. Mereka disebut 'macet' dan secara default masuk ke folder ~ / Downloads /. Dengan mengingat hal itu, skrip ini akan "melakukan hal yang benar" dan laporan kerusakan akan masuk ke Xcode (Agenda, log perangkat) dan simbolisasi akan dilakukan.
Naskah:
Hal-hal dapat diotomatisasi ke tempat Anda dapat menarik dan melepas Xcode Organizer dengan melakukan dua hal jika Anda menggunakan QuincyKit / PLCR.
Pertama, Anda harus mengedit skrip admin jarak jauh / actionapi.php ~ line 202. Tampaknya tidak mendapatkan stempel waktu yang benar, sehingga file tersebut berakhir dengan nama 'crash' yang tidak dikenali Xcode (ia menginginkan sesuatu dot crash):
Kedua, di sisi iOS di QuincyKit BWCrashReportTextFormatter.m ~ line 176, ubah
@"[TODO]"
untuk@"TODO"
menyiasati karakter buruk.sumber
Atos sedang tidak digunakan lagi jadi jika Anda menjalankan OSX 10.9 atau lebih baru, Anda mungkin perlu menjalankannya
xcrun atos
sumber
Saya suka menggunakan Textwrangler untuk menunjukkan kesalahan dalam penolakan biner upload aplikasi asli. (Data kerusakan akan ditemukan di akun itunesConnect Anda.) Dengan menggunakan metode Sachin di atas, saya menyalin original.crash ke TextWrangler, lalu menyalin file symbolicatecrash yang saya buat ke file TextWrangler lainnya. Membandingkan dua file menunjukkan perbedaan. File simbolicatecrash akan memiliki perbedaan yang menunjukkan file dan nomor baris masalah.
sumber
Kami menggunakan Google Crashlytics untuk mengawasi crash log, rasanya sangat tepat waktu dan nyaman untuk digunakan.
Tautan dokumen : https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms
Semua tentang Kain Hilang dSYM termasuk alat untuk mengunggah dSYM proyek Anda secara otomatis. Alat dijalankan melalui skrip / run, yang ditambahkan ke Fase Pembuatan Skrip Run Anda selama proses orientasi. Akan tetapi, ada situasi tertentu, ketika unggahan dSYM gagal karena konfigurasi proyek yang unik atau jika Anda menggunakan Bitcode di aplikasi Anda. Saat unggahan gagal, Crashlytics tidak dapat melambangkan dan menampilkan crash, dan peringatan “Missing dSYM” akan muncul di dasbor Fabric Anda.
DSYM yang hilang dapat diunggah secara manual mengikuti langkah-langkah yang diuraikan di bawah ini.
Catatan: Sebagai alternatif dari alat unggah dSYM otomatis, Fabric menyediakan alat baris perintah (simbol unggahan)) yang dapat dikonfigurasikan secara manual untuk dijalankan sebagai bagian dari proses pembangunan proyek Anda. Lihat bagian simbol unggahan di bawah ini untuk instruksi konfigurasi.
...
sumber