Je travaille sur une classe que je vais utiliser à mes propres fins de débogage. Je l'intention d'être une version sur le périphérique de la console de débogage. La plupart du temps, je m'intéresse à la capture des instructions NSLog(). Peu importe ce que je connecte à la console, j'obtiens seulement 0xFF de fgetc()
. Ce que je m'attends à voir de fgetc()
est un caractère qui a été envoyé à stderr depuis le dernier appel à update
. Ci-dessous une sous-classe de UITextView:lecture périodique de l'iPhone stderr
stdErrFP
est défini dans l'en-tête comme: FILE* stdErrFP;
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
stdErrFP = fdopen (fileno (stderr) , "w");
if (!stdErrFP)
NSLog(@"errno - %s", strerror(errno));
[self update];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(makeSomeNoise) userInfo:nil repeats:YES];
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(update) userInfo:nil repeats:YES];
}
return self;
}
-(void) update{
char errBuff[2] = {0x00, '\0'};
do{
errBuff[0] = fgetc(stdErrFP);
self.text = [NSString stringWithFormat:@"%@%@", self.text, [NSString stringWithCString:errBuff]];
}while (errBuff[0] != EOF);
}
-(void) makeSomeNoise{
CFShow([NSString stringWithString:@"noisy CFFunction"]);
NSLog(@"noisy NSLog");
char message[] = "noisy fprintf";
fprintf(stderr, message);
}
-(void)makeSomeNoise
a tellement de différents types de journaux, parce Eric Sadun wrote that NSLog doesn't log to stderr, donc je voulais exclure cette possibilité. Je ne suis pas sûr si cela est lié à mon problème, mais j'ai remarqué que fdopen()
échoue toujours à moins que le drapeau est "w", cela ne peut pas être juste.
MISE À JOUR: pour fdopen()
J'ai eu tort, ce n'est pas que "w" fonctionne, c'est que seulement "r" ne fonctionne pas. (c'est-à-dire à la fois "a" et "w" travail). L'erreur quand j'utilise "r" est: No such file or directory
. Donc, il semble que je ne me connecte pas correctement à stderr. StackOverflow Genius, aidez s'il vous plaît.