iPhone 앱 충돌 보고서 상징


433

iPhone 앱의 충돌 보고서를 시도하고 상징하려고합니다.

iTunes Connect에서 충돌 보고서를 검색했습니다. App Store에 제출 한 응용 프로그램 바이너리가 있으며 빌드의 일부로 생성 된 dSYM 파일이 있습니다.

스포트 라이트로 색인이 생성 된 단일 디렉토리 안에 이러한 파일을 모두 가지고 있습니다.

지금 무엇?

나는 호출을 시도했다 :

symbolicatecrash crashreport.crash myApp.app.dSYM

충돌 보고서에있는 것과 동일한 텍스트를 기호화하지 않고 시작합니다.

내가 뭔가 잘못하고 있습니까?


3
iPhone SDK 에서 내 대답을 볼 수도 있습니다. symbolicatecrash.sh는 어디에 있습니까? . symbolicatecrash명령 을 찾을 수있는 위치 , 사용 방법 및 기호화에 필요한 dSYM 파일을 찾는 방법을 설명합니다.
Sam

6
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platforms/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
logancautrell

5
도움이 될만한 스크립트를 만들었습니다 : github.com/amleszk/scripts/blob/master/…
amleszk

1
누구나 어디에서 * .app, * .dSYM 및 충돌 로그를 얻을 수 있는지 궁금하다면 아래 답변을 확인하십시오.
Sam B

답변:


689

애플의 충돌 보고서를 분석하는 단계 :

  1. appstore로 푸시 된 릴리스 .app 파일, 릴리스시 작성된 .dSYM 파일을 복사하고 충돌 보고서가 APPLE에서 FOLDER 로 수신됩니다 .

  2. 터미널 응용 프로그램을 열고 위에서 만든 폴더로 이동하십시오 ( cd명령 사용 )

  3. 를 실행하십시오 atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. 메모리 위치는 보고서에 따라 앱이 중단 된 위치 여야합니다.

전의: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

이것은 정확한 줄, 메소드 이름을 표시하여 충돌을 일으켰습니다.

전의: [classname functionName:]; -510

상징적 인 IPA

IPA를 상징화하는 데 사용한다면 확장자 .ipa의 이름을 .zip으로 바꾸고 추출하면 앱이 포함 된 페이로드 폴더를 얻을 수 있습니다. 이 경우 .dSYM 파일이 필요하지 않습니다.

노트

앱 바이너리에 심볼이 제거되지 않은 경우에만 작동합니다. 기본적으로 릴리스 빌드는 심볼을 제거했습니다. 프로젝트 빌드 설정 "복사 중 스트립 디버그 기호"에서 NO로 변경할 수 있습니다.

자세한 내용은이 게시물을 참조하십시오


12
@NaveenShan 답변에 대한 팁만으로 실제 사례가이를 수행 atos -o myApp.app/Contents/MacOS/myApp 0x0000000100001f2c 할 수 있습니다. -[HUDWindow sizedHUDBackground] (in myApp) + 1197
loretoparisi

3
그래도 어느 주소를 사용하십니까? 로그에는 각 함수 다음에 두 개의 열 열 주소가 있고 두 번째에는 +와 오프셋이 있습니다. 0x332da010 0x332d9000 + 4112처럼
Oscar

7
@OscarGoldman 두 번째 주소 예 :-0x332da010 0x332d9000 + 4112. 0x332d9000을 사용하십시오.
Naveen Shan

4
또한 주소없이 사용하면 여러 위치를 하나씩 제출하여 여러 위치를 분석 할 수 있습니다.
Paul Ardeleanu

42
이 답변에는 여러 가지 문제가 있습니다. 1. 앱 바이너리에 심볼이 제거되지 않은 경우에만 작동합니다. 릴리스 빌드는 기본적으로 제거됩니다. 2. 기호가 사용 가능하더라도 행 번호를 표시하지 않습니다. dSYM을 상징하는 것만이 그것을 제공 할 것입니다. 3. 스택 추적에 표시된 메모리 주소를 단순히 사용할 수 없으며, 주소는 앱이로드되는 시작 메모리 주소에 대해 정규화되어야합니다. 자세한 내용은이 답변을 참조하십시오 : stackoverflow.com/questions/13574933/…
Kerni

173

충돌 로그를 상징화하기 위해 여기에 모든 대답을 읽은 후에 (그리고 마침내 성공합니다) 나는 symbolicatecrash의 호출이 상징적 인 출력을 생성하지 않는 이유를 결정하기 위해 실제로 중요한 몇 가지 요점이 있다고 생각합니다.

충돌 로그를 상징화 할 때 함께 맞아야하는 3 가지 자산이 있습니다.

  1. example.crashXCode의 Organizer에서 내보내거나 iTunes Connect에서받은 충돌 로그 파일 자체 (예 :).
  2. 충돌 로그에 속하는 앱 바이너리가 포함 된 .app패키지 (예 example.app:) 당신이있는 경우 .ipa(즉, 패키지 example.ipa) 다음은 추출 할 수 있습니다 .app의 압축을 해제하여 패키지를 .ipa패키지 (즉 unzip example.ipa). 그 후 .app패키지는 추출 된 Payload/폴더에 있습니다.
  3. .dSYM디버그 기호를 포함하는 패키지 (예 example.app.dSYM)

기호화를 시작하기 전에 모든 해당 아티팩트가 일치하는지 확인해야합니다. 이는 충돌 로그가 사용자가 보유한 2 진에 속해 있고 디버그 기호가 해당 2 진 빌드 중에 생성 된 것임을 의미합니다.

각 바이너리는 충돌 로그 파일에서 볼 수있는 UUID에 의해 참조됩니다.

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

이 추출에서 충돌 로그는 UUID를 사용하여 example.app/example이라는 앱 이진 이미지에 속합니다 aa5e633efda8346cab92b01320043dc3.

dwarfdump로 가지고있는 바이너리 패키지의 UUID를 확인할 수 있습니다.

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

그런 다음 디버그 기호가 해당 바이너리에 속하는지 확인해야합니다.

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

이 예에서는 모든 자산이 함께 맞으며 스택 추적을 상징 할 수 있어야합니다.

symbolicatecrash스크립트 진행 :

Xcode 8.3에서는 다음을 통해 스크립트를 호출 할 수 있어야합니다.

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

존재하지 않으면 find . -name symbolicatecrashXcode.app 디렉토리에서 a 를 실행 하여 찾을 수 있습니다.

보시다시피 더 이상 매개 변수가 제공되지 않습니다. 따라서 스크립트는 스포트라이트 검색을 실행하여 애플리케이션 바이너리 및 디버그 기호를 찾아야합니다. 특정 인덱스를 사용하여 디버그 기호를 검색합니다 com_apple_xcode_dsym_uuids. 이 검색을 직접 수행 할 수 있습니다.

mdfind 'com_apple_xcode_dsym_uuids = *'

각하

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

첫 번째 스포트라이트 호출은 모든 색인화 된 dSYM 패키지를 제공하고 두 번째 스포트라이트 호출은 .dSYM특정 UUID를 가진 패키지를 제공합니다 . 스포트라이트가 .dSYM패키지를 찾지 못하면 symbolicatecrash둘 중 하나도 아닙니다. 예를 들어 ~/Desktop스포트라이트 의 하위 폴더에서이 모든 작업을 수행하면 모든 것을 찾을 수 있어야합니다.

경우 symbolicatecrash귀하의 발견 .dSYM패키지를 다음에 같은 라인이 있어야한다 symbolicate.log:

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

.app패키지 를 찾기 위해 다음과 같은 스포트라이트 검색이 호출됩니다 symbolicatecrash.

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

경우 symbolicatecrash귀하의 발견 .app패키지에 다음 추출물이 있어야한다 symbolicate.log:

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

이러한 모든 리소스가 발견 symbolicatecrash되면 기호화 된 버전의 충돌 로그를 인쇄해야합니다.

그렇지 않은 경우 dSYM 및 .app 파일을 직접 전달할 수 있습니다.

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

참고 : 기호화 된 역 추적은 아닌 터미널로 출력됩니다 symbolicate.log.


나는 모든 내가이 얻을 그러나 파일없이 symbolicated 출력을 찾을 수 있습니다No crash report version in testlog.crash at /usr/bin/symbolicatecrash line 921.
제레

1
이것은 정말로 도움이되었다! 필자의 경우 .app 파일의 이름은 실행 파일 이름과 다릅니다 (이유는 모르겠지만 Xcode 에서이 방법으로 빌드되었습니다). XCode 아카이브에서 .app 파일의 이름을 바꾼 후 기호화가 작동했습니다.
Hrissan

29
이것은 훌륭한 설명이며 최고 답변 IMO가되어야합니다. 감사합니다. DEVELOPER_DIR스크립트가 다음과 같이 불평하면 환경 변수 를 설정해야 할 수도 있습니다 export DEVELOPER_DIR=`xcode-select --print-path` . 이 줄을 내에 추가했습니다 ~/.bash_profile.
Eliot

1
Xcode 5의 경우 <PATH_TO_Xcode.app> /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash
Eliot

1
symbolicate crash에는 몇 가지 유용한 옵션이 있습니다. <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 (3.2.2)를 사용하면 충돌 보고서를 Xcode Organizer의 장치 로그 섹션으로 끌어서 놓을 수 있으며 자동으로 기호로 표시됩니다. Build & Archive (Xcode 3.2.2의 일부)를 사용하여 해당 버전의 앱을 빌드 한 경우 이것이 가장 효과적이라고 생각합니다


3
새로 설치하면 Xcode4와 함께 작동하지 않습니다. 새로운 버그 인 것 같습니다 :(
Adam

1
이것이 당신이 가진 동일한 문제를 해결하는지 확실하지 않지만 누군가가 상징적 인 스크립트 github.com/nskboy/symbolicatecrash-fix YMMV를 패치했습니다 :)
Alan Rogers

2
이 팁은 Xcode 4.2에서 작동합니다. 오거나이저의 장치 로그에 크래시 로그를 배치하십시오. Organizer를 다시 시작하면 기호화 된 충돌 로그가 나타납니다. 감사.
harshit2811

2
충돌 로그를 얻기 위해 다른 컴퓨터에서 아카이브 파일을 가져올 때이 기능이 작동하지 않았습니다. :(이 때문에 파일을 수동으로 상징화해야했습니다. 상징화를 수행하는 방법에 대한 단계는 여기에서 찾을 수 있습니다. iPhone SDK : symbolicatecrash.sh는 어디에 있습니까?
Sam

3
iTunes Connect에서 다운로드 한 충돌 보고서로는 작동하지 않습니다.
드미트리

72

다음 단계를 사용하여 성공적으로 수행했습니다.

1 단계 : 바탕 화면에 폴더를 만들고 이름을 "CrashReport"로 지정하고 세 개의 파일 ( "MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash")을 넣습니다.

2 단계 : Finder를 열고 Xcode 응용 프로그램을 찾을 수있는 응용 프로그램으로 이동하십시오. 이곳을 마우스 오른쪽 버튼으로 클릭하고 "패키지 내용보기"를 클릭하십시오.이 간단한 경로를 따라 가십시오. "내용-> 개발자-> 플랫폼-> iPhoneOS.platform-> 개발자 -> 라이브러리 -> PrivateFrameworks-> DTDeviceKit.framework- > 버전-> A-> 자원"

또는

"내용-> 개발자-> 플랫폼-> iPhoneOS.platform-> 개발자 -> 라이브러리 -> PrivateFrameworks-> DTDeviceKitBase.framework- > 버전-> A-> 자원"

또는

Xcode 6 이상의 경우 경로는 Applications / Xcode.app / Contents / SharedFrameworks / DTDeviceKitBase.framework / Versions / A / Resources입니다.

"symbolicatecrash"파일을 찾으면이를 복사하여 "CrashReport"폴더에 붙여 넣으십시오.

3 단계 : 터미널을 시작하고이 3 개의 명령을 실행하십시오.

  1. cd / Users / mac38 / Desktop / CrashReport를 입력하고 Enter 버튼을 누릅니다

  2. DEVELOPER_DIR = "/ Applications / Xcode.app / Contents / Developer"를 내보내고 Enter를 누르십시오.

  3. ./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM을 입력하고 Enter Now를 누르십시오. (참고 : 6.4 이상의 버전에는 -A 옵션이 없습니다. 그냥 두십시오).

3
DTServiceKit의 경우 Applications / Xcode.app / Contents / SharedFrameworks
Ryan Heitner의

3
감사합니다 ... 2015 년 4 월 9 일 현재, 이것은 저에게 완벽하게 일한 것입니다. 한 가지, 내가 Unknown option: Asymbolicatecrash를 얻었 지만 어쨌든 프로세스가 실행되었다
Matt Fiocca

1
이 답변에 천 점을 줄 수 있기를 바랍니다. 이 주제에 대한 많은 방법이 있습니다 ... 그러나 이것은 가장 낮은 수준에서 작동하므로 항상 작동합니다. 모든 단계를 밟는 것은 뒤쪽의 고통이지만, 다른 모든 것이 실패하면이 작업을 수행합니다.
채드 로빈슨

35

XCode를 사용하여 충돌 보고서를 자동으로 상징하는 단계 :

XCODE 9 용으로 업데이트

  1. 연결 어떤 (예 물리적 하나, 그래 난이 바보 알고) Mac에 iOS 장비를

  2. "창"메뉴에서 "장치"를 선택하십시오 여기에 이미지 설명을 입력하십시오

  3. 왼쪽에서 기기를 클릭하고 오른쪽에서 기기 로고보기 여기에 이미지 설명을 입력하십시오

  4. 기다림. 표시되는 데 1 분 정도 걸릴 수 있습니다. 어쩌면 일을 Command-A한 다음 Delete이 속도를 높일 것입니다.

  5. 문서화되지 않은 중요한 단계 : iTunesConnect에서받은 충돌 보고서.txt.crash확장에서확장으로이름을 바꿉니다.

  6. 충돌 보고서를 왼쪽의 해당 영역으로 드래그하십시오. 여기에 이미지 설명을 입력하십시오

그런 다음 Xcode는 충돌 보고서를 상징하고 결과를 표시합니다.

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


1
공식적인 Apple 절차입니다. 답이되어야합니다.
Giammy

2
감사합니다. 지금 사진을 추가하고 있습니다. SUPER UNDOCUMENTED 단계도 포함되었습니다. 나는 빨간 텍스트의 자식을 만들고 거기에 그것을 연결하여 실제로 눈에 띄도록 생각했습니다. 그런 다음 그 생각을 멈췄습니다.
윌리엄 Entriken

1
감사합니다! 다른 답변은 실제로 사용하는 장치가 충돌이 발생한 장치 (또는 장치 유형) 일 필요는 없다고 말합니다.
galactikuh

나를 위해 그것은 다시 상징하지 않기 때문에 빠른 참고. 또한 Organizer를 열고 Archives의 빌드를 클릭 한 다음 Debug Symbols 다운로드를 클릭하십시오. 그런 다음 장치 로그보기에서 다시 상징화 할 수 있습니다. 검토가 거부 된 후 Apple에서 다운로드 한 충돌 로그를위한 것입니다.
gregthegeek

28

내 앱에서 Airbrake를 사용하는데, 이는 원격 오류 로깅을 상당히 잘 수행합니다.

백 트레이스에 필요한 경우 아토스로 상징화하는 방법은 다음과 같습니다.

  1. Xcode (4.2)에서 Organizer로 이동하여 .ipa 파일이 생성 된 아카이브를 마우스 오른쪽 버튼으로 클릭하십시오.

  2. 터미널에서 예를 들어 xcarchive로 cdMyCoolApp 10-27-11 1.30 PM.xcarchive

  3. 다음을 입력하십시오 atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp' (작은 따옴표를 잊지 마십시오)

  4. 나는 그 전화에 내 상징을 포함시키지 않았다. 당신이 얻는 것은 빈 줄에 블록 커서입니다.

  5. 그런 다음 해당 블록 커서에서 심볼 코드를 복사 / 붙여 넣기하고 Enter 키를 누릅니다. 다음과 같은 것을 보게 될 것입니다 :

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

  6. 블록 커서로 돌아가서 다른 기호를 붙여 넣을 수 있습니다.

첫 번째 비트를 다시 입력하지 않고 하나의 항목을 역 추적 할 수 있다는 것은 시간을 절약 해주는 좋은 방법입니다.

즐겨!


28

또한 상징적 충돌을 실행하기 전에 dsym, 앱 번들 및 충돌 로그를 동일한 디렉토리에 넣습니다.

그런 다음 .profile에 정의 된이 함수를 사용하여 symbolicatecrash 실행을 단순화합니다.

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

거기에 추가 된 주장이 도움이 될 수 있습니다.

다음 명령을 실행하여 스포트라이트가 dysm 파일을 "보는"지 확인할 수 있습니다.

mdfind 'com_apple_xcode_dsym_uuids = *'

디렉토리에있는 dsym을 찾으십시오.

참고 : 최신 Xcode부터 더 이상 개발자 디렉토리가 없습니다. 이 유틸리티는 여기에서 찾을 수 있습니다.

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers‌ions/A/Resources/symbolicatecrash


1
나는 mdfind 출력을 보았고 dSYM 파일은 분명히 스포트라이트로 볼 수 있습니다. 그러나 symbolicatecrash 스크립트는 여전히 충돌 보고서 자체와 다른 것을 출력하지 않습니다. 당신이 제공 한 주장을 사용하더라도.
Jasarien

이 스크립트는 dsym을 찾을 수없는 경우 처음에 경고 텍스트를 생성해야합니다. 해당 텍스트를 찾고 그 내용을 볼 수 있습니까?
Kendall Helmstetter Gelner

또한 "."를 추가하십시오. 명령 뒤에 "symbolicatecrash -A -v MyApp.crashlog"가됩니다. . 그렇게하지 않으면 현재 디렉토리를 강제로 검색합니다.
Kendall Helmstetter Gelner

"/ usr / bin / xcode-select"를 실행할 수 없음 : /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/iPhoneRemoteDevice.xcodeplugin/Contents/Resources/에 해당 파일 또는 디렉토리가 없습니다. symbolicatecrash line 49. "
bpapa


21

xcode 6.1.1에 대한 간단하고 업데이트 된 답변.

단계

1. Xcode> 창> 장치.

2. DEVICES 섹션의 장치 목록에서 장치를 선택하십시오.

3. View Device Logs (장치 로그보기)를 선택하십시오.

4. All Logs (모든 로그) 섹션에서 보고서를 직접 끌어다 놓을 수 있습니다.

5. Xcode는 자동으로 충돌 보고서를 상징합니다.

6. 충돌 보고서에 언급 된 날짜 / 시간과 날짜 / 시간을 일치시켜 Symbolicated 충돌 보고서를 찾을 수 있습니다.


3
Apple Resolution Center에서 다운로드 한 충돌 보고서의 확장자는 보통 .txt입니다. 이름을 .crash로 바꾸십시오. 그렇지 않으면 장치 로그에서 추가를 거부 할 수 있습니다. 현재 XCode 6.3.1에서 잘 작동
Tony

3
공식적인 Apple 절차입니다. 답이되어야합니다. Apple 링크 : 기술 노트 TN2151 : iOS 애플리케이션 충돌 보고서 이해 및 분석
Giammy

Apple / iTunesConnect에서 충돌이 발생한 경우 어떻게해야합니까? 다시 말해, 충돌이 발생한 장치를 실제로 알지 못합니까?
galactikuh

14

지금은 몇 년 동안 앱을 개발했지만, 이진 파일을 디버깅하는 것은 처음이었고 모든 파일이 어디에 있는지 알아내는 완전한 NOOB처럼 느껴졌습니다. * .app * .dSYM 및 크래쉬 로그는 어디에 있습니까? 이해하기 위해 여러 게시물을 읽어야했습니다. 그림은 천 단어의 가치가 있으며이 게시물이 미래에 다른 사람을 돕기를 바랍니다.

1- 먼저 itunesconnect로 이동하여 충돌 로그를 다운로드하십시오. 참고 : 대부분의 경우 "보고서를 표시하기 위해 너무 적은 보고서가 제출되었습니다"와 같은 메시지가 표시 될 수 있습니다. 기본적으로 충분하지 않은 사용자가 충돌 로그 보고서를 Apple에 제출 한 경우 해당 시점에서 많은 작업을 수행 할 수 없습니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

2- 이제 바이너리를 Apple에 제출 한 후 코드를 변경하지 않은 경우 해당 프로젝트에 대해 Xcode를 시작하고 Product-> Archive를 다시 수행하십시오. 그렇지 않으면 최신 제출 바이너리를 찾아 마우스 오른쪽 버튼으로 클릭하십시오.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


8

Xcode 4.2.1에서 Organizer 를 연 다음 Library / Device Logs 로 이동 하여 .crash 파일을 충돌 로그 목록으로 드래그하십시오. 몇 초 후에 그것은 당신을 위해 상징 될 것입니다.

원래 빌드가 아카이브 된 것과 동일한 Xcode 인스턴스를 사용해야합니다 (즉, 빌드의 아카이브가 Organizer에 있어야 함 ).


8

Xcode 4를 사용하면 작업이 훨씬 간단 해집니다.

  • 오픈 오거나이저 ,
  • 라이브러리를 클릭하십시오 | 왼쪽 열의 장치 로그
  • 화면 하단의 " 가져 오기 "버튼을 클릭하십시오 ...

그리고 voilà. 로그 파일을 가져 와서 자동으로 심볼 화합니다. Xcode- > 제품-> 아카이브를 사용하여 빌드를 먼저 아카이브했습니다 .


1
이상하게도 가져 오기는 효과가 없습니다. .app, .dSYM 및 .crash를 넣고 .crash 파일에서 symbolicatecrash를 실행하면 (추가 인수없이) 작동하지만 (XCode 4)
Russian

7

마법의 Xcode Organizer는 내 앱을 상징하는 마법이 아닙니다. 실패한 앱 제출로 인해 Apple에서 가져온 충돌 보고서에 대한 기호가 전혀 없습니다.

명령 줄을 사용하여 충돌 보고서를 .app 파일 (저장소에 제출 한 파일) 및 .dSYM 파일과 같은 폴더에 넣었습니다.

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

이것은 핵심 기초 코드가 아닌 내 응용 프로그램에 대한 기호 만 제공했지만 Organizer가 제공하는 숫자 덤프보다 낫고 내 응용 프로그램의 충돌을 찾아 수정하기에 충분했습니다. 누구나 재단 심볼을 얻기 위해 이것을 확장하는 방법을 알고 있다면 높이 평가할 것입니다.


핵심 재단 dSYM의 경우 (아마도 중국인) 사람이 공유 Google 드라이브에 dSYM을 업로드 한 후 다운로드하여 "devices supported"폴더로 가져 가면 해결됩니다. github.com/Zuikyo/iOS-System-Symbols
harunaga

6

필자의 경우 충돌 보고서를 Mail에서 Organizer로 직접 드래그했습니다. 어떤 이유로 인해 충돌 보고서가 상징화되지 못했습니다 (그 이유를 알고 싶습니다).

충돌 보고서를 먼저 바탕 화면에 복사 한 다음 여기에서 오거나이저로 드래그하면 제대로 상징화됩니다.

매우 구체적인 경우입니다. 그러나 만일을 위해 내가 공유 할 것이라고 생각했다.


나는 이것이 스포트라이트와 관련이 있다고 생각합니다. 주최자가 로그를 보관하는 위치가 스포트라이트로 색인화되지 않았을 가능성이 있습니까?
Jasarien

4

여기 symbolicatecrash와 관련된 또 다른 문제가 있습니다. 번들에 공백이있는 앱 (예 : 'Test App.app')에서는 작동하지 않습니다. 참고 제출할 때 이름에 공백이 있다고 생각하지 않으므로 어쨌든 제거해야하지만 분석이 필요한 충돌이있는 경우 symbolicatecrash (4.3 GM)를 패치하십시오.

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

무엇의 가치를 위해, 나는이에 rdar를 작성하고 그것을 고정 정보 [편집 됨]
알라 스튜어트

4

Airbrake를 사용하는 사람들에게는 위의 확실한 응답이 있지만 조정하지 않으면 나에게 적합하지 않습니다.

일부 메모리 주소에서는 작동하지만 다른 메모리 주소에서는 작동하지 않습니다.

  • 데스크탑 또는 어디서나 새로운 디렉토리 생성
  • Xcode Organizer에서 문제의 아카이브 찾기
  • 파인더에 공개하려면 두 번 탭하세요.
  • 묶음 내용을 표시하려면 두 번 탭하세요.
  • .dSYM 파일 및 .app 파일을 새 디렉토리에 복사
  • 새로운 디렉토리로 cd
  • 이 명령을 실행하십시오 : atos -arch armv7 -o 'Vimeo.app'/ 'Vimeo'
  • 터미널은 대화식 이동을 입력합니다
  • 메모리 주소에 붙여 넣고 Enter 키를 누르면 메서드 이름과 줄 번호가 출력됩니다.
  • 또는 다음 명령을 입력하십시오. atos -arch armv7 -o 'Vimeo.app'/ 'Vimeo'한 주소에 대한 정보 만 얻으려면

4

나를 위해 일한 조합은 다음과 같습니다.

  1. 충돌 보고서가있는 디렉토리에 dSYM 파일을 복사하십시오.
  2. 앱이 포함 된 ipa 파일의 압축을 풉니 다 ( 'unzip MyApp.ipa')
  3. 결과 분해 페이로드의 응용 프로그램 바이너리를 충돌 보고서 및 심볼 파일과 같은 폴더에 복사합니다 ( "MyApp.app/MyApp"과 같은 것)
  4. Xcode의 Organizer 내에서 충돌 보고서 가져 오기 또는 다시 표시

atos를 사용 하여 충돌 보고서에 있던 주소와 오프셋으로 올바른 기호 정보를 해결할 수 없었습니다. 내가 이것을했을 때, 나는 더 의미있는 것을 보았고 합법적 인 스택 추적 인 것 같습니다.


3

제대로 실행 되려면 symbolicatecrash 스크립트를 많이 해킹해야했습니다.

내가 알 수있는 한 symbolicatecrash는 .app가 .dsym과 동일한 디렉토리에 있어야합니다. .dsym을 사용하여 .app를 찾을 수 있지만 dsym을 사용하여 기호를 찾지는 않습니다.

이 패치를 시도하기 전에 심볼 리카 텍 크래시의 사본을 만들어 dsym에 표시해야합니다.

getSymbolPathFor_dsymUuid 함수의 212 행

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

matchesUUID 함수의 265 행

265             return 1;

1

이것은 많은 것을 검색 한 후 전체 충돌 로그 파일을 상징하는 명확한 단계를 찾았습니다.

  • 폴더에 .app, crash_report 및 DSYM 파일을 복사하십시오.
  • 장치를 xcode와 연결
  • 그런 다음 창으로 이동-> 장치 선택-> 장치 로그보기
  • 그런 다음이 장치를 선택하고 모든 로그를 삭제하십시오.
  • 장치 로그 섹션에서 충돌을 끌어다 놓습니다. 충돌을 자동으로 상징합니다. 보고서를 마우스 오른쪽 버튼으로 클릭하고 내보내십시오.

행복한 코딩, 리
야스


가장 짧고 달콤한 ans,이 ans에 쓰여진 모든 단계를 따르십시오. developer.apple.com/library/content/technotes/tn2151/… 이 링크를 따라 기호화되지 않은 기호와 완전히 기호화 된 차이를 찾으십시오.
Ninad Kambli

1

모든 충돌 로그를 상징 하는 스크립트 를 선호합니다 .

전제 조건

폴더를 만들고 4 가지를 넣으십시오.

  1. symbolicatecrash 펄 스크립트-위치를 알려주는 많은 SO 답변이 있습니다.

  2. 충돌과 일치하는 빌드의 아카이브 (Xcode Organizer에서. as as Show in Finderand copy) [필요하지는 않습니다.]

  3. 모든 xccrashpoint패키지-(Xcode Organizer Show in Finder에서 디렉토리의 모든 패키지 또는 기호화하려는 단일 xccrashpoint를 복사 할 수 있음)

  4. 짧은 스크립트를 디렉토리에 추가하십시오.

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

스크립트

스크립트를 실행하면 2 개의 디렉토리가 생깁니다.

  1. allCrashes-모든 것에서 모든 충돌 xccrashpoint이있을 것입니다.

  2. symboledCrashes -동일한 충돌이 발생하지만 이제 모든 기호가 사용됩니다.

  3. 스크립트를 실행하기 전에 이전 충돌에서 디렉토리를 정리하지 않아도됩니다. 자동으로 청소됩니다. 행운을 빕니다!


1

제안 된 대안의 대부분이 최신 XCode (Xcode 10으로 테스트 됨)에서 작동하지 않는 것으로 나타났습니다. 예를 들어 Xcode-> Organizer-> Device logs -view에서 드래그 앤 드롭 .crash 로그가 없었습니다.

Symbolicator 도구 https://github.com/agentsim/Symbolicator를 사용하는 것이 좋습니다.

  • Git clone Symbolicator 리포지토리 및 Xcode로 컴파일 및 실행
  • .crash 파일 (파일을 구걸하는 스택 추적이있는 ASCII 파일) 및 .xarchive를 충돌하는 릴리스의 동일한 임시 폴더로 복사
  • .crash 파일을 Dock의 Symbolicator 아이콘으로 끌어다 놓기
  • 5-30 초 안에 .crash 및 .xarchive와 같은 폴더에 상징적 인 충돌 파일이 생성됩니다.

0

충돌을 상징하기 위해 Spotlight는 Apple에 제출 한 바이너리와 동시에 생성 된 .dSYM 파일을 찾을 수 있어야합니다. 기호 정보가 포함되어 있으므로 사용할 수없는 경우 운이 나빠집니다.


질문을 읽으면 바이너리를 제출할 때 생성 된 원래 dSYM 파일을 저장했다고 진술했습니다.
Jasarien

0

여기서 "아무 작동하지 않는 것"이라는 사실에 대해 조금 심술 got은 결과를 보았습니다.

설정 : 보고서를 수신하는 QuincyKit 백엔드 내가 그것을 제안하기 위해 그들이 무엇을 제안하는지 알아낼 수 없었기 때문에 어떤 상징화도 설정되지 않았습니다.

수정 : 서버에서 온라인으로 충돌 보고서를 다운로드하십시오. 그것들은 '충돌'이라고 불리며 기본적으로 ~ / Downloads / 폴더로 이동합니다. 이를 염두에두고이 스크립트는 "올바른 작업"을 수행하고 충돌 보고서는 Xcode (주최자, 장치 로그)로 이동하여 상징화됩니다.

스크립트 :

#!/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을 사용하는 경우 두 가지 작업을 수행하여 Xcode Organizer에서 끌어서 놓을 수있는 위치로 작업을 자동화 할 수 있습니다.

먼저, 원격 스크립트 admin / actionapi.php ~ line 202를 편집해야합니다. 타임 스탬프를 올바르게 표시하지 않는 것 같습니다. 따라서 파일은 Xcode가 인식하지 못하는 'crash'라는 이름으로 끝나게됩니다. 도트 충돌) :

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

둘째, QuincyKit BWCrashReportTextFormatter.m ~ line 176의 iOS 측에서 잘못된 문자 @"[TODO]"를 피 @"TODO"하도록 변경 하십시오.


0

atos는 더 이상 사용되지 않으므로 OSX 10.9 이상을 실행중인 경우 다음을 실행해야합니다.

xcrun atos

경고 : / usr / bin / atos가 이동 중이며 향후 OS X 릴리스에서 제거 될 예정입니다. 이제 Xcode 개발자 도구에서 다음을 통해 호출 할 수 있습니다.xcrun atos


Apple은 DWARF 형식이 각 도구 릴리스 (특히 Swift의 출현과 함께 의미가 있음)에 따라 변형 될 수 있으므로 도구 배포판으로 옮길 수 있습니다.
David Gish

0

Textwrangler를 사용하여 원본 앱 업로드 이진 거부에서 오류를 정확히 찾아 내고 싶습니다. 충돌 데이터는 itunesConnect 계정에서 찾을 수 있습니다. 위의 Sachin 방법을 사용하여 original.crash를 TextWrangler에 복사 한 다음 내가 만든 symbolicatecrash 파일을 다른 TextWrangler 파일에 복사합니다. 두 파일을 비교하면 차이점이 정확히 나타납니다. symbolicatecrash 파일은 파일과 줄 수의 문제를 지적하는 차이점이 있습니다.


-2

Google은 충돌 로그를 관리하기 위해 Google Crashlytics를 사용합니다.이 느낌은 매우시의 적절하고 사용하기 편리합니다.

문서 링크 : https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms

누락 된 dSYM 패브릭에 대한 모든 기능에는 프로젝트의 dSYM을 자동으로 업로드하는 도구가 포함되어 있습니다. 도구는 / run 스크립트를 통해 실행되며 온 보딩 프로세스 중에 스크립트 작성 단계에 추가됩니다. 그러나 고유 한 프로젝트 구성으로 인해 dSYM 업로드가 실패하거나 앱에서 비트 코드를 사용하는 경우가 있습니다. 업로드에 실패하면 Crashlytics가 기호를 표시하고 충돌을 표시 할 수 없으며 Fabric 대시 보드에 "Missing dSYM"경고가 나타납니다.

아래 설명 된 단계에 따라 누락 된 dSYM을 수동으로 업로드 할 수 있습니다.

참고 : 자동화 된 dSYM 업로드 도구 대신 Fabric은 프로젝트 빌드 프로세스의 일부로 실행되도록 수동으로 구성 할 수있는 명령 줄 도구 (업로드 심볼)를 제공합니다. 구성 지침은 아래의 업로드 기호 섹션을 참조하십시오.

...

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