Если у вас есть выпущенная версия Python, dprintf
s удаляются, и эти операторы не регистрируют. Невозможно увидеть выходные данные из них.
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
.