来自C代码的NSLog样式调试消息

时间:2011-12-04 01:10:13

标签: iphone objective-c c ios

我在静态库中有一些C代码,我正在编译成iPhone应用程序。我想将一些调试消息打印到控制台;是否有像我应该使用的NSLog?我猜测NSLog只适用于程序的Objective-C部分。

编辑:fprintf(stdout,fmt ...)和fprintf(stderr,fmt ...)也不起作用..任何想法他们为什么不这样做?他们应该工作吗?

8 个答案:

答案 0 :(得分:10)

你可以随时做经典:

fprintf(stderr, "hi, this is a log line: %s", aStringVariable);

答案 1 :(得分:4)

如果混合使用Objective-C代码,可以为NSLog创建一个包装器:

log.h

void debug(const char *message, ...) __attribute__((format(printf, 1, 2)));

log.m

#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 以便显式声明 syslog 和 LOG_WARNING