我想检查Cpython中dprintf
打印的日志,例如this one,但是这里只有一个dprintf
参数,如何检查这些日志?非常感谢你的帮助。
最佳答案
如果您有一个Python的发布版本,那么dprintf
将被剥离,并且这些语句不会记录日志。无法看到它们的输出。dprintf
是实际上仅在thread.c
中定义的宏。定义是
#ifdef Py_DEBUG
static int thread_debug = 0;
#define dprintf(args) (void)((thread_debug & 1) && printf args)
#define d2printf(args) ((thread_debug & 8) && printf args)
#else
#define dprintf(args)
#define d2printf(args)
#endif
即,如果设置了
Py_DEBUG
并且thread_debug & 1
,则使用printf
将日志打印到标准输出。为此,您需要一个Python的调试版本。如果有调试生成,则可以使用环境变量thread_debug
控制PYTHONTHREADDEBUG
的值:void
PyThread_init_thread(void)
{
#ifdef Py_DEBUG
char *p = Py_GETENV("PYTHONTHREADDEBUG");
if (p) {
if (*p)
thread_debug = atoi(p);
else
thread_debug = 1;
}
#endif /* Py_DEBUG */
if (initialized)
return;
initialized = 1;
dprintf(("PyThread_init_thread called\n"));
PyThread__init_thread();
}
也就是说,变量必须存在于设置为
1
值的变量中,如果设置为例如9,这将同时启用dprintf
和d2printf
。关于python - CPython中的dprintf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54171954/