我不喜欢在模拟器中(或在设备上)调试iPhone应用程序时使用Xcode的控制台输出窗口。我希望能够使用Unix工具箱,并使用grep过滤日志记录输出。但要做到这一点,我需要让Xcode将正在运行的iPhone应用程序的日志记录输出发送到终端。
有什么方法可以做到这一点吗?
发布于 2009-12-16 04:50:36
不能说它在模拟器中是如何工作的,但重定向stdout并不是非常困难。假设您想将其导入到您自己的视图中:
#include <unistd.h>
stderr->_write = RedirectOutputToView;
stdout->_write = RedirectOutputToView;
并使用原型:
int RedirectOutputToView(void *inFD, const char *buffer, int size);
发布于 2013-09-27 04:37:59
我发现this answer对我的目的来说工作得很好,尽管它需要运行模拟器才能在终端中直播:
我删除了模拟器检查,并在重定向之前添加了一条NSLog语句,以便XCode控制台显示文件的位置:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
NSLog(@"redirecting STDERR: %@", logPath);
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
我认为最健壮的解决方案是使用一个日志库(例如CocoaLumberjack ),并将其配置为您喜欢的任何目的地。
发布于 2017-12-13 23:02:20
为什么不使用Console.app
?一种很好的查看和grep日志的方式,而不是xCode的调试窗口或终端。默认情况下,这是macOS的一部分。
如果你有C的printf语句,那么下面的代码包含了很多有用的信息:Get printf on Console.app
https://stackoverflow.com/questions/1910177
复制相似问题