iOS调试,找出错误代码所在位置
程序员文章站
2022-06-11 11:11:57
...
在Xcode调试程序过程中,程序出现意想不到的bug后,突然崩溃掉了,一般都会抛出First throw call stack--调用堆栈首先抛出的问题。
在本实例图中我们也可以发现抛出问题的解释:“由于未捕获的NSRangeException异常而终止应用程序,原因是指数2超越界限”。
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'
原因虽然知道了,但如果想在代码量大且功能结构复杂的程序里找出具体错误是在哪一行代码,可是既费时间、又费眼力的活。
貌似说是iOS5.0开始后,Xcode显示的崩溃信息里不打印方法名了。
那这里先做下打印"First throw call stack"后面对应十六进制地址的详细调用方法名等信息。
第一步:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
return YES;
}
第二步:
static void uncaughtExceptionHandler(NSException *exception) {
NSLog(@"%@\n%@", exception, [exception callStackSymbols]);
}
之后再出现First throw call stack时就会出现如下图效果
接下来就是具体排查可疑的十六进制地址
image lookup --address 0x000ddae1
// 缩写
// im loo -a 0x000ddae1
下图是具体返回出错的位置,是HFKSlideMenuDirectionRight.m:117。推荐阅读