programing

Xcode가 충돌을 유발하는 라인을 표시하지 않음

muds 2023. 5. 26. 22:50
반응형

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]에서 다음을 수행합니다.

  1. Xcode 왼쪽에 있는 Project Navigator(프로젝트 탐색기)에서 중단점 탐색기(위쪽 단추 표시줄의 거의 오른쪽)를 클릭합니다.아이콘은 오른쪽 화살표처럼 보입니다.

  2. 네비게이터 하단에서 "+" 단추를 누릅니다.

  3. 예외 중단점 추가를 누릅니다.

  4. 새 중단점이 만들어집니다.필요에 따라 구성해야 하지만 동작을 조정할 수 있습니다.

  5. 프로젝트를 실행하고 예외를 재현합니다.

또한 일부 타사 라이브러리/프레임워크에 연결했다고 언급했습니다.이러한 프레임워크 내에서 예외가 발생하면 코드가 컴파일되고 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

반응형