Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用printf调试真实设备的iOS_Ios_Objective C_Debugging_Printf - Fatal编程技术网

使用printf调试真实设备的iOS

使用printf调试真实设备的iOS,ios,objective-c,debugging,printf,Ios,Objective C,Debugging,Printf,在Xcode Organizer中,控制台-我可以读取NSLog输出,但不能读取printf()。这是否可以像在模拟器中一样,在真实设备上读取printf()结果?Skippy,printf()是c的输出语句,而不是目标c,因此在真实设备中printf()也不起作用。最简单的解决方案是在项目中全局重载printf函数,并用NSLog输出替换它 int printf(const char * __restrict format, ...) { va_list args; va_s

在Xcode Organizer中,控制台-我可以读取
NSLog
输出,但不能读取
printf()
。这是否可以像在模拟器中一样,在真实设备上读取
printf()
结果?

Skippy,printf()是c的输出语句,而不是目标c,因此在真实设备中printf()也不起作用。

最简单的解决方案是在项目中全局重载printf函数,并用NSLog输出替换它

int printf(const char * __restrict format, ...)
{ 
    va_list args;
    va_start(args,format);    
    NSLogv([NSString stringWithUTF8String:format], args) ;    
    va_end(args);
    return 1;
}

您可以运行以下命令以仅打印到设备的控制台:

syslog(LOG_WARNING, "log string");

您还需要#包括明确声明syslog和LOG#u警告

,正如Nick Lockwood在上面的评论中所说,printf打印到stdout,而NSLog打印到stderr。您可以使用fprintf打印到stderr(Xcode控制台),而不是使用printf,如下所示:

fprintf(stderr, "This prints to the Xcode debug console");

如果你能解释一下为什么要这样做,也许会有帮助?为什么需要使用printf而不是NSLog()?是因为您使用的库包含printf()语句吗?因为我的代码中最大的部分是C代码。通用版本在windoz、droid、symbian、iOS等环境下运行,printf()在iOS模拟器下工作,在XCode中。Objective-C是C的严格超集,因此printf()非常有效。但是NSLog()在幕后的作用比printf()多,这可能是Skippy遇到问题的原因。我相信问题实际上是printf打印到stdout,而NSLog打印到stderr.Nick,fprintf(stderr,format,args);不能在XCode组织者的控制台下工作。Sohaib,非常感谢。这个解决方案工作得很好,我可以保留所有C代码而不做任何更改:)您可以使用标准日志代码,而不必显式声明它们。我想是的,正如我所说,syslog和log_WARNING在sys/syslog.h中显式声明(include的名称不可见,因为不正确地使用了<和>)在iOS 10上,标准输出被发送到Xcode,因此不再需要系统日志。@Sergei现在在Xcode 9.2上为我工作。请注意,NSLog将一些额外的信息作为前缀添加到输出中。但是,fprintf只记录作为参数传递的内容。fprintf本身也不打印\n。