我在XCode控制台中遇到以下地址和消息时崩溃了。虽然我理解崩溃是因为在NSDictionary
中传递了某个nil值。但是如果你只是查看日志,很难跟踪哪个类和方法导致崩溃。
有没有办法将崩溃地址追溯到班级名称和方法名称?
由于未捕获的异常而终止应用 ' NSInvalidArgumentException',原因:' *** - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从中插入nil对象 objects [5]第一次抛出调用堆栈:(0x181092db0 0x1806f7f80 0x180f7b77c 0x180f7b614 0x1001578d8 0x100157334 0x187dec8b8 0x187de8aac 0x187de2e48 0x181048f84 0x1810488bc 0x181046d04 0x180f70c50 0x182858088 0x18625a088 0x10027b718 0x180b0e8b8) libc ++ abi.dylib:以未捕获的类型异常终止 NSException(lldb)
答案 0 :(得分:0)
参考: How to get line number, method name, and class name when crash occurs using Objective C
下面的代码有关跟踪异常方法和类的详细信息:
在我的app delegate的didFinishLaunchingWithOptions方法中,我创建了自己的异常处理程序:
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
- uncaughtExceptionHandler方法实现 -
void uncaughtExceptionHandler(NSException *exception) {
NSLog(@"CRASH: %@", exception);
NSLog(@"callStackSymbols: %@", [exception callStackSymbols]);
NSLog(@"callStackReturnAddresses: %@", [exception callStackReturnAddresses]);
NSLog(@"reason: %@", [exception reason]);
NSLog(@"name: %@", [exception name]);
NSLog(@"%s %d %s %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, __FUNCTION__);
//内部错误报告 }