0

如何诊断 log log 函数错误,即返回负值时:

/*
 * Send a formatted string to the log, used like printf(fmt,...)
 */
int __android_log_print(int prio, const char *tag,  const char *fmt, ...);

谢谢!

4

1 回答 1

1

简短的回答:检查 errno。

长答案:出现 __android_log_print 可以返回负值的两个原因。第一个是如果它无法打开任何用于写入的日志文件(/dev/log/main、/dev/log/radio 或 /dev/log/events)。第二个是如果 write() 系统调用返回一个负数。

__android_log_print 返回负值后,是否设置了errno?如果是这样,它的值应该给你一些关于哪里出了问题的信息。如果 errno 为零,您的日志调用可能会在 __write_to_log_null 中结束,您应该调查您的程序打开这些 /dev/log 文件的能力。

如果设置了 errno,则可能是在尝试打开日志文件时设置了它。您应该能够通过设置 errno = 0 来隔离这种情况,然后使用错误的 log_id(第一个参数)调用 __android_log_bug_write。为了使它有用,它需要是对任何日志记录函数的第一次调用 - 否则文件打开阶段将会过去。显然,这仅在 errno 设置为可能在写入时间或打开时间设置的情况下才有必要。

这个答案来自 system/core/liblog/logd_write.c。

于 2012-07-03T07:12:07.103 回答