Çökme günlüğü Xcode'u nasıl sembolize edebilirim?


189

Xcode 5 düzenleyicisi, tüm kilitlenme günlüklerini listeleyecek bir görünüme sahipti. ve burada açılan kilitlenme günlüklerini sürükleyebiliriz. Ama Xcode 6'dan beri, cihazları organize ettiklerinden ve yeni bir pencereye sahip olduklarını biliyorum. Ama Xcode 6'ya kadar sonra Xcode 5'te sürükleyip bıraktığım kilit günlüklerini görüntülediğim bir yer bulamıyorum. Kimse cevabı biliyor mu?


3
Bu ay önce Apple geliştirici forumlarına sordum ve bir cevap alamadım. Bu kullanışlı bir işlevsellik kaybıdır. Apple ile bu özelliği geri almanızı isteyen bir hata raporu gönderin.
rmaddy

1
Hem iOS hem de OSX çarpışma dökümlerinin sembolizasyonunu çözmek için bunu bir hafta sonu devirdim. Hala çok kaba ama işe yaramalı. Timolicator
Tim

4
Xcode, sadece f --- ing sizin gibi Apple yorumcular gelen sembolik kilit günlükleri gerekiyordu ... tam anlamıyla bunu nasıl anlamaya bütün gün var varsayalım yerine?
William Entriken

Yanıtlar:


120

Tamam, bunu yapabileceğinizi fark ettim:

  1. Bölümünde Xcode > Window > Devices, sol üstteki bağlı bir iPhone / iPad / vb. Seçin.
  2. Cihaz Günlüklerini Görüntüle
  3. Tüm Günlükler

Muhtemelen orada çok fazla günlükünüz var ve içe aktarılan günlüğünüzü daha kolay bulmanızı sağlamak için, devam edip bu noktada tüm günlükleri silebilirsiniz ... bunlar sizin için para anlamına gelmedikçe. Ya da kilitlenmenin tam olarak ne zaman gerçekleştiğini bilmiyorsanız - yine de dosyaya yazılmalıdır ... Tembelim bu yüzden tüm eski günlükleri siliyorum (bu aslında biraz zaman aldı).

  1. Dosyanızı sürükleyip bu listeye bırakmanız yeterlidir. Benim için çalıştı.

13
Aynı sorunu yaşıyorum, ancak bu benim için sorunu çözmüyor - sürükleyip pencereye bıraktığım günlükler görünüyor, ancak sembolik değil.
Arkaaito

9
İşin püf noktası, bir cihazı bağlamanız ve listeden cihazı seçmeniz. Cihaz olmadan bunun mümkün olduğunu düşünmüyorum.
Jonny

60
Çökme dosyanızın bu listeye sürüklenebilir olması için uzantıya sahip olması gerekir .crash.
pjay_

7
Benim için eksik adım dosya düştü oldu Ben dosya sağ fare tıklama ve Log-Sembolik Log yeniden gerekiyordu
RobCroll 13:14

6
Organizatör içindeki bu arşiv için "dSYM'leri indir" i unutmayın.
123FLO321

259

Bu yanıtı kendim için olduğu kadar topluluk için de yazıyorum.

Bir kilitlenme raporunu simgeleyen sorunlar varsa, bu raporların üstesinden gelinebilir:

  1. Kopyalamak, ayrı bir klasör oluşturun Foo.appve Foo.app.dSYMkarşılık gelen .xcarchiveklasöre. Ayrıca .crashraporu klasöre kopyalayın.

  2. Kilitlenme raporunu TextEdit veya başka bir yerde açın, Binary Images:bölüme gidin ve ilk adresi oraya kopyalayın (örn. 0xd7000).

  3. cdklasör içine. Şimdi aşağıdaki komutu çalıştırabilirsiniz:

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

Bu adresteki sembolü gösterir 0x0033f9bb. Lütfen -archseçenek için doğru değeri seçtiğinizden emin olun ( Binary Images:bölümdeki ilk satırdan alınabilir veya Hardware Model:kilitlenme raporundaki ve uygulamanın desteklenen kemerlerinden anlaşılabilir).

Ayrıca, kilitlenme raporundan gerekli adresleri (örneğin bir iş parçacığı çağrı yığını) doğrudan bir metin dosyasına kopyalayabilirsiniz (TextEdit'te Option tuşunu basılı tutun ve gerekli metin bloğunu seçebilir veya kopyalayıp kesebilirsiniz):

0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3

Şimdi bunu bir metin dosyasına kaydedebilir addr.txtve aşağıdaki komutu çalıştırabilirsiniz:

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

Bu, tüm adresler için aynı anda güzel bir sembolizasyon sağlayacaktır.

PS

Yukarıdakileri yapmadan önce, her şeyin doğru bir şekilde ayarlandığını kontrol etmeye değer ( atostemel olarak herhangi bir sağlanan adres için bir şeyi mutlu bir şekilde bildireceği gibi ).

Denetimi yapmak için kilitlenme raporunu açın ve için çağrı yığınının sonuna gidin Thread 0. Uygulamanızı listelemek için sondan ilk satır (genellikle ikinci satır), ör.

34  Foo                    0x0033f9bb 0xd7000 + 2525627

main()çağrı olmalı . Adresi ( 0x0033f9bbbu durumda) yukarıda açıklandığı gibi simgelemek, bunun gerçekten main()bir rastgele yöntem veya işlev olmadığını doğrulamalıdır .

Adres adresi değilse, main()yükleme adresinizi ( -listeğe bağlı) ve kemeri ( -archisteğe bağlı) kontrol edin .

PPS

Yukarıdakiler bitcode nedeniyle çalışmazsa , derlemeniz için dSYM'yi iTunes Connect'ten indirin, yürütülebilir ikili dosyayı dSYM'den (Finder> Paket İçeriğini Göster) çıkarın, dizine kopyalayın ve (örn Foo. atosyerine argüman Foo.app/Foo.


2
mini xcrun öğreticisini yazma ve akıl sağlığı kontrol bölümü ile güncellemeniz için teşekkür ederiz. benim aklıma küfür ve görünürde hiçbir sembolik sonra kaydedilir
Anton Tropashko

10
Çökme raporunun yürütülebilir dosya ve dSYM ile eşleştiğini doğrulamayı unutmayın. İkili Görüntü bölümündeki <> 'deki tanımlayıcıyı çalıştırılabilir dosyanızdan döndürülen kodla eşleştirerek çalıştırabilirsinizxcrun dwarfdump --uuid <path to executable>
Ryan C. Payne

2
Yalnızca uygulamanızdaki sembollerin (Foo) görüneceğini unutmayın. Foundation veya libsystem_kernel.dylib gibi harici kütüphanelerden / çerçevelerden gelen semboller için gösterilmez.
jlukanta

1
bu yardımcı olur, ama yine de benim için çalışmıyor. sorun yaşıyorum kısmı 0xd7000 bilgi yok. benim çizgi bu 0x100038328 __mh_execute_header + 99112 gibi görünüyor. __mh_execute_header ne olduğunu okudum ama nasıl 0x100038328 hakkında bilgi alabilirim ??? i have everything everything
skinsfan00atg

5
İşin çoğunu sizin için yapan basit bir bash senaryosu yazdım. Kullanım: ./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash Sadece tam kilitlenme raporunu sembolize eder ve size sembolik sürümünü verir. gist.github.com/nathan-fiscaletti/…
Nathan

187

Buna da başvurabilirsiniz, Manuel Çarpışma Yeniden Sembolikleştirme adım adım prosedürü yazdım .

Çökme Yeniden Sembolizasyonu

AŞAMA 1

Yukarıdaki tüm dosyaları (MyApp.app, MyApp-dSYM.dSYM ve MyApp-Crash-log.crash) Terminal'i kolayca kullanabileceğiniz her yere uygun bir adla bir Klasöre taşıyın.

Benim için, Masaüstü en kolay ulaşılabilir yerdir;) Bu yüzden, bu üç dosyayı Masaüstünde MyApp klasörüne taşıdım.

ADIM 2

Şimdi onun Finder sırası, XCODE sürümünüz için hangisinin geçerli olduğunu takip edin.

symbolicatecrashKomut dosyasını bulmak için bu komutu kullanın ,
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

Daha düşük sonra Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

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

AŞAMA 3

Bunun $PATHgibi env değişkenine bulunan symbolicatecrash komut dosyasının dizinini ekleyin : sudo vim /etc/paths.d/Xcode-symbolicatecrashve komut dosyasının dizinini yapıştırın ve dosyayı kaydedin. Yeni bir terminal açarken symbolicatecrash, herhangi bir klasörü şu konumda bulunan komutlar olarak çağırabilirsiniz/usr/bin .

Veya

Bu konumdan symbolicatecrash dosyasını kopyalayın ve Masaüstü / Uygulamamıza yapıştırın (Bekleyin… Beni körü körüne takip etmeyin, üç adımdan oluşan, favori konumunuzda birinci adımda oluşturduğunuz Mybol klasörüne sybolicatecrash dosyasını yapıştırıyorum. )

4.ADIM

Terminal'i ve MyApp Klasörünün CD'sini açın.

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

 -  Enter'a basın

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

 -  Enter'a basın

Bu kadar !! Sembolik kayıtlar terminalinizde… şimdi ne bekliyorsunuz? Şimdi basitçe, Hatayı bulun ve çözün;)

Mutlu Kodlama !!!


2
@ EmilVikström: Öneri için teşekkürler, cevabı güncellediniz.
uyuşturucu

2
Dışa aktarmayı kullan DEVELOPER_DIR =xcode-select --print-path
aktarmayı

8
Bir tedavi çalıştı - teşekkür ederim. Dışa aktarma kullanmak zorunda sadece bir şey DEVELOPER_DIR = / Applications / XCode.app / İçindekiler / Geliştirici (tırnak işaretleri olmadan).
elektrik

1
"export DEVELOPER_DIR = xcode-select --print-path" bana sadece "diyor" -bash: export: `--print-path ': geçerli bir tanımlayıcı değil
Almo

2
Güncelleme; işte burada ; xcode7 için burada symbolicatecrash bulun; Başına /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash stackoverflow.com/questions / 32804611 /…
AnneTheAgile

28

Benim için .crash dosyası yeterliydi. .DSYM dosyası ve .app dosyası olmadan.

Bu iki komutu arşivde oluşturduğum mac'ta çalıştırdım ve işe yaradı:

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

vay. Bunun .dsym dosyası olmadan nasıl çalıştığını bilmiyorum ama işe yarıyor!
rustyMagnet

4
@rustyMagnet Çalışma şekli, bilgisayarınızdaki arşivlenen derlemelerdeki dsym'leri kullanmaktır.
Andrey Tarantsov

1
Evet, bu yalnızca Xcode ile arşivlediğiniz derlemeler için çalışır, daha sonra kilitlenme günlüklerini simgelemek istediğiniz geçici çalışmalar için oluşturmuş olabileceğiniz diğer derlemeler için geçerli değildir.
CMash

21

Xcode kullanmanın daha kolay bir yolu vardır (komut satırı araçlarını kullanmadan ve adresleri teker teker aramaksızın)

  1. Herhangi bir .xcarchive dosyasını alın. Daha önce bir tane varsa bunu kullanabilirsiniz. Yoksa, Xcode'dan Ürün> Arşiv'i çalıştırarak bir tane oluşturun.

  2. .Xcarchive dosyasına sağ tıklayın ve 'Paket İçeriğini Göster'i seçin

  3. Dsym dosyasını (çöken uygulamanın sürümü) dSYMs klasörüne kopyalayın

  4. .App dosyasını (çöken uygulamanın sürümü) Ürünler> Uygulamalar klasörüne kopyalayın

  5. Info.plist dosyasını düzenleyin ve ApplicationProperties sözlüğü altında CFBundleShortVersionString ve CFBundleVersion öğelerini düzenleyin. Bu, arşivi daha sonra tanımlamanıza yardımcı olacaktır

  6. Xcode'a almak için .xcarchive dosyasına çift tıklayın. Organizer'ı açmalıdır.

  7. Kilitlenme günlüğüne geri dönme (Xcode'daki Aygıtlar penceresinde)

  8. .Crash dosyanızı oraya sürükleyin (henüz yoksa)

  9. Kilitlenme günlüğünün tamamı şimdi simgelenmelidir. Değilse, sağ tıklayın ve 'Çarpışma günlüğünü yeniden sembolize et'i seçin


1
Cevabınız doğru ve basit. Terminal uygulamasını kullanmaya gerek yoktur. Bazı Sürekli Sürekli Entegrasyon sisteminde .app.dSYM klasörünün zip topu yerine .xcarchive dosyası olmadığından .xcarchive klasörünün yeniden oluşturulması çok önemlidir. Tesadüf olarak, dün yaptığım şey tam olarak söylediğinle aynı.
DawnSong

tam çıktı nasıl görünmelidir?
noobsmcgoobs

Benim xcarchive çöktü app sürümü için olduğu gibi ben 3-5 adım atlayın rağmen bu kısmen benim günlükleri sembolize ediyor.
Declan McKenna

1
Bu sadece kendi kodunuzu sembolize eder - kullanmış olabileceğiniz harici kütüphane kodunu değil.
RPM

7

Aynı makinedeki bir uygulama derlemesinden bir kilitlenme günlüğünü simgelemek için Xcode 10'daki şu adımları izleyin:

  1. İç Organizatör , uygulamanın dayandığı arşivi bulun.
  2. Hata Ayıklama Sembollerini İndir'e tıklayın butonuna. İndirilenler klasörünüzde hiçbir şey görünmeyecek, ancak sorun değil.
  3. Yapı makinesini bir iOS cihazına bağlayın.
  4. Cihazlar ve Simülatörler'den cihazı seçin .
  5. Cihaz Günlüklerini Görüntüle'yi tıklayın düğmesi.
  6. Çökme dosyasını soldaki panele sürükleyip bırakın. Dosya bir .crash ile bitmelidir uzantısıyla , aksi takdirde sürükleme başarısız olur.
  7. Tüm Günlükler sekmesine geçin .
  8. Eklenen kilitlenme dosyasını seçin.
  9. Dosya otomatik olarak sembolize edilmelidir, aksi takdirde sağ tıklama bağlamı menü öğesini Yeniden Sembolik Günlüğü kullanın .

1
İlk başta bunun diğer yayınlara bir şey eklediğini düşünmedim, ancak ilk iki adım, özellikle 'Hata Ayıklama Sembollerini İndir', eksik olduğum şey gibi görünüyor. Teşekkür ederim.
Christopher King

6

Aynı alt klasörde .dSYM ve .crash dosyanız varsa, atabileceğiniz adımlar şunlardır:

  1. .Crash dosyasındaki geriye doğru izlemeye baktığınızda, ikinci sütundaki ikili görüntünün adını ve üçüncü sütundaki adresi not edin (örn. Aşağıdaki örnekte 0x00000001000effdc).
  2. Geri izlemenin hemen altında, "İkili Görüntüler" bölümünde, ikili görüntünün (örn. TheElements) görüntü adını, mimarisini (örn. Arm64) ve yükleme adresini (aşağıdaki örnekte 0x1000e4000) not edin.
  3. Aşağıdakileri yürütün:

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

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


4

Xcode 11.2.1, Aralık 2019

Apple, kilitlenmemiş günlüğü .txt biçiminde verir.

**

Cihaz bağlıyken

**

  • ".Txt" dosyasını indirin, uzantıyı ".crash" olarak değiştirin resim açıklamasını buraya girin
    • Xcode'daki pencere sekmesinden aygıtları ve simülatörleri açma
    • cihaz seçin ve cihaz günlüklerini seçin
    • .crash dosyasını aygıt günlüğü penceresine sürükleyip bırakın

resim açıklamasını buraya girin

Orada sembolik çarpışma günlüklerini görebileceğiz

Kilitlenme günlüklerini sembolize etme hakkında daha fazla bilgi için lütfen bağlantıya bakın


Vay. Dosya uzantısı .txt'den .crash'e değiştirildi. Bana bir .txt dosyası verdiler. Teşekkürler dostum. Cevabınızın bu kadar düşük olduğuna inanamıyorum.
datWooWoo

3

Xcode uygulama adınızın boşluk içermediğinden emin olun. Benim için işe yaramamasının nedeni buydu. Yani /Applications/Xcode.appçalışır, /Applications/Xcode 6.1.1.appçalışmaz.


Denedin mi? Değilse, lütfen yorumunuzun bir anlam ifade edip etmediğini görün ve deneyin.
Bouke

1
Bahsettiğim konu bu değil. Xcode, kurulumdan sonra, ancak ilk kullanımdan önce yeniden adlandırılabilir. Ancak simgeleme komut dosyası uygulamanın adındaki boşlukları işleyemez ve başarısız olur.
Bouke

1
@ChuckKrutsinger Gerçekten denediniz mi? Çünkü kaçan alanlar komut dosyasını çalıştırmanıza izin verir, ancak komut dosyasının kendisi başarısız olur. Komut dosyası, büyük olasılıkla çıkış alanı olan diğer komut dosyalarını çağırmaz.
Şubat'ta Bouke

1
@ChuckKrutsinger Bu çok hoş ve hepsi, ama eğer biri Xcode'un çökme günlüğünü otomatik olarak sembolize etmesini istiyorsa, sonunda cevabımı almalısın.
Bouke

1
Bouke'nin doğru olduğunu ve Xcode uygulaması yolunda bir alanınız varsa, Xcode'un çökme günlüklerini yeniden sembolize etmek için kullandığı komut dosyası çalışmaz. Manuel yeniden sembolizasyon ile ilgisi yoktur.
Gary Makin

2

Apple'ın belgelerinden:

Çökme Raporlarını Xcode ile Sembolize Etme Xcode, karşılaştığı tüm çökme raporlarını otomatik olarak sembolize etmeye çalışacaktır. Sembolikleştirme için yapmanız gereken tek şey, kilitlenme raporunu Xcode Organizer'a eklemektir.

  • Mac'inize bir iOS cihazı bağlayın
  • "Pencere" menüsünden "Cihazlar" ı seçin
  • Sol sütundaki "CİHAZLAR" bölümünün altında bir cihaz seçin
  • Sağ paneldeki "Cihaz Bilgileri" bölümünün altındaki "Cihaz Günlüklerini Görüntüle" düğmesini tıklayın
  • Kilitlenme raporunuzu sunulan panelin sol sütununa sürükleyin
  • Xcode otomatik olarak kilitlenme raporunu ve sonuçları görüntüler. Bir kilitlenme raporunu simgelemek için Xcode'un aşağıdakileri bulabilmesi gerekir:

    1. Kilitlenen uygulamanın ikili ve dSYM dosyası.

    2. Uygulamanın bağlandığı tüm özel çerçeveler için ikili dosyalar ve dSYM dosyaları. Uygulama ile kaynaktan oluşturulan çerçeveler için, dSYM dosyaları uygulamanın dSYM dosyasının yanında arşive kopyalanır. Üçüncü taraflarca oluşturulan çerçeveler için, yazardan dSYM dosyasını istemeniz gerekir.

    3. Uygulama kilitlendiğinde çalıştığı işletim sisteminin sembolleri. Bu semboller, belirli bir OS sürümüne dahil edilen çerçeveler için hata ayıklama bilgileri içerir (örn. İOS 9.3.3). İşletim sistemi sembolleri mimariye özeldir - 64 bit cihazlar için iOS sürümünde armv7 sembolleri bulunmaz. Xcode, Mac'inize bağladığınız her aygıttan işletim sistemi sembollerini otomatik olarak kopyalar.

Bunlardan herhangi biri eksikse Xcode kilitlenme raporunu simgeleyemeyebilir veya kilitlenme raporunu yalnızca kısmen simgeleyebilir.


2

Kilitlenme günlüklerini simgeleyen en kolay işlem:

  1. ileride kullanmak üzere IPA oluşturma işlemi sırasında organizatörden xcarchive dosyasını koruyun.
  2. Kilitlenme meydana geldiğinde, etkilenen cihazdan kilitlenme günlüklerini toplayın. Uzantı .crash olmalıdır. Çökme günlüğü .ips biçimindeyse, yalnızca .crash olarak yeniden adlandırın.
  3. Düzenleyicide görünmesini sağlamak için saklanan yoldan xcarchive öğesine çift tıklayın (henüz yoksa).
  4. xcode penceresinde aç -> cihazlar ve simülatörler -> cihaz günlüklerini görüntüle -> tüm günlükler -> .crash dosyasını sürükleyip bırakın.

5 saniye bekleyin. Bang! yığın izleme uygulama çağrıları sembolik olacak! Yine de birçok sembol görebilirsiniz! bunlar iç kütüphane ve çerçeve çağrılarıdır.

Bu en kolayı, denenmiş ve test edilmiş!


1

Apple, kilitlenmemiş günlüğü .txt biçiminde verir.

**

Cihaz bağlıyken

**

  • ".Txt" dosyasını indirin, uzantıyı ".crash" olarak değiştirin resim açıklamasını buraya girin
    • Xcode'daki pencere sekmesinden aygıtları ve simülatörleri açma
    • cihaz seçin ve cihaz günlüklerini seçin
    • .crash dosyasını aygıt günlüğü penceresine sürükleyip bırakın

resim açıklamasını buraya girin

Orada sembolik çarpışma günlüklerini görebileceğiz

Kilitlenme günlüklerini sembolize etme hakkında daha fazla bilgi için lütfen bağlantıya bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.