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:
- Çö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ı.
.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.
.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.
symbolicatecrashKomutun nerede bulunacağını , nasıl kullanılacağını ve sembolizasyon için gerekli dSYM dosyasının nasıl bulunacağını listeliyorum.