Отладочные сообщения в стиле NSLog из кода C - PullRequest
11 голосов
/ 04 декабря 2011

У меня есть некоторый C-код в статической библиотеке, которую я компилирую в приложение для iPhone.Я хотел бы напечатать некоторые сообщения отладки на консоль;что-то вроде NSLog я должен использовать?Я предполагаю, что NSLog работает только для частей программы Objective-C.

РЕДАКТИРОВАТЬ: fprintf (stdout, fmt ...) и fprintf (stderr, fmt ...) тоже не работают .. есть идеи, почему они не работают?Должны ли они работать?

Ответы [ 7 ]

10 голосов
/ 04 декабря 2011

всегда можно сделать классику:

fprintf(stderr, "hi, this is a log line: %s", aStringVariable);
4 голосов
/ 14 марта 2015

Вы можете создать оболочку для NSLog, если вы смешиваете код Objective C следующим образом:

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 голосов
/ 11 января 2012

Хотя printf будет отображаться при отладке из XCode, он не будет отображаться в консоли органайзера. Вы можете использовать то, что использует NSLog: CFLog или syslog .

1 голос
/ 12 января 2017

Другое решение:

#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");
0 голосов
/ 15 марта 2015
#include <asl.h>
...
asl_log(NULL, NULL, ASL_LEVEL_ERR, "Hi There!");

Обратите внимание, что более низкие уровни приоритета, такие как ASL_LEVEL_INFO, могут не отображаться в консоли.

0 голосов
/ 14 марта 2015

Возможно, вам понадобится средство Apple System Log, чтобы получить вывод на консоль устройства.

Проверьте функции в usr / asl.h.

asl_open
asl_new
asl_set
asl_log
asl_free
0 голосов
/ 04 декабря 2011

Вы должны увидеть операторы printf или fprintf. Попробуйте запустить некоторый код в библиотеке, но из терминала, если не появится что-то. Гораздо более сложный (и даже глупый / глупый / неправильный) метод, который я гарантирую вам, будет работать:

sprintf(message,"This is a log line %s",someString);
system("echo %s",message);

Если это не сработает, возможно, в вашем коде есть что-то странное.

Примечание: вероятно, это будет работать только в симуляторе.

...