İPhone Uygulama Kilitlenme Raporlarını Sembolize Etme


433

İPhone uygulamamın kilitlenme raporlarını sembolize etmeye çalışıyorum.

Çökme raporlarını iTunes Connect'ten aldım. App Store'a gönderdiğim uygulama ikili dosyası var ve yapının bir parçası olarak oluşturulan dSYM dosyası var.

Tüm bu dosyaları birlikte spotlight ile dizinlenmiş tek bir dizin içinde var.

Şimdi ne var?

Çağırmayı denedim:

symbolicatecrash crashreport.crash myApp.app.dSYM

ve sadece çarpışma raporunda yer alan aynı metni çıktı, sembolik değil.

Yanlış bir şey mi yapıyorum?


3
Cevabımı iPhone SDK'da da görebilirsiniz : symbolicatecrash.sh nerede bulunur? . symbolicatecrashKomutun nerede bulunacağını , nasıl kullanılacağını ve sembolizasyon için gerekli dSYM dosyasının nasıl bulunacağını listeliyorum.
Sam

6
/Uygulamalar/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
logancautrell 2:12


1
Herkes nerede * .app, * .dSYM ve çökme günlükleri alabilirsiniz merak ediyorsanız o zaman aşağıdaki benim cevap bakın.
Sam B

Yanıtlar:


689

Apple'dan kilitlenme raporunu analiz etme adımları:

  1. Uygulama deposuna aktarılan yayın .app dosyasını, yayınlandığı sırada oluşturulan .dSYM dosyasını ve kilitlenme raporu APPLE'den bir KLASÖR içine alır .

  2. Terminal uygulamasını AÇIN ve yukarıda oluşturulan klasöre gidin ( cdkomut kullanarak )

  3. Koş atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. Bellek konumu, uygulamanın rapora göre çöktüğü konum olmalıdır.

Ör: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

Bu size tam satır, kilitlenme ile sonuçlanan yöntem adını gösterir.

Ör: [classname functionName:]; -510

IPA'yı simgeleyen

simgelemek için IPA kullanırsak - .ipa uzantısını .zip ile yeniden adlandırın, ayıklayın, ardından uygulamayı içeren bir Yük Klasörü alabiliriz. Bu durumda .dSYM dosyasına ihtiyacımız yoktur.

Not

Bu, yalnızca uygulama ikili dosyasında soyulmuş simgeler yoksa çalışabilir. Varsayılan olarak serbest bırakma sembolleri çıkarır. "Kopyalama Sırasında Hata Ayıklama Sembollerini Şeritle" proje oluşturma ayarlarında bunu NO olarak değiştirebiliriz.

Daha fazla ayrıntı bu gönderiye bakın


12
@NaveenShan cevabına bir ipucu, gerçek dünyadan bir örnek bunu yapar atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c ve alırsınız -[HUDWindow sizedHUDBackground] (in myApp) + 1197
loretoparisi

3
Yine de hangi adresi kullanıyorsunuz? Günlüklerde her işlevden sonra iki adres sütunu bulunur ve ikincisinde bir + ve bir tür ofset bulunur. 0x332da010 0x332d9000 + 4112 gibi
Oscar

7
@OscarGoldman İkinci adres örneğin: - 0x332da010 0x332d9000 + 4112'de. 0x332d9000 kullanın.
Naveen Shan

4
Ayrıca, adres olmadan kullanılırsa, birden fazla konumu tek tek göndererek analiz etmenizi sağlar.
Paul Ardeleanu

42
Bu cevapla ilgili birden fazla sorun vardır: 1. Bu, yalnızca uygulama ikili dosyasında soyulmuş semboller yoksa çalışabilir. Ve sürümleri varsayılan olarak soyun. 2. Semboller mevcut olsa bile, asla satır numarasını göstermez. Sadece dSYM ile sembolize etmek bunu sağlayacaktır. 3. Yığın izinde gösterilen bellek adresini kullanamazsınız; adres, uygulamanın yüklendiği başlangıç ​​bellek adresine göre normalleştirilmelidir. Daha fazla ayrıntı bu cevaba bakınız: stackoverflow.com/questions/13574933/…
Kerni

173

Bir çarpışma günlüğünü simgelemek için (ve nihayet başarılı) tüm bu cevapları okuduktan sonra, sembolik atakların çağrılmasının neden sembolik bir çıktı üretmediğini belirlemek için gerçekten önemli olan bazı noktalar olduğunu düşünüyorum.

Bir kilitlenme günlüğünü sembolize ederken birbirine uyması gereken 3 öğe vardır:

  1. Çökme günlük dosyasının kendisi (yani example.crash), XCode'un düzenleyicisinden dışa aktarıldı veya iTunes Connect'ten alındı.
  2. .appPaket (yani example.appkendisi çarpışma günlüğüne ait uygulama ikili içerdiğini). Bir .ipapaketiniz varsa (yani example.ipa) .apppaketi açarak .ipa(yani unzip example.ipa) paketi açabilirsiniz . Daha sonra .apppaket ayıklanan Payload/klasörde bulunur.
  3. .dSYMAyıklama simgeleri içeren paket (yani example.app.dSYM)

Simgeselleştirmeye başlamadan önce, tüm bu yapıların eşleşip eşleşmediğini kontrol etmelisiniz, bu da çökme günlüğünün sahip olduğunuz ikili dosyaya ait olduğunu ve hata ayıklama simgelerinin bu ikili dosya oluşturma sırasında üretilenler olduğunu gösterir.

Her ikili dosya, kilitlenme günlük dosyasında görülebilen bir UUID ile belirtilir:

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

Bu alıntıda kilitlenme günlüğü example.app/example ile UUID adlı bir uygulama ikili görüntüsüne aittir aa5e633efda8346cab92b01320043dc3.

Sahip olduğunuz ikili paketin UUID'sini cücedump ile kontrol edebilirsiniz:

dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example

Daha sonra, sahip olduğunuz hata ayıklama simgelerinin de bu ikiliye ait olup olmadığını kontrol etmelisiniz:

dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example

Bu örnekte tüm varlıklar birbirine uygundur ve yığın izlemenizi sembolize edebilmeniz gerekir.

İneceğiz symbolicatecrashsenaryo:

Xcode 8.3'te betiği şu şekilde çağırabilirsiniz:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log

Orada yoksa find . -name symbolicatecrashbulmak için Xcode.app dizininizde bir çalıştırabilirsiniz .

Gördüğünüz gibi daha fazla parametre verilmiyor. Komut dosyası, spotlight araması yaparak uygulama ikili ve hata ayıklama sembollerinizi bulmalıdır. Hata ayıklama simgelerini adlandırılan belirli bir dizinle arar com_apple_xcode_dsym_uuids. Bu aramayı kendiniz yapabilirsiniz:

mdfind 'com_apple_xcode_dsym_uuids = *'

Resp.

mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"

İlk spot ışığı çağırma size tüm endeksli dSYM paketlerini verir ve ikincisi size .dSYMbelirli bir UUID içeren paketleri verir . Spot ışığı .dSYMpaketinizi bulamazsa symbolicatecrash, ikisi de bulamaz . Tüm bunları yaparsanız, örneğin ~/Desktopspot ışığınızın bir alt klasöründe her şeyi bulabilmeniz gerekir.

Eğer symbolicatecrashsizin bulur .dSYMpaketi aşağıdaki gibi bir satır olmalıdır symbolicate.log:

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

.appPaketinizi bulmak için aşağıdakine benzer bir spotlight araması çağrılır symbolicatecrash:

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

Eğer symbolicatecrashsizin bulur .apppaketi aşağıdaki özü olmalıdır symbolicate.log:

Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH

Tüm bu kaynaklar tarafından bulunursa symbolicatecrash, çökme günlüğünüzün sembolik sürümünü yazdırmalıdır.

Değilse doğrudan dSYM ve .app dosyalarınıza geçebilirsiniz.

symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log

Not: Sembolik arka iz terminale gönderilir, değil symbolicate.log.


i ancak bu olsun tüm dosyaları bulabilirsiniz ve hiçbir sembolik çıktıNo crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
jere

1
Bu gerçekten yardımcı oldu! Benim durumumda .app dosyası yürütülebilir adından farklı bir ada sahip (neden bilmiyorum ama Xcode tarafından bu şekilde inşa edilmiştir). XCode arşivindeki .app dosyasını yeniden adlandırdıktan sonra, simgeleme işe yaradı.
Hrissan

29
Bu harika bir açıklama ve en iyi cevap IMO olmalı, teşekkür ederim. Eğer ayarlamak gerekebilir Not DEVELOPER_DIRo kadar seviyorum ilgili komut şikayet durumunda ortam değişkeni: export DEVELOPER_DIR=`xcode-select --print-path` . Bu satırı ekledim ~/.bash_profile. Bkz. Stackoverflow.com/q/11682789/350761
Eliot

1
Xcode 5 için bunun şu konuma taşındığını unutmayın: <PATH_TO_Xcode.app> /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash
Eliot

1
sembolik kilitlenme de birkaç yararlı seçenek vardır. <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

Xcode'un en son sürümü (3.2.2) ile, kilitlenme raporlarını Xcode Organizer'ın Cihaz Günlükleri bölümüne sürükleyip bırakabilirsiniz; bunlar sizin için otomatik olarak sembolize edilir. Uygulamanın bu sürümünü Build & Archive (ayrıca Xcode 3.2.2'nin bir parçası) kullanarak oluşturduysanız bu en iyi sonucu verir.


3
Bu, yeni bir kurulumda Xcode4 ile çalışmıyor. Yeni bir hata gibi görünüyor :(
Adam

1
Bu sorunun aynı sorunu çözüp çözmediğinden emin değilim, ancak birileri github.com/nskboy/symbolicatecrash-fix YMMV sembolik komut dosyasını yamalı :
Alan Rogers

2
Bu ipucu Xcode 4.2 ile çalışır. Kilitlenme günlüklerini Düzenleyicinin Aygıt Günlüklerine yerleştirin. Organizatörü Yeniden Başlat sembolik kilit günlükleri alacak !!! Teşekkürler.
harshit2811

2
Bir çökme günlüğü almak için başka bir bilgisayardan bir arşiv dosyasını içe aktardığımda bu benden işe yaramadı. :( Bu nedenle dosyayı elle simgelemek zorunda kaldım. Simgeselleştirmenin nasıl yapılacağıyla ilgili adımları burada bulabilirsiniz: iPhone SDK: Symbolicatecrash.sh nerede?
Sam

3
İTunes Connect'ten indirilen kilitlenme raporlarıyla benim için çalışma.
Dmitry

72

Bunu aşağıdaki adımları kullanarak başarılı bir şekilde yaptım.

Adım 1: Masaüstünde bir klasör oluşturun, "CrashReport" olarak adlandırın ve içine üç dosya ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") koydum.

Adım 2: Finder'ı açın ve Xcode uygulamasını bulacağınız Uygulamalar'a gidin, sağ tıklayın ve "Paket İçeriğini Göster" i tıklayın, ardından bu basit yolu izleyin. "İçindekiler-> Geliştirici-> Platformlar-> iPhoneOS.platform-> Geliştirici-> Kütüphane-> PrivateFrameworks-> DTDeviceKit.framework -> Sürümler-> A-> Kaynaklar"

VEYA

"İçindekiler-> Geliştirici-> Platformlar-> iPhoneOS.platform-> Geliştirici-> Kütüphane-> PrivateFrameworks-> DTDeviceKitBase.framework -> Sürümler-> A-> Kaynaklar"

VEYA

Xcode 6 ve üstü için yol Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Sürümler / A / Kaynaklar

"Symbolicatecrash" dosyasını bulduğunuzda, bunu kopyalayın ve "CrashReport" klasörüne yapıştırın.

3.Adım: Terminali başlatın, bu 3 Komutu çalıştırın

  1. cd / Kullanıcılar / mac38 / Masaüstü / CrashReport ve Enter düğmesine basın

  2. DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer" öğesini dışa aktarın ve Enter tuşuna basın

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM'ye basın ve Enter Now now Done .. (NOT: 6.4 veya daha sonraki sürümlerde -A seçeneği yoktur - sadece dışarıda bırakın).

3
DTServiceKit için bkz. Uygulamalar / Xcode.app / İçindekiler / Paylaşılan Çerçeveler
Ryan Heitner

3
Teşekkür ederim ... 9 Nisan 2015 itibariyle, bu benim için kusursuz bir şekilde çalıştı. Bir şey, Unknown option: Asembolik
kaza

1
Keşke bu cevaba bin puan verebilsem. Bu konuda pek çok nasıl yapılır ... ama bu en düşük seviyede çalışan ve bu yüzden HER ZAMAN işe yarıyor. Arkadaki tüm adımları atmak bir acıdır, ancak her şey başarısız olduğunda bu işi yapar.
Chad Robinson

35

XCode kullanarak kilitlenme raporunu otomatik olarak sembolize etme adımları:

XCODE 9 İÇİN GÜNCELLENDİ

  1. Mac'inize herhangi bir iOS cihazı bağlayın (evet fiziksel bir cihaz, evet bunun aptal olduğunu biliyorum)

  2. "Pencere" menüsünden "Cihazlar" ı seçin resim açıklamasını buraya girin

  3. Sol taraftaki cihazınızı ve sağ taraftaki CİHAZ GÜNLÜKLERİNİ GÖSTER resim açıklamasını buraya girin

  4. Bekle. Gösterilmesi bir dakika sürebilir. Belki Command-Ao zaman Deletebunu hızlandıracaksınız.

  5. Kritik belgesiz adım: Eğer gelen iTunesConnect aldığım o Çökme raporu yeniden adlandırmak.txtiçin uzatma.crashuzatma

  6. Kilitlenme raporunu soldaki alana sürükleyin resim açıklamasını buraya girin

Ve sonra Xcode çökme raporunu sembolize edecek ve sonuçları gösterecektir.

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


1
Bu resmi Apple prosedürüdür. Cevap olmalı.
Giammy

2
Teşekkürler, şimdi resim ekliyorum. Ayrıca SUPER UNDOCUMENTED adımını da dahil etti. Kırmızı metinlerden oluşan bir git yapmayı ve buraya yapıştırmayı düşündüm, böylece gerçekten öne çıkacaktı. Sonra bunu düşünmeyi bıraktım.
William Entriken

1
Teşekkür ederim! Diğer cevapların hiçbiri, kullandığınız cihazın kilitlenmenin meydana geldiği cihaz (hatta cihaz türü) olması gerekmediğini söylemez.
galactikuh

Hızlı not, çünkü benim için yeniden sembolize olmaz. Ayrıca Düzenleyici'yi açmak zorunda kaldım, Arşivler'deki yapıya tıklayın, Hata Ayıklama Sembollerini İndir'e tıklayın. Sonra cihaz günlüğü görünümünde yeniden sembolize edebilirim. Bu, reddedilen bir incelemeden sonra Apple'dan indirilen kilitlenme günlüğü içindi.
gregthegeek

28

Airbrake'i uygulamalarımda kullanıyorum, bu da uzaktan hata günlüğü yapmanın oldukça iyi bir işidir.

Geri izlemenin ihtiyacı varsa bunları nasıl atos ile simgeliyorum:

  1. Xcode'da (4.2) düzenleyiciye gidin .ipa dosyasının oluşturulduğu arşive sağ tıklayın.

  2. Terminal'de, örneğin xcarchive içine cdMyCoolApp 10-27-11 1.30 PM.xcarchive

  3. Aşağıdakileri girin atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (tek tırnak işaretlerini unutmayın)

  4. Bu çağrıya sembolümü dahil etmiyorum. Elde ettiğiniz boş bir satırda bir blok imleç.

  5. Sonra sembol kodumu o blok imlecine kopyalayıp yapıştırıyorum ve enter tuşuna basıyorum. Şuna benzer bir şey göreceksiniz:

    -[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)

  6. Bir blok imlecine geri döndünüz ve diğer sembollere yapıştırabilirsiniz.

İlk biti tekrar girmeden geri izlemenizden bir öğeyi geçebilmeniz güzel bir zaman tasarrufu sağlar.

Zevk almak!


28

Ayrıca, sembolik kilitlenmeyi çalıştırmadan önce aynı dizine dsym, uygulama paketi ve kilitlenme günlüğünü bir araya getirdim

Sonra sembolikatecrash çalışan basitleştirmek için .profile içinde tanımlanan bu işlevi kullanın:

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

Orada eklenen argümanlar size yardımcı olabilir.

Komutu çalıştırarak spot ışığının dism dosyalarınızı "gördüğünden" emin olun:

mdfind 'com_apple_xcode_dsym_uuids = *'

Dizininizde bulunan dsym'i bulun.

NOT: En son Xcode'dan itibaren artık bir Geliştirici dizini yoktur. Bu yardımcı programı burada bulabilirsiniz:

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers iyonları / A / Kaynaklar / symbolicatecrash


1
Mddfind çıktı baktım ve dSYM dosyası kesinlikle spot ışığı ile görülebilir. Bununla birlikte, symbolicatecrash betiği hala kilitlenme raporunun kendisinden farklı bir çıktı vermez. Sağladığınız argümanları kullanarak bile.
Jasarien

Komut dosyası dsym'i bulamazsa başlangıçta bazı uyarı metinleri üretmelidir - bunu arayabilir ve ne dediğini görebilir misiniz?
Kendall Helmstetter Gelner

Ayrıca, "." Eklemeyi deneyin. komuttan sonra, "symbolicatecrash -A -v MyApp.crashlog" olur. . Bu, zaten yapmıyorsa onu geçerli dizine bakmaya zorlar.
Kendall Helmstetter Gelner

Anlamı "Çalıştırılamıyor" / usr / bin / xcode-select ": /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/ adresinde böyle bir dosya veya dizin yok sembolik çizgi satırı 49. "
bpapa

Hata! Görünüşe göre bu
yığın

21

Xcode 6.1.1 için basit ve güncel bir cevap.

ADIMLARI

1.Xcode> Pencere> Cihazlar.

2. CİHAZLAR bölümünün altındaki cihaz listesinden bir cihaz seçin.

3. Cihaz Günlüklerini Görüntüle'yi seçin.

Tüm Günlükler bölümünde, raporu doğrudan sürükleyip bırakabilirsiniz.

5.Xcode sizin için kilitlenme raporunu otomatik olarak gösterir.

Sembolik kilitlenme raporunu Tarih / Saatini kilitlenme raporunuzda belirtilen Tarih / Saat ile eşleştirerek bulabilirsiniz.


3
Apple Resolution Center'dan indirdiğim kilitlenme raporlarında genellikle .txt uzantısı bulunur. Bunları .crash olarak yeniden adlandırmayı unutmayın, aksi takdirde Cihaz Günlükleri bunları eklemeyi reddedebilir. Mevcut XCode 6.3.1
Tony

3
Bu resmi Apple prosedürüdür. Cevap olmalı. Apple bağlantısı: Teknik Not TN2151: iOS Uygulaması Çökme Raporlarını Anlama ve Analiz Etme
Giammy

Çökme Apple / iTunesConnect'ten geliyorsa bunu nasıl yapabiliriz? Başka bir deyişle, kilitlenmenin meydana geldiği cihazı gerçekten bilmiyor veya almıyoruz?
galactikuh

14

Birkaç yıldır uygulamalar geliştirmeme rağmen, bu benim ilk kez bir ikili hata ayıklama oldu ve tam bir NOOB gibi hissettim nerede tüm dosyaları nerede olduğunu bulmak * yani * .app * .dSYM ve kilit günlükleri? Bunu anlamak için birden fazla mesajı okumak zorunda kaldım. Resim bin kelimeye bedeldir ve umarım bu yazı gelecekte herkese yardımcı olur.

1- Önce itunesconnect'e gidin ve çökme günlüklerinizi indirin. NOT: Çoğu durumda "Bir raporun gösterilmesi için çok az rapor gönderildi" gibi bir şey alabilirsiniz. Temelde yeterli kullanıcı Apple'a kilitlenme raporu göndermedi, bu durumda o noktada hiçbir şey yapamazsınız.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

2- Şimdi, ikili kodunuzu Apple'a gönderdiğinizden beri kodunuzu değiştirmediyseniz, o proje için Xcode'u başlatın ve Ürün -> Arşivle'yi tekrar yapın. Aksi takdirde, gönderilen en son ikili dosyayı bulup sağ tıklayın.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin


8

Xcode 4.2.1'de Düzenleyici'yi açın , ardından Kütüphane / Aygıt Günlükleri'ne gidin ve .crash dosyanızı kilitlenme günlükleri listesine sürükleyin. Birkaç saniye sonra sizin için sembolize edilecektir.

Özgün derlemenin arşivlendiği Xcode örneğinin aynısını kullanmanız gerektiğini unutmayın (yani derlemenizin arşivi Düzenleyici'de olmalıdır ).


8

Xcode 4'ü kullanarak görev daha da basittir:

  • açık Organizatör ,
  • Kütüphaneye tıklayın | Sol sütundaki Cihaz Günlüğü
  • ekranın altındaki " İçe Aktar " düğmesini tıklayın ...

ve voilà. Günlük dosyası sizin için otomatik olarak içe aktarılır ve sembolize edilir. Yapıyı Xcode -> Ürün -> Archive kullanarak arşivlediniz .


1
Yeterince garip, içe aktarmanın bir etkisi yok. .App, .dSYM ve .crash koymak ve daha sonra .crash dosyasında (ek argüman olmadan) symbolicatecrash çalıştırmak (XCode 4)
Rus

7

Büyülü Xcode Organizer, uygulamamı simgelemekle ilgili büyülü değil. Apple'dan başarısız bir uygulama gönderiminden aldığım kilitlenme raporları için hiç sembolüm yok.

Kilitlenme raporunu (depoya gönderdiğim) .app dosyası ve .dSYM dosyasıyla aynı klasöre koyarak komut satırını kullanmayı denedim:

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

Bu, yalnızca temel temel kodum için değil, uygulamam için semboller sağladı, ancak Organizatörün bana verdiği sayı dökümünden daha iyiydi ve uygulamamın sahip olduğu çökmeyi bulup düzeltmem için yeterliydi. Herkes Vakfı sembolleri almak için bunu nasıl genişletmek bilirse, takdir edilecektir.


Çekirdek Vakfı dSYM için, (çince olabilir) bir adam dSYM'yi paylaşılan google sürücüsüne yükledi, sadece indirin ve "desteklenen cihazlar" klasörüne atın ve çözülecek. github.com/Zuikyo/iOS-System-Symbols
harunaga

6

Benim durumumda, kilitlenme raporlarını doğrudan Posta'dan Düzenleyiciye sürükliyordum. Bazı nedenlerden dolayı, kilitlenme raporlarının simgelenmesini engelledi (nedenini bilmek isterim).

Çökme raporlarını önce Masaüstüne kopyaladıktan sonra Düzenleyici'ye sürükleyerek doğru şekilde sembolize ettiniz.

Çok özel bir durum, biliyorum. Ama her ihtimale karşı paylaşacağımı düşündüm.


Bunun spot ışığıyla bir ilgisi olabileceğini düşünüyorum. Düzenleyicinin günlüklerinizi sakladığı yerin spot ışığıyla dizine eklenmemiş olması ihtimali var mı?
Jasarien

4

İşte symbolicatecrash ile ilgili başka bir sorun - paketlerinde boşlukları olan Uygulamalar (yani 'Test App.app') ile çalışmaz. Not Gönderirken adlarında boşluklar olabileceğini düşünmüyorum, bu yüzden bunları yine de kaldırmalısınız, ancak zaten analiz edilmesi gereken çökmeler varsa, symbolicatecrash'i (4.3 GM) olduğu gibi yamalayın:

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\"";

Değer için, bu konuda bir rdar doldurdum ve [redacted] 'de sabit
Alastair Stuart

4

Airbrake kullananlar için yukarıda sağlam bir yanıt var, ancak ayarlama yapmadan benim için işe yaramaz:

Bazı bellek adresleri için çalışır, ancak diğerleri için değil, neden olduğundan emin değilim ...

  • Masaüstünde veya herhangi bir yerde yeni dizin oluşturun
  • Xcode düzenleyicide söz konusu arşivi bulma
  • Bulucuda göstermek için iki kez hafifçe vurun
  • Paket içeriğini göstermek için iki kez hafifçe vurun
  • .DSYM dosyasını ve .app dosyasını yeni dizine kopyalayın
  • cd yeni dir
  • Bu komutu çalıştırın: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo'
  • Terminal etkileşimli bir harekete geçecek
  • Bellek adresini yapıştırın ve enter tuşuna basın, yöntem adı ve satır numarası verir
  • Alternatif olarak, bu komutu girin: atos -arch armv7 -o 'Vimeo.app' / 'Vimeo' Yalnızca bir adres için bilgi almak için

4

Benim için çalışan kombinasyon:

  1. DSYM dosyasını kilitlenme raporunun bulunduğu dizine kopyalayın
  2. Uygulamayı içeren ipa dosyasını açın ('MyApp.ipa' dosyasını açın)
  3. Uygulama ikili dosyasını ortaya çıkan patlayan yükten kilitlenme raporu ve simge dosyasıyla aynı klasöre kopyalayın ("Uygulamam.app/MyApp" gibi bir şey)
  4. Xcode'un düzenleyicisinden kilitlenme raporunu içe aktarma veya yeniden sembolize etme

Atos kullanarak kilitlenme raporunda bulunan adresler ve ofsetler ile doğru sembol bilgilerini çözemedim. Bunu yaptığımda daha anlamlı bir şey görüyorum ve meşru bir yığın izi gibi görünüyor.


3

Düzgün çalışması için symbolicatecrash betiğinin bir sürü kesmek zorunda kaldı.

Anlayabildiğim kadarıyla, symbolicatecrash şu anda .app'nin .dsym ile aynı dizinde olmasını gerektiriyor. .App'yi bulmak için .dsym'yi kullanır, ancak sembolleri bulmak için dsym'i kullanmaz.

Dsym'de görünmesini sağlayacak bu yamaları denemeden önce sembolik kazanızın bir kopyasını yapmalısınız:

GetSymbolPathFor_dsymUuid işlevinde 212 civarında

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

MatchUUID işlevinde 265. satır civarında

265             return 1;

1

Bu basit, çok arama yaptıktan sonra bütün çökme günlük dosyasını sembolize etmek için net adımlar buldum.

  • .app, crash_report ve DSYM dosyalarını bir klasöre kopyalayın.
  • cihazı xcode ile bağlayın
  • Ardından pencereye gidin -> cihazları seçin -> cihaz günlüklerini görüntüleyin
  • Ardından bu cihazı seçin, tüm günlükleri silin.
  • cihaz günlüğü bölümünde kilitlenmenizi sürükleyip bırakın. otomatik olarak çökmeyi sembolize eder. sadece rapora sağ tıklayın ve dışa aktarın.

mutlu kodlama,
Riyaz


en iyi kısa ve tatlı ans, bu ans yazılan her adımı izleyin. geliştirilmemiş ve tamamen sembolik arasındaki farkı bulmak için bu bağlantıyı takip edin .apple.com/library/content/technotes/tn2151 /
Ninad Kambli

1

Tüm kilitlenme günlüklerimi simgeleyen bir komut dosyasını tercih ederim .

Ön koşullar

Bir klasör oluşturun ve 4 şey koyun:

  1. symbolicatecrash perl betiği - konumunu söyleyen birçok SO yanıtı var

  2. Kazalarla eşleşen yapının arşivi (Xcode Organizer'dan. Basit Show in Finderve kopyala) [Bunun gerekli olduğundan emin değilim]

  3. Tüm xccrashpointpaketler - (Xcode Organizer'dan. Show in Finder, Dizindeki tüm paketleri veya simgelemek istediğiniz tek xccrashpoint'i kopyalayabilirsiniz)

  4. Bu kısa komut dosyasını dizine ekleyin:

    #!/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 ""

Senaryo

Komut dosyasını çalıştırdığınızda 2 dizin alırsınız.

  1. allCrashes- tüm iţlerden bütün kazalar xccrashpointorada olacak.

  2. symboledCrashes - aynı çöküyor ama şimdi tüm sembollerle.

  3. komut dosyasını çalıştırmadan önce dizini eski çökmelerden temizlemeniz GEREKMEZ. otomatik olarak temizlenir. iyi şanslar!


1

Önerilen alternatiflerin çoğunun en son XCode'da (Xcode 10 ile test edildi) işe yaramadığını öğrendim. Örneğin, Xcode -> Organizer -> Cihaz günlükleri görünümünde hiç şans sürükleme bırakarak .crash günlükleri yoktu.

Symbolicator aracını kullanmanızı öneririm https://github.com/agentsim/Symbolicator

  • Git klonu Symbolicator deposu ve Xcode ile derleyin ve çalıştırın
  • .Crash dosyasını (dosya yalvarırken yığın izlemeli ascii dosyası) ve .xarchive'ın geçici olarak aynı klasöre kilitlenmesini kopyalama
  • .Crash dosyasını Dock'taki Symbolicator simgesine sürükleyip bırakın
  • 5-30 saniyede sembolik kilitlenme dosyası .crash ve .xarchive ile aynı klasörde üretilir.

0

Çökmeleri simgelemek için Spotlight'ın, Apple'a gönderdiğiniz ikili dosya ile aynı zamanda oluşturulan .dSYM dosyasını bulabilmesi gerekir. Sembol bilgilerini içerdiğinden, mevcut değilse şansınız kalmaz.


Soruyu okursanız, ikili dosya gönderildiğinde aynı anda oluşturulan orijinal dSYM dosyasını kaydettiğimi belirttim.
Jasarien

0

Ben burada hiçbir şey "sadece çalışmak" gibi görünüyor aslında biraz huysuz var bu yüzden bazı araştırma yaptım ve sonuç:

Kurulum: Raporları alan QuincyKit arka ucu. Hiçbir sembolizasyon kurulmadı çünkü çalışmasını sağlamak için ne yapmamı önerdiklerini bile anlamaya başlayamadım.

Düzeltme: Kilitlenme raporlarını sunucudan çevrimiçi olarak indirin. Bunlara 'kilitlenme' denir ve varsayılan olarak ~ / Downloads / klasörüne gider. Bunu göz önünde bulundurarak, bu komut dosyası "doğru olanı yapacak" ve kilitlenme raporları Xcode (Organizatör, cihaz günlükleri) içine girecek ve sembolizasyon yapılacaktır.

Senaryo:

#!/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"

QuincyKit / PLCR kullanıyorsanız, iki şey yaparak Xcode Organizer'da sürükleyip bırakabileceğiniz yere otomatikleştirilebilir.

Öncelikle, admin / actionapi.php ~ line 202 uzak komut dosyasını düzenlemeniz gerekir. Zaman damgasını doğru bulmuyor gibi görünüyor, bu nedenle dosya Xcode'un tanımadığı 'kilitlenme' adıyla bitiyor (bir şey istiyor) dot crash) ile ilişkili olan kısmını dışarı aktarmak suretiyle yedek oluşturmanız gerekir:

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

İkincisi, QuincyKit BWCrashReportTextFormatter.m ~ hattı 176, değişime iOS tarafında @"[TODO]"etmek @"TODO"kötü karakterler etrafında almak.


0

atos kullanımdan kaldırılıyor, bu nedenle OSX 10.9 veya daha yenisini çalıştırıyorsanız

xcrun atos

Uyarı: / usr / bin / atos hareket ediyor ve gelecekteki bir OS X sürümünden kaldırılacak. Artık çağrılan Xcode geliştirici araçlarında kullanılabilir:xcrun atos


Apple, DWARF formatının araçların her sürümüyle (özellikle Swift'in ortaya çıkmasıyla anlam ifade ediyor) dönüşmesine izin veriyor gibi görünüyor, böylece aracı dağıtımına taşıyorlar.
David Gish

0

Orijinal bir uygulama yükleme ikili reddindeki hataları belirlemek için Textwrangler'ı kullanmayı seviyorum. (Kilitlenme verileri itunesConnect hesabınızda bulunur.) Yukarıdaki Sachin yöntemini kullanarak original.crash dosyasını TextWrangler'a kopyalarım, sonra oluşturduğum symbolicatecrash dosyasını başka bir TextWrangler dosyasına kopyalarım. İki dosyayı karşılaştırmak farkları belirler. Sembolik dosyada, dosya ve sorunların satır numarasını gösteren farklılıklar olacaktır.


-2

Kilitlenme günlüklerini denetlemek için Google Crashlytics'i kullanıyoruz, bu his çok zamanında ve kullanımı rahat.

Belge bağlantıları : https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms

Eksik dSYMs Fabric hakkında her şey, projenizin dSYM'sini otomatik olarak yüklemek için bir araç içerir. Araç, başlangıç ​​işlemi sırasında Komut Dosyası Oluşturma Safhasına eklenen / run komut dosyası aracılığıyla yürütülür. Bununla birlikte, benzersiz proje yapılandırmaları nedeniyle veya uygulamanızda Bitcode kullanıyorsanız dSYM yüklemelerinin başarısız olduğu belirli durumlar olabilir. Bir yükleme başarısız olduğunda, Crashlytics kilitlenmeleri sembolize edemez ve görüntüleyemez ve Kumaş kontrol panelinizde "Eksik dSYM" uyarısı görünür.

Eksik dSYM'ler, aşağıda açıklanan adımları izleyerek manuel olarak yüklenebilir.

Not: Otomatik dSYM yükleme aracına alternatif olarak, Fabric, projenizin oluşturma işleminin bir parçası olarak çalışacak şekilde elle yapılandırılabilen bir komut satırı aracı (yükleme sembolleri)) sağlar. Yapılandırma talimatları için aşağıdaki yükleme sembolleri bölümüne 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.