Melambangkan Laporan Kecelakaan Aplikasi iPhone


433

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?


3
Anda juga dapat melihat jawaban saya di iPhone SDK: Di mana symbolicatecrash.sh berada? . Saya mencantumkan di mana menemukan symbolicatecrashperintah, bagaimana menggunakannya, dan bagaimana menemukan file dSYM yang diperlukan untuk melakukan simbolisasi.
Sam

6
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
logancautrell

5
Saya telah membuat skrip yang dapat membantu: github.com/amleszk/scripts/blob/master/…
amleszk

1
Jika ada yang bertanya-tanya di mana Anda bisa mendapatkan * .app, * .dSYM & crash logs dengan kemudian lihat jawaban saya di bawah ini.
Sam B

Jawaban:


689

Langkah-langkah untuk menganalisis laporan kerusakan dari apel:

  1. Salin file .app rilis yang didorong ke appstore, file .dSYM yang dibuat pada saat rilis dan laporan kerusakan diterima dari APPLE ke FOLDER .

  2. Buka aplikasi terminal dan buka folder yang dibuat di atas (menggunakan cdperintah)

  3. 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


12
Hanya tip untuk jawaban @NaveenShan, contoh dunia nyata akan melakukan ini atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c dan Anda dapatkan -[HUDWindow sizedHUDBackground] (in myApp) + 1197
loretoparisi

3
Alamat mana yang Anda gunakan? Log memiliki dua kolom alamat setelah setiap fungsi, dan yang kedua memiliki tanda + dan semacamnya. Seperti 0x332da010 0x332d9000 + 4112.
Oscar

7
@OscarGoldman Alamat kedua misalnya: - Di 0x332da010 0x332d9000 + 4112. gunakan 0x332d9000.
Naveen Shan

4
Juga, jika digunakan tanpa alamat, itu memungkinkan Anda untuk menganalisis beberapa lokasi dengan mengirimkannya satu per satu.
Paul Ardeleanu

42
Ada beberapa masalah dengan jawaban ini: 1. Ini hanya dapat berfungsi jika biner aplikasi tidak memiliki simbol yang dilucuti. Dan rilis build secara default menghapusnya. 2. Bahkan jika simbol tersedia, itu tidak akan pernah menunjukkan nomor baris. Hanya simbolis dengan dSYM yang akan menyediakan itu. 3. Anda tidak bisa hanya menggunakan alamat memori yang ditunjukkan dalam jejak tumpukan, alamat tersebut harus dinormalisasi terhadap alamat memori awal yang dimasukkan aplikasi. Lebih detail lihat jawaban ini: stackoverflow.com/questions/13574933/…
Kerni

173

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:

  1. File log kerusakan itu sendiri (yaitu example.crash), baik diekspor dari organizer XCode atau diterima dari iTunes Connect.
  2. The .apppaket (yaitu example.app) itu sendiri berisi biner aplikasi milik log kecelakaan. Jika Anda memiliki .ipapaket (yaitu example.ipa) maka Anda dapat mengekstrak .apppaket dengan membuka ritsleting .ipapaket (yaitu unzip example.ipa). Setelah itu .apppaket berada di Payload/folder yang diekstrak .
  3. The .dSYMpaket 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 symbolicatecrashskrip:

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 symbolicatecrashdi 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 .dSYMpaket dengan UUID tertentu. Jika spotlight tidak menemukan .dSYMpaket Anda maka symbolicatecrashtidak akan ada. Jika Anda melakukan semua hal ini misalnya dalam subfolder dari ~/Desktopsorotan Anda harus dapat menemukan segalanya.

Jika symbolicatecrashmenemukan .dSYMpaket Anda harus ada garis seperti berikut ini di symbolicate.log:

@dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )

Untuk menemukan .apppaket Anda, pencarian sorotan seperti berikut dilakukan oleh symbolicatecrash:

mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"

Jika symbolicatecrashmenemukan .apppaket 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 symbolicatecrashitu 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.


saya dapat menemukan semua file namun saya mendapatkan ini, dan tidak ada output yang disimbolkanNo crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
jere

1
Ini sangat membantu! Dalam kasus saya, file .app memiliki nama yang berbeda dari nama yang dapat dieksekusi (saya tidak tahu mengapa tetapi ini dibangun dengan Xcode). Setelah mengganti nama file .app dalam arsip XCode, simbol itu berhasil.
Hrissan

29
Ini adalah penjelasan yang bagus dan harus menjadi jawaban atas IMO, terima kasih. Perhatikan bahwa Anda mungkin harus mengatur Anda DEVELOPER_DIRvariabel 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
Eliot

1
Perhatikan bahwa untuk Xcode 5, ini telah pindah ke: <PATH_TO_Xcode.app> /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash
Eliot

1
simbolik crash juga memiliki beberapa opsi bermanfaat. <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)
benuuu

115

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)


3
Ini sama sekali tidak bekerja dengan Xcode4, pada instalasi baru. Tampaknya menjadi bug baru :(
Adam

1
Saya tidak yakin apakah ini menyelesaikan masalah yang sama dengan yang Anda miliki, tetapi seseorang telah menambal skrip simbolik github.com/nskboy/symbolicatecrash-fix YMMV :)
Alan Rogers

2
Tip ini berfungsi dengan Xcode 4.2. Tempatkan crashlog di Log Perangkat Organizer. Restart Organizer akan mendapatkan crash log yang disimbolkan !!! Terima kasih.
harshit2811

2
Ini tidak berfungsi dari saya ketika saya mengimpor file arsip dari komputer lain untuk mendapatkan crash log. :( Karena alasan ini saya harus secara manual melambangkan file. Anda dapat menemukan langkah-langkah tentang cara melakukan simbolisasi di sini: iPhone SDK: Di mana
Sam

3
Jangan bekerja untuk saya dengan laporan kerusakan yang diunduh dari iTunes Connect.
Dmitry

72

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

  1. cd / Users / mac38 / Desktop / CrashReport dan tekan tombol Enter

  2. export DEVELOPER_DIR = "/ Aplikasi / Xcode.app / Contents / Developer" dan tekan Enter

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM dan tekan Enter Now Done .. (CATATAN: versi sekitar 6.4 atau yang lebih baru tidak memiliki opsi -A - tinggalkan saja).

3
untuk DTServiceKit lihat di Applications / Xcode.app / Contents / SharedFrameworks
Ryan Heitner

3
Terima kasih terima kasih ... pada 9 April 2015, ini yang berhasil buat saya dengan sempurna. Satu hal, adalah bahwa saya dapat Unknown option: Auntuk symbolicatecrash, tetapi prosesnya tetap berjalan
Matt Fiocca

1
Saya berharap saya bisa memberikan seribu poin untuk jawaban ini. Ada begitu banyak cara tentang topik ini ... tapi ini yang bekerja pada level terendah sehingga SELALU berfungsi. Sangat menyakitkan di bagian belakang untuk mencapai semua langkah, tetapi ketika semuanya gagal, ini berhasil.
Chad Robinson

35

Langkah-langkah untuk melambangkan laporan kerusakan secara otomatis menggunakan XCode:

DIPERBARUI UNTUK XCODE 9

  1. Hubungkan semua perangkat iOS ke Mac Anda (ya fisik, ya saya tahu ini bodoh)

  2. Pilih "Perangkat" dari menu "Jendela" masukkan deskripsi gambar di sini

  3. Klik perangkat Anda di sebelah kiri dan LIHAT LOG PERANGKAT di sebelah kanan masukkan deskripsi gambar di sini

  4. Tunggu. Mungkin butuh satu menit untuk muncul. Mungkin melakukan Command-Aitu Deleteakan mempercepat ini.

  5. Langkah tidak berdokumen penting: ganti nama laporan kerusakan yang Anda dapatkan dari iTunesConnect dari.txtekstensi ke.crashekstensi

  6. Seret laporan kerusakan ke area itu di sebelah kiri masukkan deskripsi gambar di sini

Dan kemudian Xcode akan melambangkan laporan kerusakan dan menampilkan hasilnya.

Sumber: https://developer.apple.com/library/ios/technotes/tn2151/_index.html


1
Ini adalah prosedur resmi Apple. Seharusnya jawabannya.
Giammy

2
Terima kasih, saya menambahkan gambar sekarang. Juga termasuk langkah SUPER UNDOCUMENTED. Saya berpikir untuk membuat git teks merah dan menyambungkannya di sana sehingga benar-benar menonjol. Kemudian saya berhenti memikirkan hal itu.
William Entriken

1
Terima kasih! Tidak ada jawaban lain yang benar-benar mengatakan bahwa perangkat yang Anda gunakan tidak harus berupa perangkat (atau bahkan tipe perangkat) tempat crash terjadi.
galactikuh

Catatan cepat, karena bagi saya itu tidak akan melambangkan kembali. Saya juga harus membuka Organizer, klik build in Archives, klik Download Debug Symbols. Kemudian saya bisa melambangkan kembali dalam tampilan log perangkat. Ini untuk log kerusakan yang diunduh dari Apple setelah ulasan yang ditolak.
gregthegeek

28

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:

  1. Di Xcode (4.2) pergi ke organizer, klik kanan pada arsip dari mana file .ipa dihasilkan.

  2. Di Terminal, cd ke xcarchive misalnyaMyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Masukkan yang berikut ini atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (jangan lupa tanda kutip tunggal)

  4. Saya tidak menyertakan simbol saya dalam panggilan itu. Yang Anda dapatkan adalah kursor blok pada baris kosong.

  5. 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)

  6. 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!


28

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:

function desym
{
    /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}

Argumen yang ditambahkan di sana dapat membantu Anda.

Anda dapat memeriksa untuk memastikan sorotan "melihat" file dysm Anda dengan menjalankan perintah:

mdfind 'com_apple_xcode_dsym_uuids = *'

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


1
Saya melihat output mdfind, dan file dSYM pasti bisa dilihat dengan sorotan. Namun, skrip simbolik masih tidak menghasilkan sesuatu yang berbeda dari laporan kerusakan itu sendiri. Bahkan menggunakan argumen yang Anda berikan.
Jasarien

Script harus menghasilkan beberapa teks peringatan di awal jika tidak dapat menemukan dsym - dapatkah Anda mencari dan melihat apa yang dikatakannya?
Kendall Helmstetter Gelner

Juga, coba tambahkan "." setelah perintah, jadi itu akan menjadi "symbolicatecrash -A -v MyApp.crashlog." . Itu memaksanya untuk mencari di direktori saat ini jika belum melakukannya.
Kendall Helmstetter Gelner

Artinya "Tidak dapat dijalankan" / usr / bin / xcode-select ": Tidak ada file atau direktori di /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/ symbolicatecrash line 49. "
bpapa

Ups, ternyata ada pertanyaan lain SO untuk itu stackoverflow.com/questions/1859852/...
bpapa

21

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.


3
Laporan kerusakan yang saya unduh dari Apple Resolution Center biasanya memiliki ekstensi .txt. Ingatlah untuk mengganti namanya menjadi .crash, jika tidak, Log Perangkat dapat menolak untuk menambahkannya. Bekerja dengan baik untuk XCode 6.3.1 saya saat ini
Tony

3
Ini adalah prosedur resmi Apple. Seharusnya jawabannya. Tautan Apple: Catatan Teknis TN2151: Memahami dan Menganalisa Laporan Kecelakaan Aplikasi iOS
Giammy

Bagaimana kita melakukan ini jika crash berasal dari Apple / iTunesConnect? Jadi dengan kata lain kita tidak benar-benar tahu atau memiliki perangkat dimana crash terjadi?
galactikuh

14

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.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


8

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 ).


8

Menggunakan Xcode 4, tugas ini bahkan lebih sederhana:

  • Organizer terbuka ,
  • klik Perpustakaan | Log Perangkat di kolom kiri
  • klik tombol " Impor " di bagian bawah layar ...

dan voila. File log diimpor dan dilambangkan secara otomatis untuk Anda. Asalkan Anda Mengarsipkan bangunan menggunakan Xcode -> Produk -> Arsipkan terlebih dahulu.


1
Cukup aneh, mengimpor tidak berpengaruh. Putting .app, .dSYM, dan .crash, kemudian jalankan simbolicatecrash pada file .crash (tanpa argumen tambahan) berhasil meskipun (XCode 4)
Russian

7

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:

$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"

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.


Untuk core Foundation dSYM, seorang pria (mungkin orang Cina) di luar sana telah mengunggah dSYM di google drive yang dibagikannya, cukup unduh dan masukkan ke folder "perangkat yang didukung" dan itu akan diselesaikan. github.com/Zuikyo/iOS-System-Symbols
harunaga

6

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.


Saya membayangkan ini mungkin ada hubungannya dengan sorotan. Apakah ada kemungkinan lokasi di mana penyelenggara menyimpan log Anda tidak diindeks oleh sorotan?
Jasarien

4

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:

240c240
<         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
>         my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
<             my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
>             my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";

Untuk apa nilainya, saya mengisi rdar tentang ini dan itu diperbaiki di [dihapus]
Alastair Stuart

4

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 ...

  • Buat dir baru di desktop atau di mana pun
  • Temukan arsip yang dimaksud di Xcode organizer
  • Ketuk dua kali untuk mengungkapkan dalam pencari
  • Ketuk dua kali untuk menampilkan konten bundel
  • Salin file .dSYM dan file .app ke dir baru
  • cd ke dir baru
  • Jalankan perintah ini: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo'
  • Terminal akan memasuki langkah interaktif
  • Rekatkan di alamat memori dan tekan enter, itu akan menampilkan nama metode dan nomor baris
  • Atau, masukkan perintah ini: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo' Untuk mendapatkan info untuk satu alamat saja

4

Kombinasi yang berhasil bagi saya adalah:

  1. Salin file dSYM ke direktori tempat laporan kerusakan
  2. Buka zip file ipa yang berisi aplikasi ('unzip MyApp.ipa')
  3. Salin biner aplikasi dari muatan meledak yang dihasilkan ke folder yang sama dengan laporan kerusakan dan file simbol (Sesuatu seperti "MyApp.app/MyApp")
  4. Impor atau Simbolkan kembali laporan kerusakan dari dalam penyelenggara Xcode

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.


3

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

212     my @executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);

Sekitar garis 265 pada fungsi cocok dengan UUID

265             return 1;

1

Ini sederhana, setelah mencari banyak saya menemukan langkah-langkah yang jelas untuk melambangkan seluruh file crash log.

  • salin file .app, crash_report, dan DSYM di folder.
  • hubungkan perangkat dengan xcode
  • Lalu pergi ke jendela -> pilih perangkat -> lihat log perangkat
  • Kemudian pilih perangkat ini, hapus semua log.
  • seret dan letakkan crash Anda di bagian log perangkat. itu akan secara otomatis melambangkan kecelakaan itu. cukup klik kanan pada laporan dan ekspor.

selamat coding,
Riyaz


ans pendek dan manis terbaik, ikuti setiap langkah yang ditulis dalam ans ini. developer.apple.com/library/content/technotes/tn2151/... ikuti tautan ini untuk menemukan perbedaan antara tanpa simbol dan sepenuhnya dilambangkan.
Ninad Kambli

1

Saya lebih suka skrip yang akan melambangkan semua log kerusakan saya.

Prasyarat

Buat folder dan letakkan di sana 4 hal:

  1. symbolicatecrash skrip perl - ada banyak jawaban SO yang memberi tahu lokasi itu

  2. Arsip build yang cocok dengan crash (dari Xcode Organizer. Sesederhana Show in Finderdan salin) [Saya tidak yakin ini diperlukan]

  3. Semua xccrashpointpaket - (dari Xcode Organizer. Show in Finder, Anda dapat menyalin semua paket di direktori, atau xccrashpoint tunggal yang ingin Anda simbolkan)

  4. Tambahkan skrip pendek itu ke direktori:

    #!/bin/sh
    
    echo "cleaning old crashes from directory"
    rm -P *.crash
    rm -P *.xccrashpoint
    rm -r allCrashes
    echo "removed!"
    echo ""
    echo "--- START ---"
    echo ""
    
    mkdir allCrashes
    mkdir symboledCrashes
    find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \;
    
    cd allCrashes
    for crash in *.crash; do
        ../symbolicatecrash $crash > ../symboledCrashes/V$crash
    done
    cd ..
    
    echo ""
    echo "--- DONE ---"
    echo ""

Naskah

Saat Anda menjalankan skrip, Anda akan mendapatkan 2 direktori.

  1. allCrashes- Semua tabrakan dari semua xccrashpointakan ada di sana.

  2. symboledCrashes - Kecelakaan yang sama tetapi sekarang dengan semua simbol.

  3. Anda TIDAK perlu membersihkan direktori dari crash lama sebelum menjalankan skrip. itu akan membersihkan secara otomatis. semoga berhasil!


1

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

  • Git clone Symbolicator repository dan kompilasi dan jalankan dengan Xcode
  • Salin file .crash (file ascii, dengan jejak tumpukan saat mengemis file) dan .xarchive dari rilis yang macet ke folder sementara yang sama
  • Seret dan jatuhkan file .crash ke ikon Symbolicator di Dock
  • Dalam 5-30 detik, file kerusakan yang disimbolkan dihasilkan dalam folder yang sama dengan .crash dan .xarchive

0

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.


Jika Anda membaca pertanyaan, saya menyatakan bahwa saya telah menyimpan file dSYM asli yang dihasilkan pada saat yang sama biner dikirimkan.
Jasarien

0

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:

#!/bin/bash
# Copy crash reports so that they appear in device logs in Organizer in Xcode

if [ ! -e ~/Downloads/crash ]; then 
   echo "Download a crash report and save it as $HOME/Downloads/crash before running this script."
   exit 1
fi

cd ~/Library/Logs/CrashReporter/MobileDevice/
mkdir -p actx # add crash report to xcode abbreviated
cd actx

datestr=`date "+%Y-%m-%d-%H%M%S"`

mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"

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):

header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"');

Kedua, di sisi iOS di QuincyKit BWCrashReportTextFormatter.m ~ line 176, ubah @"[TODO]"untuk @"TODO"menyiasati karakter buruk.


0

Atos sedang tidak digunakan lagi jadi jika Anda menjalankan OSX 10.9 atau lebih baru, Anda mungkin perlu menjalankannya

xcrun atos

Peringatan: / usr / bin / atos sedang bergerak dan akan dihapus dari rilis OS X di masa depan. Sekarang tersedia di alat pengembang Xcode untuk dipanggil melalui:xcrun atos


Tampaknya Apple memungkinkan format DWARF berubah dengan setiap rilis alat (masuk akal, terutama dengan munculnya Swift) sehingga mereka memindahkannya ke alat distro.
David Gish

0

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.


-2

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.

...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.