Ios 斯威夫特·斯特德和斯托特成了一个文件
对于iPhone应用程序,我需要将调试数据收集到一个文件中,然后发送到在线服务进行分析。通过将Ios 斯威夫特·斯特德和斯托特成了一个文件,ios,swift,stdout,nslog,freopen,Ios,Swift,Stdout,Nslog,Freopen,对于iPhone应用程序,我需要将调试数据收集到一个文件中,然后发送到在线服务进行分析。通过将stderr输出转移到文件句柄,并在适当的时候发送文件,可以很好地工作。(NSLog输出也会在stderr中结束,因此这种方法适用于所有方面。)同样的方法也适用于stdout 下面是我如何保存到文件的步骤: freopen(cStringFilePath, "a+", stderr) // or stdout 上面正确地返回了一个UnsafeMutablePointer,我会跟踪它,以便在必要时关闭文
stderr
输出转移到文件句柄,并在适当的时候发送文件,可以很好地工作。(NSLog
输出也会在stderr
中结束,因此这种方法适用于所有方面。)同样的方法也适用于stdout
下面是我如何保存到文件的步骤:
freopen(cStringFilePath, "a+", stderr) // or stdout
上面正确地返回了一个UnsafeMutablePointer
,我会跟踪它,以便在必要时关闭文件
但是,我需要将stdout
和stderr
的内容放在一个文件中,并逐行列出正确的时间顺序
原因是我试图调试一个第三方框架,该框架生成诊断输出,但将其写入stdout
,而不是stderr
你知道怎么做吗?你试过打两次电话给freopen吗?一次使用
stderr
和一次使用stdout
?当我尝试时,我认为这对我的目的很有效 你试过打两次电话给freopen吗?一次使用stderr
和一次使用stdout
?当我尝试时,我认为这对我的目的很有效 不,它似乎只会捕获您上次使用的一个。更正。它似乎起作用了。哇!但它安全吗?如果两个流同时尝试访问该文件会怎样?是的,它应该是“安全的”,即它不应该崩溃,但由于缓冲规则,您可能会得到交错的输出。我想您可以修改这些文件描述符上的缓冲方式,但我不确定如何使用@Mundi:setlinebuf()
将stdout/stderr设置为行缓冲模式()。默认情况下,在写入文件时,这两个文件都是无缓冲的。不,它似乎只会捕获您上次使用的文件。更正。它似乎起作用了。哇!但它安全吗?如果两个流同时尝试访问该文件会怎样?是的,它应该是“安全的”,即它不应该崩溃,但由于缓冲规则,您可能会得到交错的输出。我想您可以修改这些文件描述符上的缓冲方式,但我不确定如何使用@Mundi:setlinebuf()
将stdout/stderr设置为行缓冲模式()。默认情况下,在写入文件时,这两个文件都是无缓冲的。