1

我在使用 NSLog 替代品的某些地方发生了崩溃。

(我主要使用替换来写入文件和屏幕上的文本字段,但目前我将其仅打印到控制台)

我尝试了以下两种实现(顺便感谢原作者): http ://www.platinumball.net/blog/2009/07/18/nslog-sucks/ http://www.karlkraft。 com/index.php/2009/03/23/114/

它们都在我的代码中的某些位置为我工作,但似乎当我从某些地方调用它们时,它们会导致崩溃,通常 CFStringAppendFormatCore 位于堆栈跟踪的顶部,但并非总是如此(最近的时间,它在“0 flockfile”上)。崩溃似乎总是在程序集中的 CMPL 或 JMP 周围。

我打算以这种方式使用它:

+ (void)saveProfile:(NSString *)reason {
    DebugLog(@"Saved profile: %@", reason);
}

但是当我执行以下操作时,我什至会崩溃:

+ (void)saveProfile:(NSString *)reason {
    DebugLog(@"Saved profile.");
}

我注意到当我遇到崩溃时,我似乎总是在 NSString 上得到 Summary Unavailable,但是如果我把它放在其他日志的位置,NSLog 仍然可以工作。我已经在这些位置使用 NSLog 好几个星期了,总是将配置文件的保存注销到控制台,但是现在我试图替换它,我得到了这个崩溃。

我已经更换了我所有的 NSLog,几乎所有的 NSLog 都可以正常工作。我试图发现一种模式,它似乎总是在它崩溃的类级方法中。据我所知,我的 Profile 类没有做任何花哨的事情。它派生 NSObject,并且只有类方法。

我最初将此日志记录功能的导入作为我的 Prefix PCH 文件中的最后一件事,并且想知道这是否导致了问题,所以我让所有使用该功能的文件现在都导入了标题,它不再在 PCH 中.

我尝试的另一件事是将 (NSString *) 替换为 id 作为第一个参数,因为我阅读了一篇 CFStringAppendFormatCore 帖子,该帖子是关于在预期 NSString 时传递 NSString 以外的东西。这是有道理的,因为我有时会在我认为通过 [theNsObject 描述] 记录的附加参数中传递一个 NSObject。但即使将我的代码简化为上面的第二个示例,没有格式 - 只是一个字符串文字 - 崩溃仍然会发生。

最后一件事 - 这是在 iPhone 6.0 模拟器上运行的,带有 iOS 6 SDK 和 Xcode 4.5.2。

有什么想法吗?

谢谢!

4

0 回答 0