Xcode 5 Organizer에는 모든 충돌 로그를 나열하는보기가 있습니다. 드롭 크래시 로그를 여기로 드래그 할 수 있습니다. 그러나 Xcode 6부터는 장치를 구성에서 벗어나 새로운 창을 가지고 있음을 알고 있습니다. 그러나 Xcode 6으로 업그레이드 한 후 Xcode 5에서 드래그 다운 된 충돌 로그를 볼 수있는 곳을 찾지 못했습니다.
Xcode 5 Organizer에는 모든 충돌 로그를 나열하는보기가 있습니다. 드롭 크래시 로그를 여기로 드래그 할 수 있습니다. 그러나 Xcode 6부터는 장치를 구성에서 벗어나 새로운 창을 가지고 있음을 알고 있습니다. 그러나 Xcode 6으로 업그레이드 한 후 Xcode 5에서 드래그 다운 된 충돌 로그를 볼 수있는 곳을 찾지 못했습니다.
답변:
Ok 나는 당신이 이것을 할 수 있다는 것을 깨달았습니다.
Xcode > Window > Devices
연결된 아이폰 / 아이 패드 선택 / 등 상단 왼쪽.아마도 거기에 많은 로그가 있고 나중에 가져온 로그를 쉽게 찾을 수 있도록하기 위해이 시점에서 모든 로그를 삭제할 수 있습니다. 또는 충돌이 발생한 정확한 시점을 모른다면 어쨌든 파일에 기록해야합니다 ... 게으 르기 때문에 오래된 로그를 모두 삭제합니다 (실제로 시간이 걸렸습니다).
.crash
.
이 답변을 나 자신만큼이나 커뮤니티에 쓰십시오.
충돌 보고서를 상징하는 데 문제가있는 경우 다음과 같이이를 극복 할 수 있습니다.
복사, 별도의 폴더를 생성 Foo.app
하고 Foo.app.dSYM
해당에서 .xcarchive
폴더로. 또한 .crash
보고서를 폴더에 복사하십시오 .
TextEdit 또는 다른 곳에서 충돌 보고서를 열고 Binary Images:
섹션으로 이동 하여 첫 번째 주소를 복사하십시오 (예 :) 0xd7000
.
cd
폴더에. 이제 다음 명령을 실행할 수 있습니다.
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb
이것은 address의 심볼을 상징합니다 0x0033f9bb
. -arch
옵션 의 올바른 값을 선택하십시오 ( Binary Images:
섹션 의 첫 번째 라인에서 가져 오거나 Hardware Model:
충돌 보고서 및 앱의 지원되는 아치에서 알아낼 수 있음 ).
충돌 보고서의 필요한 주소 (예 : 스레드 호출 스택)를 텍스트 파일 (TextEdit에서 Option을 누른 상태에서 필요한 텍스트 블록을 선택하거나 복사 및 잘라 내기)에 직접 복사하여 다음과 같은 결과를 얻을 수 있습니다.
0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3
이제이를 텍스트 파일 (예 :)로 저장 addr.txt
하고 다음 명령을 실행할 수 있습니다.
xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt
이것은 한 번에 모든 주소에 대해 좋은 상징을 줄 것입니다.
추신
위의 작업을 수행하기 전에 모든 것이 올바르게 설정되어 있는지 확인하는 것이 atos
좋습니다 (기본적으로 제공된 모든 주소에 대해 행복하게보고 할 것입니다).
확인을 수행하려면 충돌 보고서를 열고에 대한 호출 스택 끝으로 이동하십시오 Thread 0
. 끝에서 첫 번째 줄로 앱을 나열합니다 (보통 두 번째 줄). 예 :
34 Foo 0x0033f9bb 0xd7000 + 2525627
main()
전화 해야합니다 . 0x0033f9bb
위에서 설명한 것처럼 주소 ( 이 경우)를 상징하면 이것이 main()
임의의 방법이나 기능 이 아니라는 것을 확인해야 합니다.
주소가 주소가 아닌 경우 main()
로드 주소 ( -l
옵션) 및 아치 ( -arch
옵션)를 확인하십시오.
PPS
위에서로 인해 일을하지 않는 경우 비트 코드 ,의 dSYM (찾기> 패키지 내용보기)에서 실행 가능한 바이너리를 추출, 아이튠즈 커넥트에서 빌드의 dSYM를 다운로드 디렉토리에 복사하고 (즉 사용 Foo
은 AS) atos
대신 에을 (를 ) 인수 하십시오 Foo.app/Foo
.
xcrun dwarfdump --uuid <path to executable>
./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash
전체 충돌 보고서를 상징하고 상징화 된 버전을 제공합니다. gist.github.com/nathan-fiscaletti/…
당신도 이것을 참조 할 수 있습니다, 나는 수동 충돌 다시 상징 의 단계별 절차를 작성했습니다 .
1 단계
위의 모든 파일 (MyApp.app, MyApp-dSYM.dSYM 및 MyApp-Crash-log.crash)을 터미널을 쉽게 사용할 수있는 편리한 이름의 폴더로 이동하십시오.
나에게있어 데스크탑은 가장 쉽게 접근 할 수있는 곳이다.) 따라서이 세 파일을 데스크탑의 MyApp 폴더로 옮겼습니다.
2 단계
이제 Finder가 바뀌 었습니다. XCODE 버전에 해당되는 경로를 찾으십시오.
이 명령을 사용하여 symbolicatecrash
스크립트 파일 을 찾으십시오 .
find /Applications/Xcode.app -name symbolicatecrash
Xcode 8, Xcode 9, Xcode 11 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
Xcode 7.3
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Xcode 6 이하
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
또는
Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources
3 단계
찾은 symbolicatecrash 스크립트 파일의 디렉토리를 $PATH
다음 sudo vim /etc/paths.d/Xcode-symbolicatecrash
과 같이 env 변수에 추가하고 스크립트 파일의 디렉토리를 붙여넣고 파일을 저장하십시오. 새 터미널을 열 때에있는 symbolicatecrash
명령으로 모든 폴더를 호출 할 수 있습니다 /usr/bin
.
또는
이 위치에서 symbolicatecrash 파일을 복사하여 Desktop / MyApp에 붙여 넣습니다 (잠깐만 ... 맹목적으로 따르지 마십시오. Sybolicatecrash 파일을 MyApp 폴더에 붙여넣고 있습니다. 하나는 좋아하는 위치에서 1 단계에서 생성 한 파일 중 하나입니다. )
4 단계
터미널을 열고 CD를 MyApp 폴더로 엽니 다.
cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)
— Enter를 누르십시오
./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM
— Enter를 누르십시오
그게 다야 !! 기호화 된 로그가 터미널에 있습니다. 이제 무엇을 기다리고 있습니까? 이제 간단히 오류를 찾아서 해결하십시오.)
행복한 코딩!
xcode-select --print-path
나를 위해 .crash 파일로 충분했습니다. .dSYM 파일과 .app 파일이 없습니다.
아카이브를 빌드하는 Mac에서 다음 두 명령을 실행했으며 작동했습니다.
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash
Xcode를 사용하는 더 쉬운 방법이 있습니다 (명령 줄 도구를 사용하지 않고 한 번에 하나씩 주소를 검색하지 않아도 됨)
.xcarchive 파일을 가져옵니다. 당신이 전에 그것을 가지고 있다면 그것을 사용할 수 있습니다. 계정이없는 경우 Xcode에서 제품> 아카이브를 실행하여 작성하십시오.
.xcarchive 파일을 마우스 오른쪽 버튼으로 클릭하고 '패키지 내용 표시'를 선택하십시오.
충돌 한 앱 버전의 dsym 파일을 dSYMs 폴더에 복사
.app 파일 (충돌 된 앱 버전)을 Products> Applications 폴더에 복사하십시오.
Info.plist를 편집하고 ApplicationProperties 사전에서 CFBundleShortVersionString 및 CFBundleVersion을 편집하십시오. 나중에 아카이브를 식별하는 데 도움이됩니다.
.xcarchive를 두 번 클릭하여 Xcode로 가져옵니다. 오거나이저를 열어야합니다.
충돌 로그로 돌아 가기 (Xcode의 장치 창에서)
.crash 파일을 거기서 드래그하십시오 (아직없는 경우).
전체 충돌 로그가 이제 상징화되어야합니다. 그렇지 않은 경우 마우스 오른쪽 버튼을 클릭하고 '재심사 충돌 로그 다시 표시'를 선택하십시오.
Xcode 10에서 다음 단계에 따라 동일한 머신의 앱 빌드에서 충돌 로그를 상징하십시오.
동일한 하위 폴더에 .dSYM 및 .crash 파일이 있으면 다음 단계를 수행하십시오.
$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc
-[AtomicElementViewController myTransitionDidStop:finished:context:]
Xcode 애플리케이션 이름에 공백이 없는지 확인하십시오. 이것이 나를 위해 작동하지 않은 이유입니다. 그래서 /Applications/Xcode.app
동안 작동하는 /Applications/Xcode 6.1.1.app
일을하지 않습니다.
Apple의 문서에서 :
Xcode를 사용하여 충돌 보고서를 상징화 Xcode는 발생하는 모든 충돌 보고서를 자동으로 상징화하려고 시도합니다. 상징화를 위해해야 할 일은 Xcode Organizer에 충돌 보고서를 추가하는 것입니다.
Xcode는 충돌 보고서를 자동으로 상징하고 결과를 표시합니다 충돌 보고서를 상징적으로 나타내려면 Xcode는 다음을 찾을 수 있어야합니다.
충돌하는 응용 프로그램의 이진 및 dSYM 파일
응용 프로그램이 연결되는 모든 사용자 지정 프레임 워크의 바이너리 및 dSYM 파일 응용 프로그램과 함께 소스에서 작성된 프레임 워크의 경우 해당 dSYM 파일이 응용 프로그램의 dSYM 파일과 함께 아카이브에 복사됩니다. 타사에서 만든 프레임 워크의 경우 작성자에게 dSYM 파일을 요청해야합니다.
해당 응용 프로그램이 충돌했을 때 실행 중이었던 OS의 기호입니다. 이 기호에는 특정 OS 릴리스 (예 : iOS 9.3.3)에 포함 된 프레임 워크에 대한 디버그 정보가 포함되어 있습니다. OS 기호는 아키텍처에 따라 다릅니다. 64 비트 장치 용 iOS 릴리스에는 armv7 기호가 포함되지 않습니다. Xcode는 Mac에 연결 한 각 장치에서 OS 기호를 자동으로 복사합니다.
이 중 하나라도 누락되면 Xcode가 충돌 보고서를 상징하지 않거나 부분적으로 충돌 보고서를 상징 할 수 있습니다.
충돌 로그를 상징하는 가장 쉬운 프로세스 :
5 초 동안 기다립니다. 쾅! 스택 추적의 응용 프로그램 호출이 상징화됩니다! 그래도 여전히 많은 기호를 볼 수 있습니다! 내부 라이브러리 및 프레임 워크 호출입니다.
이것은 가장 쉬운 방법입니다.
Apple은 충돌 로그를 .txt 형식으로 제공합니다.
**
장치가 연결된 상태에서
**
저기에서 상징적 인 충돌 로그를 볼 수있을 것입니다
Symbolicating 충돌 로그 에 대한 자세한 내용은 링크를 참조하십시오