我在静态库中有一些C代码,我正在编译成iPhone应用程序。我想将一些调试消息打印到控制台;是否有像我应该使用的NSLog?我猜测NSLog只适用于程序的Objective-C部分。
编辑:fprintf(stdout,fmt ...)和fprintf(stderr,fmt ...)也不起作用..任何想法他们为什么不这样做?他们应该工作吗?答案 0 :(得分:10)
你可以随时做经典:
fprintf(stderr, "hi, this is a log line: %s", aStringVariable);
答案 1 :(得分:4)
如果混合使用Objective-C代码,可以为NSLog创建一个包装器:
void debug(const char *message, ...) __attribute__((format(printf, 1, 2)));
#import <Foundation/Foundation.h>
#import "log.h"
void debug(const char *message,...)
{
va_list args;
va_start(args, message);
NSLog(@"%@",[[NSString alloc] initWithFormat:[NSString stringWithUTF8String:message] arguments:args]);
va_end(args);
}
然后,在你的C文件中:
#include "log.h"
...
debug("hello world! variable: %d", num);
答案 2 :(得分:2)
如果您从XCode进行调试,printf会显示,但它不会显示在管理器控制台中。您可以使用NSLog使用的内容:CFLog or syslog。
答案 3 :(得分:1)
其他解决方案:
#include <CoreFoundation/CoreFoundation.h>
extern "C" void NSLog(CFStringRef format, ...);
#define MyLog(fmt, ...) \
{ \
NSLog(CFSTR(fmt), ##__VA_ARGS__); \
}
MyLog("val = %d, str = %s", 123, "abc");
答案 4 :(得分:0)
您应该能够看到printf或fprintf语句。尝试运行库中的一些代码,但是从终端运行,如果没有,应该出现一些代码。一个更复杂(甚至是愚蠢/愚蠢/错误)的方法,我将保证你将会工作:
sprintf(message,"This is a log line %s",someString);
system("echo %s",message);
如果这不起作用,那么你的代码中可能会有一些奇怪的东西。
注意:这可能仅适用于模拟器。
答案 5 :(得分:0)
您可能需要使用Apple System Log工具将输出输出到设备控制台。
检查usr / asl.h中的函数。
asl_open
asl_new
asl_set
asl_log
asl_free
答案 6 :(得分:0)
#include <asl.h>
...
asl_log(NULL, NULL, ASL_LEVEL_ERR, "Hi There!");
请注意,ASL_LEVEL_INFO
等较低优先级可能不会显示在控制台中。
答案 7 :(得分:0)
如果您从 XCode 调试,printf 会显示,但它不会显示在 Organizer Console 中。您可以运行以下命令仅打印到设备的控制台:
syslog(LOG_WARNING, "log string");
您还需要 #include