我想检查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,这将同时启用dprintfd2printf

关于python - CPython中的dprintf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54171954/

10-12 16:12