【问题标题】:called NSLog's function's location in project项目中调用NSLog函数位置
【发布时间】:2013-04-23 16:02:06
【问题描述】:

我有一个大项目,有很多NSLog() 电话。当某些事情发生时,一些NSLog() 工作,我不知道哪个NSLog 被调用。如何在类文件中找到调用 NSLog() 的位置?

我的NSLog是这样的:NSLog(@"%@", someArray);

这是日志:

2013-04-23 20:43:38.257 myProj[2101:707] {
    id = 1;
    version = 1;
}

myProj[2101:707] 在这里是什么意思?它是否给了我关于 NSLog 函数在课堂上的位置的任何信息?

【问题讨论】:

    标签: iphone ios objective-c cocoa-touch nslog


    【解决方案1】:

    您可以尝试在项目中搜索输出。

    例如,如果输出是

    This is my output with values 3.1415 and 1.2345.
    

    cmdshiftF 并搜索“这是我的输出值”

    您还可以在搜索词中插入占位符:

    【讨论】:

    • 有兴趣了解如何将模式插入到取景器中.. 可以解释更多.. 将不胜感激..
    • 点击文本字段左侧的放大镜图标
    【解决方案2】:

    将所有 NSLog 使用转换为 DLog,然后将打印日志语句:

    1. 文件名
    2. 方法名
    3. 行号

    输出到日志的每一行。通过这种方式,您可以立即看到所有日志记录在哪里完成。 DLog 是一种比 NSLog 更好的日志记录机制,您应该开始在所有项目中使用它。

    在你的 pch 文件中定义 DLog 为:

    #ifdef DEBUG
    #   define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__,  ##__VA_ARGS__);
    #else
    #   define DLog(...)
    #endif
    

    【讨论】:

    • 这甚至有助于回答这个问题吗? DLog 可以定义为 NSLog 的替代品,但它无助于 OP 找出调用了哪个 NSLog。
    • @nsgulliver 实际上如果 OP 用 DLogs 替换所有 NSLogs,他会找到他正在寻找的调用。
    • @nsgulliver 我已经更新了答案,以更清楚地说明 DLog 是一个好的解决方案。
    • @Wain 那好多了 +1。
    【解决方案3】:

    您可以使用the function class_getName 获取放置您的日志语句的对象的类名,并将类名包含在NSLog() 中。

    像这样:

    #import <objc/runtime.h>
    …
    NSLog("%@ Some Log Statement", class_getName([self class]));
    

    【讨论】:

    • 这对未来来说是个好点,但我想 OP 首先很难找到正确的 NSLog 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多