跟踪内存地址为

时间:2016-07-18 19:24:17

标签: ios objective-c xcode

我在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)

1 个答案:

答案 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__);

//内部错误报告 }