Bagaimana cara melambangkan Xcode log kecelakaan?

190

Agenda Xcode 5 memiliki tampilan yang akan mencantumkan semua log kerusakan. dan kita bisa seret drop log kerusakan di sini. Tetapi sejak Xcode 6, saya tahu mereka telah memindahkan perangkat dari tidak terorganisir dan memiliki jendela baru untuk hal yang sama. Tapi saya tidak menemukan tempat di mana saya melihat log crash yang saya seret-jatuhkan di Xcode 5 setelah naik ke Xcode 6. Ada yang tahu jawabannya?

Nithin Pai
sumber
3
Saya bertanya ini bulan lalu di forum pengembang Apple dan tidak pernah mendapat jawaban. Ini adalah hilangnya fungsionalitas yang berguna. Ajukan laporan bug dengan Apple yang meminta untuk mendapatkan fitur ini kembali.
rmaddy
1
Saya mengetuk ini bersama-sama selama akhir pekan untuk menyelesaikan simbolisasi untuk iOS dan OSX crash dumps. Ini masih sangat kasar, tetapi harus bekerja. github.com/agentsim/Symbolicator
Tim
4
Xcode, dapatkah Anda hanya membuat log kecelakaan simbolis dari pengulas Apple seperti yang seharusnya Anda lakukan ... daripada menganggap kami benar-benar punya waktu seharian untuk mencari tahu bagaimana melakukan ini?
William Entriken

Jawaban:

120

Oke, saya sadar Anda bisa melakukan ini:

  1. Di Xcode > Window > Devices, pilih iPhone / iPad / etc / yang terhubung kiri atas.
  2. Lihat Log Perangkat
  3. Semua Log

Anda mungkin memiliki banyak log di sana, dan untuk membuatnya lebih mudah menemukan log yang Anda impor nanti, Anda bisa melanjutkan dan menghapus semua log pada saat ini ... kecuali jika itu berarti uang bagi Anda. Atau kecuali Anda tahu kapan tepatnya crash itu terjadi - itu harus tetap ditulis dalam file ... Saya malas jadi saya hanya menghapus semua log lama (ini sebenarnya butuh waktu cukup lama).

  1. Cukup seret dan jatuhkan file Anda ke daftar itu. Ini berhasil untuk saya.
Jonny
sumber
13
Saya mengalami masalah yang sama, tetapi ini tidak menyelesaikan masalah bagi saya - log yang saya seret & jatuhkan ke jendela muncul, tetapi tidak melambangkan.
Arkaaito
9
Caranya adalah Anda harus menghubungkan perangkat dan memilih perangkat dari daftar. Saya tidak berpikir itu mungkin tanpa perangkat.
Jonny
61
Agar file crash Anda dapat diseret ke dalam daftar itu, ia harus memiliki ekstensi .crash.
pjay_
7
Langkah yang hilang bagi saya adalah setelah file dijatuhkan, saya perlu mengklik kanan mouse pada file dan Re-Symbolicate Log
RobCroll
6
Jangan lupa untuk "Unduh dSYMs" untuk arsip itu di dalam Organizer.
123FLO321
259

Menulis jawaban ini sebanyak untuk masyarakat dan untuk saya sendiri.

Jika ada masalah yang melambangkan laporan kerusakan, orang dapat mengatasinya sebagai berikut:

  1. Buat folder terpisah, salin Foo.appdan Foo.app.dSYMdari yang sesuai .xcarchiveke dalam folder. Juga salin .crashlaporan ke folder.

  2. Buka laporan kerusakan di TextEdit atau di tempat lain, buka Binary Images:bagian, dan salin alamat pertama di sana (mis 0xd7000.).

  3. cdke dalam folder. Sekarang Anda dapat menjalankan perintah berikut:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb

Ini akan melambangkan simbol di alamat 0x0033f9bb. Pastikan untuk memilih nilai yang benar untuk -archopsi (dapat diperoleh dari baris pertama di Binary Images:bagian ini, atau menemukan dari Hardware Model:dalam laporan kerusakan dan lengkungan yang didukung aplikasi).

Anda juga dapat menyalin alamat yang diperlukan (mis. Tumpukan panggilan thread) dari laporan kerusakan langsung ke file teks (dalam TextEdit, tahan Opsi dan pilih blok teks yang diperlukan, atau salin dan potong), untuk mendapatkan sesuatu seperti ini:

0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3

Sekarang Anda dapat menyimpan ini ke file teks, misalnya addr.txt, dan jalankan perintah berikut:

xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt

Ini akan memberikan simbolisasi yang bagus untuk semua alamat sekaligus.

PS

Sebelum melakukan hal di atas, ada baiknya memeriksa bahwa semuanya sudah diatur dengan benar (karena atosdengan senang hati akan melaporkan sesuatu untuk setiap alamat yang disediakan).

Untuk melakukan pengecekan, buka laporan kerusakan, dan pergi ke akhir tumpukan panggilan untuk Thread 0. Baris pertama dari ujung untuk mencantumkan aplikasi Anda (biasanya yang kedua), misalnya:

34  Foo                    0x0033f9bb 0xd7000 + 2525627

harus menjadi main()panggilan. Melambangkan alamat ( 0x0033f9bbdalam hal ini) seperti dijelaskan di atas harus mengkonfirmasi bahwa ini memang main()dan bukan beberapa metode atau fungsi acak.

Jika alamatnya bukan dari main(), periksa alamat muat ( -lopsi) dan lengkungan ( -archopsi) Anda.

PPS

Jika hal di atas tidak berfungsi karena bitcode , unduh dSYM untuk build Anda dari iTunes Connect, ekstrak biner yang dapat dieksekusi dari dSYM (Finder> Show Package Contents), salin ke dalam direktori, dan gunakan (yaitu Foo) sebagai argumen ke atos, bukannya Foo.app/Foo.

Pantai Laut Tibet
sumber
2
terima kasih atas kesulitan menulis tutorial xcrun mini dan memperbaruinya dengan bagian cek kewarasan. kewarasan saya diselamatkan setelah banyak bersumpah dan tidak ada simbol yang terlihat
Anton Tropashko
10
Jangan lupa untuk memvalidasi bahwa laporan kerusakan cocok dengan yang dapat dieksekusi dan dSYM. Anda dapat memeriksanya dengan mencocokkan pengidentifikasi di <> di bawah bagian Binary Image dengan yang dikembalikan dari file yang dapat dieksekusi dengan menjalankanxcrun dwarfdump --uuid <path to executable>
Ryan C. Payne
2
Penting untuk dicatat bahwa hanya simbol dari aplikasi Anda (Foo) yang akan muncul. Itu tidak akan muncul untuk simbol dari pustaka / kerangka kerja eksternal, seperti Foundation, atau libsystem_kernel.dylib.
jlukanta
1
ini membantu, tetapi masih tidak berhasil untuk saya. bagian saya mengalami masalah adalah saya tidak memiliki informasi 0xd7000. baris saya terlihat seperti ini 0x100038328 __mh_execute_header + 99112. Saya sudah membaca apa itu __mh_execute_header tetapi bagaimana saya bisa mendapatkan info tentang 0x100038328 ??? Saya memiliki segalanya
skinsfan00atg
5
Saya menulis skrip bash sederhana yang melakukan sebagian besar pekerjaan untuk Anda. Penggunaan: ./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash Hanya itu yang akan melambangkan laporan kerusakan lengkap dan memberi Anda versi simbolisnya. gist.github.com/nathan-fiscaletti/…
Nathan F.
187

Anda dapat merujuk ini juga, saya telah menulis prosedur langkah demi langkah Manual Re-Symbolication Crash.

Crash Re-Symbolication

LANGKAH 1

Pindahkan semua file di atas (MyApp.app, MyApp-dSYM.dSYM dan MyApp-Crash-log.crash) ke dalam Folder dengan nama yang nyaman di mana pun Anda dapat menggunakan Terminal dengan mudah.

Bagi saya, Desktop adalah tempat yang paling mudah dijangkau;) Jadi, saya telah memindahkan ketiga file ini ke folder MyApp di Desktop.

LANGKAH 2

Sekarang giliran Finder, Buka jalur dari mengikuti mana yang berlaku untuk versi XCODE Anda.

Gunakan perintah ini untuk menemukan symbolicatecrashfile skrip,
find /Applications/Xcode.app -name symbolicatecrash

Xcode 8, Xcode 9, Xcode 11 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

Xcode 7.3 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

Turunkan Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

Atau Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

LANGKAH 3

Tambahkan direktori file script symbolicatecrash yang ditemukan ke $PATHvariabel env seperti ini: sudo vim /etc/paths.d/Xcode-symbolicatecrashdan tempel direktori file script dan simpan file tersebut. Saat membuka terminal baru, Anda dapat memanggil symbolicatecrashfolder mana saja karena perintah berada di /usr/bin.

Atau

Salin file symbolicatecrash dari lokasi ini, dan rekatkan ke Desktop / MyApp (Tunggu ... Jangan membabi buta mengikuti saya, saya menempelkan file sybolicatecrash di folder MyApp, yang Anda buat pada langkah satu di lokasi favorit Anda, memiliki tiga file. )

LANGKAH 4

Buka Terminal, dan CD ke Folder MyApp.

cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)

 -  Tekan Enter

./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM

 -  Tekan Enter

Itu dia !! Log yang dilambangkan ada di terminal Anda ... sekarang tunggu apa lagi? Sekarang cukup, Cari tahu Kesalahan dan mengatasinya;)

Selamat Coding !!!

Tuan
sumber
2
@ EmilVikström: Terima kasih atas sarannya, telah memperbarui jawabannya.
Mrug
2
Gunakan ekspor DEVELOPER_DIR =xcode-select --print-path
Parag Bafna
8
Berhasil memperlakukan - terima kasih. Hanya satu hal yang saya harus gunakan ekspor DEVELOPER_DIR = / Aplikasi / XCode.app / Contents / Developer (tanpa tanda kutip).
goelectric
1
"export DEVELOPER_DIR = xcode-select --print-path" just tell me "-bash: export:` --print-path ': bukan pengidentifikasi yang valid
Almo
2
memperbarui; ini dia ; untuk xcode7 temukan simbolicrash di sini; /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash per stackoverflow.com/questions / 32804611 / ...
AnneTheAgile
28

Bagi saya file .crash sudah cukup. Tanpa file .dSYM dan file .app.

Saya menjalankan kedua perintah ini di mac tempat saya membuat arsip dan itu berhasil:

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash  /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash
Marek Manduch
sumber
Wow. Saya tidak tahu bagaimana ini bekerja tanpa file .dsym tetapi berfungsi!
rustyMagnet
4
@rustyMagnet Cara kerjanya adalah dengan menggunakan dsyms dari build yang diarsipkan di komputer Anda.
Andrey Tarantsov
1
Ya, ini hanya berfungsi untuk build yang Anda arsipkan dengan Xcode, bukan build lainnya yang mungkin Anda hasilkan untuk menjalankan ad-hoc yang kemudian Anda inginkan sebagai simbol log kerusakan.
CMash
21

Ada cara yang lebih mudah menggunakan Xcode (tanpa menggunakan alat baris perintah dan mencari alamat satu per satu)

  1. Ambil file .xcarchive. Jika Anda memiliki satu dari sebelum Anda dapat menggunakannya. Jika Anda belum memilikinya, buat satu dengan menjalankan Produk> Arsip dari Xcode.

  2. Klik kanan pada file .xcarchive dan pilih 'Tampilkan Isi Paket'

  3. Salin file dsym (versi aplikasi yang macet) ke folder dSYMs

  4. Salin file .app (versi aplikasi yang macet) ke folder Products> Applications

  5. Edit Info.plist dan edit CFBundleShortVersionString dan CFBundleVersion di bawah kamus ApplicationProperties. Ini akan membantu Anda mengidentifikasi arsip nanti

  6. Klik dua kali file .xcarchive untuk mengimpornya ke Xcode. Itu harus membuka Organizer.

  7. Kembali ke log kerusakan (di jendela Perangkat dalam Xcode)

  8. Seret file .crash Anda ke sana (jika belum ada)

  9. Seluruh log kerusakan sekarang harus disimbolkan. Jika tidak, maka klik kanan dan pilih 'Simbol ulang crash log'

RPM
sumber
1
Jawaban Anda benar dan sederhana. Tidak perlu menggunakan aplikasi Terminal. Rekreasi folder .xcarchive sangat penting, karena tidak ada file .xcarchive di beberapa sistem Continuous-Integration, alih-alih bola zip folder .app.dSYM. Secara kebetulan, apa yang saya lakukan kemarin persis sama dengan yang Anda katakan.
DawnSong
seperti apa output penuhnya?
noobsmcgoobs
Ini sebagian melambangkan log mogok saya meskipun saya tidak melewati langkah 3-5 karena xcarchive saya adalah untuk versi aplikasi yang mogok.
Declan McKenna
1
Itu hanya akan melambangkan kode Anda sendiri tentu saja - bukan kode perpustakaan eksternal yang mungkin Anda gunakan.
RPM
7

Ikuti langkah-langkah ini di Xcode 10 untuk melambangkan log kerusakan dari aplikasi build di mesin yang sama:

  1. Di dalam Organizer , cari arsip tempat aplikasi itu berada.
  2. Klik tombol Unduh Simbol Debug . Tidak ada yang akan muncul di folder Unduhan Anda, tetapi tidak apa-apa.
  3. Hubungkan mesin pembuat ke perangkat iOS.
  4. Pilih perangkat di Perangkat dan Simulator .
  5. Klik pada tombol Lihat Log Perangkat .
  6. Seret dan jatuhkan file macet ke panel kiri. File harus diakhiri dengan .crash ekstensi , jika tidak, hambatan akan gagal.
  7. Beralih ke tab Semua Log .
  8. Pilih file kerusakan yang ditambahkan.
  9. File harus secara otomatis melambangkan, jika tidak gunakan item menu konteks klik kanan Log Simbol Ulang .
Ely
sumber
1
Pada awalnya saya tidak berpikir bahwa ini menambahkan sesuatu ke posting lain tetapi dua langkah pertama, khususnya 'Simbol Debug Unduhan', tampaknya adalah apa yang saya lewatkan. Terima kasih.
Christopher King
6

Jika Anda memiliki .dSYM dan file .crash di sub-folder yang sama, ini adalah langkah-langkah yang dapat Anda ambil:

  1. Melihat jejak balik dalam file .crash, catat nama gambar biner di kolom kedua, dan alamat di kolom ketiga (mis. 0x00000001000effdc dalam contoh di bawah).
  2. Tepat di bawah jejak belakang, di bagian "Gambar Biner", catat nama gambar, arsitektur (mis. Arm64) dan muat alamat (0x1000e4000 dalam contoh di bawah) dari gambar biner (misalnya TheElements).
  3. Jalankan yang berikut ini:

$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]

Sumber resmi: https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS

Victor Bogdan
sumber
4

Xcode 11.2.1, Desember 2019

Apple memberi Anda crash log dalam format .txt, yang tidak ditandai

**

Dengan perangkat terhubung

**

  • Unduh file ".txt", ubah ekstensi menjadi ".crash" masukkan deskripsi gambar di sini
    • Buka perangkat dan simulator dari tab jendela di Xcode
    • pilih perangkat dan pilih log perangkat
    • seret dan letakkan file .crash ke jendela log perangkat

masukkan deskripsi gambar di sini

Kita akan dapat melihat crash log yang disimbolkan di sana

Silakan lihat tautan untuk perincian lebih lanjut tentang Symbolicating Crash logs

Suraj K Thomas
sumber
Wow. Mengubah ekstensi file dari .txt ke .crash melakukannya. Mereka memberi saya file .txt. Terima kasih sobat. Tidak percaya jawaban Anda serendah ini.
datWooWoo
3

Pastikan nama aplikasi Xcode Anda tidak mengandung spasi. Inilah alasan mengapa itu tidak berhasil bagi saya. Jadi /Applications/Xcode.appbekerja, sementara /Applications/Xcode 6.1.1.apptidak berhasil.

Bouke
sumber
Sudahkah Anda mencoba? Jika tidak, silakan coba dan lihat apakah komentar Anda masuk akal.
Bouke
1
Itu bukan masalah yang sama seperti yang saya bicarakan. Xcode dapat diganti nama setelah diinstal, tetapi sebelum digunakan pertama kali. Namun skrip untuk simbolisasi tidak dapat menangani spasi dalam nama aplikasi dan akan gagal.
Bouke
1
@ChuckKrutsinger Sudahkah Anda mencoba? Karena ruang yang lolos akan memungkinkan Anda untuk menjalankan skrip, tetapi skrip itu sendiri akan gagal. Skrip mungkin tidak memanggil skrip lain dengan ruang yang diloloskan.
Bouke
1
@ChuckKrutsinger Itu sangat bagus dan semuanya, tetapi jika seseorang ingin Xcode melambangkan log crash secara otomatis, Anda akan memerlukan jawaban saya pada akhirnya.
Bouke
1
Saya ingin mengulangi bahwa bouke sudah benar dan bahwa jika Anda memiliki ruang di jalur untuk aplikasi Xcode, skrip yang digunakan Xcode untuk menyimbolkan kembali log mogok TIDAK akan berfungsi. Tidak ada hubungannya dengan simbolisasi ulang manual.
Gary Makin
2

Dari dokumen Apple:

Melambangkan Laporan Kecelakaan Dengan Xcode Xcode akan secara otomatis berupaya menyimbolkan semua laporan kerusakan yang ditemui. Yang perlu Anda lakukan untuk simbolikasi adalah menambahkan laporan kerusakan ke Xcode Organizer.

  • Hubungkan perangkat iOS ke Mac Anda
  • Pilih "Perangkat" dari menu "Jendela"
  • Di bawah bagian "PERANGKAT" di kolom kiri, pilih perangkat
  • Klik tombol "Lihat Log Perangkat" di bawah bagian "Informasi Perangkat" di panel sebelah kanan
  • Seret laporan macet Anda ke kolom kiri panel yang disajikan
  • Xcode akan secara otomatis menyimbolkan laporan kerusakan dan menampilkan hasilnya. Untuk menyimbolkan laporan kerusakan, Xcode harus dapat menemukan yang berikut:

    1. File biner dan dSYM aplikasi yang macet.

    2. Binari dan file dSYM untuk semua kerangka kerja kustom yang ditautkan oleh aplikasi. Untuk kerangka kerja yang dibangun dari sumber dengan aplikasi, file dSYM mereka disalin ke arsip di samping file dSYM aplikasi. Untuk kerangka kerja yang dibangun oleh pihak ketiga, Anda perlu meminta file dSYM dari pembuatnya.

    3. Simbol untuk OS yang menjalankan aplikasi saat crash. Simbol-simbol ini mengandung informasi debug untuk kerangka kerja yang termasuk dalam rilis OS tertentu (misalnya, iOS 9.3.3). Simbol OS spesifik untuk arsitektur - rilis iOS untuk perangkat 64-bit tidak akan menyertakan simbol armv7. Xcode akan secara otomatis menyalin simbol OS dari setiap perangkat yang Anda sambungkan ke Mac Anda.

Jika salah satu dari ini tidak ada, Xcode mungkin tidak dapat melambangkan laporan kerusakan, atau mungkin hanya melambangkan sebagian laporan kerusakan.

Ethan
sumber
2

Proses termudah untuk melambangkan log kerusakan:

  1. menyimpan file xcarchive dari penyelenggara selama proses pembangunan IPA untuk penggunaan di masa mendatang.
  2. Ketika crash terjadi, kumpulkan log crash dari perangkat yang terpengaruh. Ekstensi haruslah .crash. Jika crash log dalam format .ips, cukup ganti namanya menjadi .crash.
  3. Klik dua kali xcarchive dari jalur yang disimpan untuk membuatnya muncul di agenda (jika belum ada).
  4. buka di jendela xcode-> perangkat dan simulator -> lihat log perangkat -> semua log -> seret dan letakkan file .crash.

Tunggu 5detik. Bang! panggilan aplikasi dalam tumpukan jejak akan disimbolkan! Anda mungkin masih melihat banyak simbol! itu adalah perpustakaan internal dan panggilan kerangka kerja.

Ini yang termudah, dicoba dan diuji!

Sanchita
sumber
2

Apple memberi Anda crash log dalam format .txt, yang tidak ditandai

**

Dengan perangkat terhubung

**

  • Unduh file ".txt", ubah ekstensi menjadi ".crash" masukkan deskripsi gambar di sini
    • Buka perangkat dan simulator dari tab jendela di Xcode
    • pilih perangkat dan pilih log perangkat
    • seret dan letakkan file .crash ke jendela log perangkat

masukkan deskripsi gambar di sini

Kita akan dapat melihat crash log yang disimbolkan di sana

Silakan lihat tautan untuk perincian lebih lanjut tentang Symbolicating Crash logs

Suraj K Thomas
sumber