如何将整个NSException记录到文本文件中?

时间:2015-10-28 12:01:13

标签: objective-c

我正在尝试将NSException对象记录到文本文件中,为了做到这一点,我这样做:

///logging modle
    #import <Foundation/Foundation.h>

    @interface TextLogModel : JSONModel

    @property (nonatomic, strong) NSString *name;

    @property (nonatomic, strong) NSString *reason;

    @property (nonatomic, strong) NSArray *stack;

    @end


/// logging function

    -(BOOL)log:(NSException*)ex{

        BOOL result = NO;

        TextLogModel* mod = [[TextLogModel alloc] init];
        mod.name = ex.name;
        mod.reason = ex.reason;
        mod.stack = ex.callStackReturnAddresses;

        NSArray* arr = ex.callStackReturnAddresses;

        NSString* json = [[[JsonHelper alloc] init] SerializeObject:mod];

        ......some more code...

        return result;
    }

我得到的JSON结果是

  
    

{“name”:“NSRangeException”,

  
     

“堆叠”:[140735685894180,140735694292846,140735685893869,140735684895768,4295503469,4294976416,4294976329,140735605055272,140735605054845,4295032657,4294975994,140735748324567,140735605907121,140735605995846,140735605995618,140735748324567,140735605995455,140735748324567,140735605988531,140735606350671,140735605982054, 140735611658972,140735604907142,140735604892178,140735604013928,140735603475012,4294985938,4294975620]

     

“原因”:“ - [__ NSCFString

     
    

substringWithRange:]:范围{0,9223372036854775807}越界;     字符串长度21“}

  

问题

堆栈未转换为可读格式。

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以先使用callStackSymbols代替callStackReturnAddresses。但即使这样也不会给你所有的符号。那是因为信息不存在(它不是可执行文件的一部分,因为在执行过程中不需要它)。

如果您想生成像Xcode或崩溃报告工具一样的完整回溯,那么在编译时,您将需要在应用旁边生成的dSYM文件。
并且您无法通过此应用实时执行此操作,因为您需要一些iOS应用无法使用的特定工具。

如果您仍然想要这样做,请查看崩溃符号,如果您有什么不明白的话,请询问其他具体问题。