如何打开chromium里面的log?
我们看到代码里面很多LOG(),所以要先找到LOG的定义。
LOG定义在Assertions.h里面。LOG是由条件宏控制的
如果非debug版本,如下代码
#ifdef NDEBUG //release版本会定义NDEBUG=1
/* Disable ASSERT* macros in release mode. */
#define ASSERTIONS_DISABLED_DEFAULT 1
#else
#define ASSERTIONS_DISABLED_DEFAULT 0
#endif
LOG宏定义如下
/* LOG */
#if COMPILER(MSVC7_OR_LOWER)
#define LOG() ((void)0)
#elif COMPILER(WINSCW)
#define LOG(arg...) ((void)0)
#elif LOG_DISABLED
#define LOG(channel, ...) ((void)0)
#else
#define LOG(channel, ...) WTFLog(&JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, channel), __VA_ARGS__)
#define JOIN_LOG_CHANNEL_WITH_PREFIX(prefix, channel) JOIN_LOG_CHANNEL_WITH_PREFIX_LEVEL_2(prefix, channel)
#define JOIN_LOG_CHANNEL_WITH_PREFIX_LEVEL_2(prefix, channel) prefix ## channel
#endif
由于LOG_DISABLED就是1,LOG就是void
即使debug版本,LOG如果要输出,还需要打开channel。channel的打开需要命令行里面加上 "--webcore-log-channels",后跟要打开的channel
代码如下
WebKitThread::InternalWebKitThread::Init
webkit_glue::EnableWebCoreLogChannels(
CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
switches::kWebCoreLogChannels));
太麻烦了
在release版本里面,我们自己定义LOG吧
简单定义
#undef LOG
#define LOG(channel, ...) \
do { \
printf(__VA_ARGS__); \
printf("\n"); \
} while(0)