Xcode가 충돌을 유발하는 라인을 표시하지 않음
내 앱이 충돌할 때마다 Xcode는 메인() 기능의 UIApplicationMain() 호출을 충돌의 원인이 된 라인으로 강조 표시합니다.일부 경우(예: 세분화 결함)에는 정상이었지만 제가 다루려고 하는 충돌은 콘솔에 자세한 정보가 기록된 간단한 SIGABRT입니다.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: Date)'
Xcode는 이전 SDK와 딱 맞는 라인을 보여주었지만 Xocde 4.2로 업그레이드한 이후 변경되었습니다.Xcode가 충돌의 원인(또는 알 수 있음)을 정확히 알고 있는 것은 분명하지만, 여전히 실제 라인을 보여주지는 않습니다.이에 대한 해결 방법이나 해결 방법이 있습니까?
또한 모든 예외에 대해 중단점이 설정되어 있는지 확인해야 합니다.이로 인해 Xcode가 예외가 발생하는 라인에서 중지됩니다.[Xcode 4]에서 다음을 수행합니다.
Xcode 왼쪽에 있는 Project Navigator(프로젝트 탐색기)에서 중단점 탐색기(위쪽 단추 표시줄의 거의 오른쪽)를 클릭합니다.아이콘은 오른쪽 화살표처럼 보입니다.
네비게이터 하단에서 "+" 단추를 누릅니다.
예외 중단점 추가를 누릅니다.
새 중단점이 만들어집니다.필요에 따라 구성해야 하지만 동작을 조정할 수 있습니다.
프로젝트를 실행하고 예외를 재현합니다.
또한 일부 타사 라이브러리/프레임워크에 연결했다고 언급했습니다.이러한 프레임워크 내에서 예외가 발생하면 코드가 컴파일되고 Xcode가 예외를 발생시킨 라인을 실제로 보여줄 수 없기 때문에 어려움을 겪을 것입니다.이 경우 라이브러리를 올바르게 사용하고 있다고 확신하면 해당 라이브러리의 유지 관리자에게 버그 보고서를 제출해야 합니다.
StackOverflow 답변의 지침을 따르기만 하면 됩니다.
기본적으로 "좀비 활성화"만 하면 됩니다.그러면 Xcode는 문제가 발생한 라인에서 끊어질 것입니다.
(2017년에도 Xcode에서 이 기능이 기본적으로 해제되어 있다는 것은 정말 충격적입니다.문제의 원인이 된 라인을 보고 싶지 않은 이유는 무엇입니까?그리고 "좀비 개체 활성화"?!정말?!Xcode 작성자들은 정말로 이것이 새로운 개발자들에게 어떤 종류의 의미가 있는 유용한 이름이라고 믿습니까?앱스토어에서 Xcode의 등급이 매년 얼마나 나쁜지는 우울합니다.아무도 듣고 있지 않습니다...)
현재 구성표를 편집하고 , 및 를 사용하도록 설정합니다.그런 다음 앱이 충돌할 때 gdb 콘솔에 다음을 입력합니다.
(gdb) info malloc-history 0x543216
를 바꿉니다.0x543216
원인이 된 물체의 주소와 함께.NSInvalidArgumentException
그리고 충돌의 원인이 되는 코드의 행을 보여주는 훨씬 더 유용한 스택 추적을 제공할 것입니다.
저는 이 동작을 고도로 최적화된 코드에서 보았습니다. 목표의 최적화 수준과 타사 립의 최적화 수준을 확인하고 조정하는 것이 도움이 될 수 있습니다. (LLVM 3.0 최적화 수준 설정)
디버그 기호를 생성하고 있습니까?
경계를 벗어난 인덱스 충돌을 생성하기 위해 코드를 작성했습니다.다음은 예외가 발생한 경우입니다.
2017-01-07 04:02:57.606 testABC[1694:52966] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(
0 CoreFoundation 0x000000010e85cd4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010e2be21e objc_exception_throw + 48
2 CoreFoundation 0x000000010e8b5c2f -[__NSSingleObjectArrayI objectAtIndex:] + 111
3 testABC 0x000000010dce962d -[ViewController ComplexFunction] + 61
4 testABC 0x000000010dce95db -[ViewController thirdFunction] + 43
5 testABC 0x000000010dce959b -[ViewController secondFunction] + 43
6 testABC 0x000000010dce955b -[ViewController firstFinction] + 43
7 testABC 0x000000010dce96c2 -[ViewController viewDidAppear:] + 50
8 UIKit 0x000000010ee28a6c -[UIViewController _setViewAppearState:isAnimating:] + 945
9 UIKit 0x000000010ee2b7da __64-[UIViewController viewDidMoveToWindow:shouldAppearOrDisappear:]_block_invoke + 42
10 UIKit 0x000000010ee29ac4 -[UIViewController _executeAfterAppearanceBlock] + 86
11 UIKit 0x000000010ec8d77c _runAfterCACommitDeferredBlocks + 653
12 UIKit 0x000000010ec7a273 _cleanUpAfterCAFlushAndRunDeferredBlocks + 566
13 UIKit 0x000000010ec9d757 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke_2 + 194
14 CoreFoundation 0x000000010e8016ac __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
15 CoreFoundation 0x000000010e7e66f4 __CFRunLoopDoBlocks + 356
16 CoreFoundation 0x000000010e7e5e65 __CFRunLoopRun + 901
17 CoreFoundation 0x000000010e7e5884 CFRunLoopRunSpecific + 420
18 GraphicsServices 0x00000001126d9a6f GSEventRunModal + 161
19 UIKit 0x000000010ec80c68 UIApplicationMain + 159
20 testABC 0x000000010dce99df main + 111
21 libdyld.dylib 0x000000011174968d start + 1
22 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
약만당깊읽는면다게의주이신▁if면다▁carefully.First Throw call stack
0 CoreFoundation 0x000000010e85cd4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010e2be21e objc_exception_throw + 48
0 and 1
충돌 후 시스템 프로세스입니다.
2 CoreFoundation 0x000000010e8b5c2f -[__NSSingleObjectArrayI objectAtIndex:] + 111
2
예외를 발생시킨 라인입니다.
3 testABC 0x000000010dce962d -[ViewController ComplexFunction] + 61
3
클래스 이름(ViewController
및() () 을 사용합니다.ComplexFunction
예외가 발생했습니다.
언급URL : https://stackoverflow.com/questions/7703052/xcode-doesnt-show-the-line-that-causes-a-crash
'programing' 카테고리의 다른 글
Xcode 4의 저작권 템플릿에서 회사 이름을 변경하려면 어떻게 해야 합니까? (0) | 2023.05.26 |
---|---|
Xcode 편집기에서 라인 번호는 어디서 찾을 수 있습니까? (0) | 2023.05.26 |
원격 서버에서 예기치 않은 응답을 반환했습니다. (413) Request Entity Too Large. (0) | 2023.05.26 |
Git: 마지막 약속 보기 (0) | 2023.05.26 |
지역 지점에서 다른 지점으로 "끌어내는" 방법은 무엇입니까? (0) | 2023.05.26 |