我想检查dprintf
在Cpython中打印的日志,例如this one,但是这里dprintf
只有一个参数,如何检查那些日志?非常感谢你的帮助。
答案 0 :(得分:3)
如果您拥有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的调试版本。如果您具有调试版本,则可以使用环境变量PYTHONTHREADDEBUG
控制thread_debug
的值:
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
。
答案 1 :(得分:1)
我认为您需要重新编译Python才能看到这些内容。配置时,请提供--with-pydebug
选项。它应该标准输出。您可能还需要将环境变量PYTHONTHREADDEBUG设置为1,但这不是必需的。
https://docs.python.org/3/using/cmdline.html#debug-mode-variables