DSYM nedir ve nasıl kullanılır? (iOS SDK)


117

Bazen derleyici .dSYM dosyaları üretir. Sanırım bu hata ayıklama ile ilgili bir dosya, ancak ne olduğunu ve nasıl kullanılacağını bilmiyorum.

.DSYM nedir? Bunu nasıl kullanabilirim?

Yanıtlar:


160

dSYM dosyaları, uygulamanız için hata ayıklama sembollerini depolar

Crashlytics gibi hizmetler, kilitlenme günlüklerindeki sembolleri uygun yöntem adlarıyla değiştirmek için kullanır, böylece okunabilir ve mantıklı olacaktır.

DSYM'yi kullanmanın yararı, Uygulamanızı sembollerle birlikte göndermenize gerek kalmamasıdır, bu da onu tersine mühendislik yapmayı zorlaştırır ve ayrıca ikili boyutunuzu azaltır.

Çökme günlüğünü sembolize etmek için kullanmak için, çökme günlüğünü, uygulamanın ikili dosyasını derleyen makinenin düzenleyicisindeki aygıtın aygıt günlüklerine (dSYM'yi depolayan bir makine) sürüklemeniz gerekir.

DSYM'ye sahipseniz ancak makineye sahip değilseniz, uygulama ikili dosyasını derlediyseniz, dSYM'yi makineye kurmak için bu bağlantıdaki talimatları izleyin.

Daha fazla bilgi için lütfen apple teknik notu TN2151'e bakın


1
Uygulama mağazası ikili programına sahip dSYM'leri dahil etmemek, Crashlytics'in çökmeleri günlüğe kaydedememesine neden olur mu?
genaks

Yani 'Uygulama sembollerini dahil et ...' kutusunun işaretini kaldırmak güvenli mi?
genaks

2
apple connect içinde kilitlenme günlüklerini görebilmek istiyorsanız, uygulamayı uygulama mağazasına yüklerken uygulama sembollerini ekleyebilirsiniz. crashlytics kullanıyorsanız, bunu yapmak zorunda değilsiniz, ancak uygulama sembollerini (dsym dosyası) eklemek ve Uygulamaya yüklemede "uygulama sembollerini dahil et ..." seçeneğini işaretleyerek Apple'a göndermek zarar vermez Mağaza sihirbazı
Tomer Even

1
Mümkünse kullanıcıyı birkaç MB kurtarmayı düşünüyordum
genaks

Crashlytics geliştiricilerinden - twittercommunity.com/t/…
genaks

1

dSYMXcode Hata Ayıklama Sembolleri anlamına gelir, örneğin bir yığın izinin kodunu okunabilir bir biçime çözebilen bir tür eşleme dosyasıdır. Bir Bundlesonraki yapıya sahip bir:

Örneğin bir kilitlenme günlüğü şuna benzer:

//before
0   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
1   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
2   libswiftCore.dylib              0x000000018f3c8844 0x18f394000 + 215108
3   libswiftCore.dylib              0x000000018f3a74e0 0x18f394000 + 79072
4   libswiftCore.dylib              0x000000018f3ab0d8 0x18f394000 + 94424
5   F49088168M                      0x00000001045ac750 0x104590000 + 116560
6   F49088168M                      0x00000001045b7904 0x104590000 + 162052
7   F49088168M                      0x00000001045b897c 0x104590000 + 166268
8   F49088168M                      0x000000010459d914 0x104590000 + 55572
9   F49088168M                      0x00000001045a0e70 0x104590000 + 69232
10  F49088168M                      0x00000001045a0f4c 0x104590000 + 69452

dSYM eylemde

//after Symbolicating(dSYM is used)
0   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
1   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
2   libswiftCore.dylib              0x000000018f3c8844 _assertionFailure+ 215108 (_:_:file:line:flags:) + 468
3   libswiftCore.dylib              0x000000018f3a74e0 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 79072 (_:wasNativeTypeChecked:) + 208
4   libswiftCore.dylib              0x000000018f3ab0d8 Array.subscript.getter + 84
5   F49088168M                      0x00000001045ac750 static ELM327ResponseManager.getResponse(responseStr:obd2Protocol:) + 116560 (ELM327ResponseManager.swift:27)
6   F49088168M                      0x00000001045b7904 ELM327Client.dataInput(_:characteristicUuidStr:) + 162052 (ELM327Client.swift:56)
7   F49088168M                      0x00000001045b897c protocol witness for BLEClientInputPort.dataInput(_:characteristicUuidStr:) in conformance ELM327Client + 166268 (<compiler-generated>:0)
8   F49088168M                      0x000000010459d914 BLEConnection.peripheralDataReceived(data:characteristicUuidStr:) + 55572 (BLEConnection.swift:124)
9   F49088168M                      0x00000001045a0e70 BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69232 (BLEConnection.swift:293)
10  F49088168M                      0x00000001045a0f4c @objc BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69452 (<compiler-generated>:0)

Varsayılan olarak dSYM, bir yayın sürümü için varsayılan olarak oluşturulur . Kontrol edebilirsin:

Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File

ProductsKlasörde bulabileceğiniz sonuç konumu

Kullanarak dSYMmanuel olarak dosya oluşturmak .appiçindsymutil

dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM

Çökmeyi sembolize etmek için symbolicatecrash

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "<path>/F49088168M-2020-06-04-212904.crash" "<path>/F49088168M.app.dSYM" > symbolicated.crash

dSYMKullanarak manuel olarak açmak içindwarfdump

dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM

sonuç şuna benzer:

0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"

[Kelime]

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.