【问题标题】:Trace xCode crash logs with memory addresses使用内存地址跟踪 xCode 崩溃日志
【发布时间】:2016-11-21 12:26:55
【问题描述】:

我在 XCode 控制台中因以下地址和消息而崩溃。虽然我知道崩溃是因为在NSDictionary 中传递了零值。但是,如果您只查看日志,则很难跟踪导致此崩溃的类和方法。

有没有办法将崩溃地址追踪到类名和方法名中?

由于未捕获的异常而终止应用 '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)

【问题讨论】:

标签: ios objective-c xcode


【解决方案1】:

引用自: How to get line number, method name, and class name when crash occurs using Objective C

下面这段代码很好地了解了跟踪异常的方法和类:

在我的应用委托的 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__);

// 内部错误报告 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多