加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 隐藏来自预编译库的NSLog输出

发布时间:2020-12-16 07:32:32 所属栏目:百科 来源:网络整理
导读:我正在使用预编译的库,我没有源代码,它打印了很多调试日志.是否可以隐藏特定库的输出? 解决方法 不,NSLog将其输出直接写入标准错误,而不检查是否应该.调用该函数后,将写入输出. 也许您正在使用该库的调试版本.检查创建它的人是否有,或者他们愿意创建一个无
我正在使用预编译的库,我没有源代码,它打印了很多调试日志.是否可以隐藏特定库的输出?

解决方法

不,NSLog将其输出直接写入标准错误,而不检查是否应该.调用该函数后,将写入输出.

也许您正在使用该库的调试版本.检查创建它的人是否有,或者他们愿意创建一个无日志版本.

如果在没有记录的情况下无法获得库的版本,则可以将标准错误重定向到/ dev / null,这将导致系统丢弃NSLog输出.请注意,这需要您使用低级文件描述符,并且您将丢弃所有日志记录的输出,而不仅仅是该库.您可以通过仅在调用库函数时重定向来最小化丢失的输出,但随后库调用的任何函数或方法也将忽略其日志.您也可以随时重定向它,除非您正在记录,这意味着所有其他库将丢弃其日志.由于无法确保不丢弃有用的日志(例如异常消息),因此我不建议对应用程序的调试版本进行任何重定向.

这里重定向和未重定向都可行(注意这些也可以作为objective-c方法):

int discardLogging() {
    static int discardedOutputFD = -1;
    if(discardedOutputFD == -1) discardedOutputFD = open("/dev/null",O_WRONLY);
    int copy = dup(2); // Duplicate the old file descriptor,so it can be restored
    dup2(discardedOutputFD,2); // Redirect
    return copy;
}

void restartLogging(int copy) {
    dup2(copy,2); // Redirect back
    close(copy); // Not needed anymore
}

第一个函数将标准错误重定向到/ dev / null并返回旧文件描述符的副本.第二个将它重定向到复制的描述符并关闭额外的副本.警告:您应该检查每个被调用函数的返回值,因为它们映射到系统调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读