objective-c - Xcode5 如何调试 快速定位出错行
怪我咯
怪我咯 2017-04-22 09:00:08
0
3
753

、、、objectivec
2014-07-21 18:02:38.259 Sections[2962:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'must pass a class of kind UITableViewCell'
*** First throw call stack:
(
0 CoreFoundation 0x017375e4 exceptionPreprocess + 180
1 libobjc.A.dylib 0x014ba8b6 objc_exception_throw + 44
2 CoreFoundation 0x017373bb +[NSException raise:format:] + 139
3 UIKit 0x00314e08 -[UITableView registerClass:forCellReuseIdentifier:] + 247
4 Sections 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
5 UIKit 0x005cc0b4 -[UISearchDisplayController searchResultsTableView] + 446
6 UIKit 0x005cd5f4 -[UISearchDisplayController _containerView] + 1031
7 UIKit 0x005c7563 -[UISearchDisplayController setActive:animated:] + 9462
8 UIKit 0x005cad4f -[UISearchDisplayController searchBarTextDidBeginEditing:] + 298
9 UIKit 0x004f52c9 -[UISearchBar(UISearchBarStatic) _searchFieldBeginEditing] + 113
10 libobjc.A.dylib 0x014cc81f -[NSObject performSelector:withObject:] + 70
11 UIKit 0x0022ec8c -[UIApplication sendAction:to:from:forEvent:] + 108
12 UIKit 0x0022ec18 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
13 UIKit 0x003266d9 -[UIControl sendAction:to:forEvent:] + 66
14 UIKit 0x00326a9c -[UIControl _sendActionsForEvents:withEvent:] + 577
15 UIKit 0x0091254e -[UITextField willAttachFieldEditor:] + 685
16 UIKit 0x0032c4d5 -[UIFieldEditor becomeFieldEditorForView:] + 927
17 UIKit 0x00909643 -[UITextField _becomeFirstResponder] + 160
18 UIKit 0x004f841a -[UISearchBarTextField _becomeFirstResponder] + 98
19 UIKit 0x00386585 -[UIResponder becomeFirstResponder] + 400
20 UIKit 0x00289d0b -[UIView(Hierarchy) becomeFirstResponder] + 114
21 UIKit 0x009090e3 -[UITextField becomeFirstResponder] + 51
22 UIKit 0x005ae651 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 135
23 UIKit 0x005b0ba2 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) oneFingerTap:] + 2640
24 UIKit 0x005a4f8c _UIGestureRecognizerSendActions + 230
25 UIKit 0x005a3c00 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 383
26 UIKit 0x005a566d -[UIGestureRecognizer _delayedUpdateGesture] + 60
27 UIKit 0x005a8bcd ___UIGestureRecognizerUpdate_block_invoke + 57
28 UIKit 0x005a8b4e _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 317
29 UIKit 0x0059f248 _UIGestureRecognizerUpdate + 199
30 UIKit 0x0026bd4a -[UIWindow _sendGesturesForEvent:] + 1291
31 UIKit 0x0026cc6a -[UIWindow sendEvent:] + 1030
32 UIKit 0x00240a36 -[UIApplication sendEvent:] + 242
33 UIKit 0x0022ad9f _UIApplicationHandleEventQueue + 11421
34 CoreFoundation 0x016c08af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION
+ 15
35 CoreFoundation 0x016c023b __CFRunLoopDoSources0 + 235
36 CoreFoundation 0x016dd30e __CFRunLoopRun + 910
37 CoreFoundation 0x016dcb33 CFRunLoopRunSpecific + 467
38 CoreFoundation 0x016dc94b CFRunLoopRunInMode + 123
39 GraphicsServices 0x036d89d7 GSEventRunModal + 192
40 GraphicsServices 0x036d87fe GSEventRun + 104
41 UIKit 0x0022d94b UIApplicationMain + 1225
42 Sections 0x0000399d main + 141
43 libdyld.dylib 0x01d75701 start + 1
44 ??? 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
、、、
如上所示,错误提示,使用的是XCODE5 无法根据错误提示找到出错行,网上有的方法试过不可以。希望知道的同学告知下。谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

모든 응답(3)
Ty80

Xcode의 Breakpoint Navigator에서 예외 중단점(Add Exception Breakpoint)을 추가한 후 중단점 조건을 Exception: Object-C로 설정하면 예외가 발생하기 전에 중단될 수 있고, 그때의 호출 스택을 볼 수 있습니다.

문제가 있는 코드가 실행되려고 할 때 이 중단점을 설정하는 것이 가장 좋습니다. 그렇지 않으면 다양한 예외로 인해 계속 방해를 받게 됩니다.

洪涛

당신의 프로젝트 이름은 섹션(Sections)이죠?
예외가 발생하는 위치는 다음과 같습니다.
4 섹션 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
BIDViewController 클래스의 searchDisplayController 메소드의 코드 오프셋은 171입니다(이 메소드의 거의 170자, 거의 라인 2와 3입니다. 171은 라인 번호 등이 아님을 기억하십시오).

iOS 예외 분석의 경우, 예외가 발생한 위치를 개발자에게 직접 알려주지 않고 때로는 예외 스택도 없는 경우도 있고, 예외 스택이 있어도 의미, 특히 코드 오프셋 번호는 매우 오해의 소지가 있습니다. 일반적으로 많은 디버깅 방법이 있으며, 이를 모두 다루려면 밤새도록 걸릴 것입니다. Huan Du가 답변한 예외 중단점은 하나이며, 물론 로그 주장 인쇄 보기 방법, 기호 중단점 설정, LLDB 디버깅 도구가 있습니다. . 개인적으로 저는 귀하의 질문에 게시된 스택 분석 방법을 여전히 선호합니다. 기본적으로 클래스 이름, 메소드 이름, 코드 오프셋을 통해 문제를 판단할 수 있습니다.

스택 보고서와 관련하여 내용의 의미를 간략하게 소개합니다.
예:
4개 섹션 0x000030eb -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:] + 171
총 5개 부분으로 구성됩니다: 4/Sections/0x000030eb/-[BIDVi...ew:]/171
1부: 스택은 시퀀스 번호가 클수록 더 빨라집니다. 코드가 호출됩니다.
2부: 호출된 메서드가 속한 프레임워크(라이브러리/프로젝트)입니다. 예를 들어 섹션은 프로젝트입니다. 3부: 호출 메서드의 메모리 주소(0x000030eb
) 4부: 메서드 이름 호출, 이는 매우 중요합니다. 즉, -[BIDViewController searchDisplayController:didLoadSearchResultsTableView:]
입니다. 5부: 컴파일 후 메서드를 호출한 후의 코드 오프셋입니다. 여기서도 줄 번호가 아니라 컴파일된 코드 오프셋이지만 기본적으로 문자 수를 계산하는 데 사용할 수 있습니다. 문자 오프셋은 잘못된 줄에 대한 대략적인 추정이며 일반적인 오류는 3~5줄 이내입니다.

다음은 xcode가 스택 로그를 인쇄하지 않는 것을 방지하기 위한 작은 팁입니다.

다음과 같이 main.m의 기본 메소드에 @try@catch를 추가하세요.
으아악

하지만 앱을 게시하기 전에 try catch 패키지를 삭제하는 것을 잊지 마세요~~~

大家讲道理

[UITableView RegisterClass:forCellReuseIdentifier:] 여기에 문제가 발생했습니다!

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿