dSYM은 무엇이며 어떻게 사용합니까? (iOS SDK)


117

때때로 컴파일러는 .dSYM 파일을 생성합니다. 이것은 디버깅 관련 파일이라고 생각하지만 그것이 무엇인지, 어떻게 사용하는지 모르겠습니다.

.dSYM이란 무엇입니까? 어떻게 사용하나요?

답변:


160

dSYM 파일은 앱의 디버그 기호를 저장합니다.

crashlytics와 같은 서비스는이를 사용하여 충돌 로그의 기호를 적절한 메서드 이름으로 대체하여 읽기 쉽고 의미가 있습니다.

dSYM 사용의 이점은 앱을 기호와 함께 제공 할 필요가 없기 때문에 리버스 엔지니어링이 어렵고 바이너리 크기도 줄어든다는 것입니다.

충돌 로그를 기호화하는 데 사용하려면 앱 바이너리를 컴파일 한 시스템 (dSYM을 저장하는 시스템)의 오거나이저에있는 장치의 장치 로그로 충돌 로그를 끌어 야합니다.

dSYM이 있지만 머신이없는 경우 컴파일 된 앱 바이너리 가이 링크 의 지침에 따라 머신에 dSYM을 설치합니다.

자세한 내용은 Apple 기술 노트 TN2151을 참조하십시오.


1
앱 스토어 바이너리에 dSYM을 포함하지 않으면 Crashlytics에서 비정상 종료를 기록 할 수 없나요?
genaks

그렇다면 '앱 기호 포함 ...'확인란을 선택 취소해도 안전합니까?
genaks

2
apple connect 내부에서 충돌 로그를보고 싶다면 앱을 앱 스토어에 업로드 할 때 앱 심볼을 포함 할 수 있습니다. crashlytics를 사용하는 경우이를 수행 할 필요는 없지만 앱 기호 (dsym 파일)를 포함하고 앱에 업로드 할 때 "앱 기호 포함 ..."을 선택하여 Apple에 전송하는 것은 문제가되지 않습니다. 스토어 마법사
토 메르에도

1
할 수 있다면 사용자에게 몇 MB를 절약 할 생각이었습니다
genaks

- Crashlytics 개발자에서 twittercommunity.com/t/...
genaks

1

dSYMXcode Debugging Symbols의 약자이며, 예를 들어 스택 추적을 읽을 수있는 형식으로 디코딩 할 수있는 일종의 매핑 파일입니다. Bundle다음 구조의 a 입니다.

예를 들어 충돌 로그는 다음과 같습니다.

//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 행동에

//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)

기본적 dSYM으로 릴리스 버전에 대해 기본적 으로 생성됩니다 . 다음과 같이 확인할 수 있습니다.

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

찾을 수있는 결과 위치 Products폴더

사용 dSYM에서 수동으로 파일 을 생성하려면.appdsymutil

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

다음을 사용하여 충돌을 상징하려면 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

다음을 dSYM사용하여 수동으로 열려면dwarfdump

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

결과는 다음과 같습니다.

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

[어휘]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.