【问题标题】:How can I get a console readout at runtime in an application?如何在应用程序运行时获得控制台读数?
【发布时间】:2011-08-22 16:58:14
【问题描述】:

出于调试目的,我想在运行时以类似于 App Store 上当前控制台应用程序的方式访问控制台打印输出(可以找到 here)。

我对文档进行了一些搜索,但找不到 Apple 提供的任何内容,但我觉得我错过了一些重要的东西。有什么见解吗?

谢谢。

【问题讨论】:

    标签: objective-c ios console


    【解决方案1】:

    您可以使用<asl.h> 执行此操作。这是一个示例,我将其拼凑在一起创建了一个控制台消息数组。

    -(NSArray*)console
    {
        NSMutableArray *consoleLog = [NSMutableArray array];
    
        aslclient client = asl_open(NULL, NULL, ASL_OPT_STDERR);
    
        aslmsg query = asl_new(ASL_TYPE_QUERY);
        asl_set_query(query, ASL_KEY_MSG, NULL, ASL_QUERY_OP_NOT_EQUAL);
        aslresponse response = asl_search(client, query);
    
        asl_free(query);
    
        aslmsg message;
        while((message = asl_next(response)) != NULL)
        {
            const char *msg = asl_get(message, ASL_KEY_MSG);
            [consoleLog addObject:[NSString stringWithCString:msg encoding:NSUTF8StringEncoding]];
        }
        if (message != NULL) {
            asl_free(message);
        }
        asl_free(response);
        asl_close(client);
    
        return consoleLog;
    }
    

    【讨论】:

    • 虽然控制台应用进入了应用商店,但我不能保证未来使用 asl 的应用会。
    • 我明白了。这仅用于调试,因此将有目的地从生产级代码中剥离。
    • 那么 use away,它会得到消息,你也可以使用 set_query 来过滤严重性,时间等,你可以使用 asl_get 来获取其他值,如严重性,时间等。
    • 为IOS开发者发现了一个有趣的笔记。设备上的 ASL 实施将限制您仅搜索最后 256 条消息。小心那个。
    • Marty...你必须自己限制查询吗?我在使用 ASL 阅读时偶尔会崩溃,但不知道是什么原因造成的。
    【解决方案2】:

    如果您的设备连接到 Xcode,您可以在调试区域看到控制台输出(NSLogs 等):

    如果您稍后运行应用程序并连接到 Xcode,我相信您可以在 Organizer 中获取控制台日志。


    编辑:要在运行时访问日志文件,您应该尝试 /var/log/system.log - 但更好的是我建议使用自定义调试功能,该功能将写入系统日志和/或文本视图你的应用程序。 (查看 NSLogv,它在编写包装函数时会很有用。)这还有一个好处是可以让您从一个地方禁用所有调试日志(只需更改您的调试函数)。

    【讨论】:

    • 感谢您的回答,但我说的是在运行时访问应用程序中的控制台输出,例如我在问题中链接的控制台应用程序。
    • 想大家应该知道如何使用xCode里面的调试日志
    猜你喜欢
    • 2013-02-11
    • 2019-01-30
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2012-11-07
    • 2017-01-03
    相关资源
    最近更新 更多