Сообщить об ошибке.

Функция set_trace_async() модуля pdb в Python

Асинхронная версия pdb.set_trace()

Синтаксис:

import pdb

await pdb.set_trace_async(*, header=None, commands=None)

Параметры:

  • header — необязательный заголовок для вывода при старте отладки.
  • commands — итерируемый объект строк (например, список или кортеж команд), которые будут выполнены при инициализации отладчика.

Возвращаемое значение:

Awaitable-объект (корутина).

Описание pdb.set_trace_async()

Добавлено в Python 3.14

Awaitable-объект pdb.set_trace_async представляет собой асинхронную версию pdb.set_trace(), предназначенную для использования внутри async-функций. Позволяет отлаживать асинхронный код с поддержкой await-выражений.

Ключевые особенности:

  • Запускает интерактивный отладчик внутри асинхронного контекста.
  • Поддерживает выполнение await во время отладки.
  • Сохраняет все стандартные возможности pdb.
  • Всегда использует monitoring-бэкенд (включается автоматически; если выбран другой backend, будет выброшено исключение).

Рекомендации:

  1. Используйте только внутри async-функций.

  2. Для сложной отладки задавайте начальные команды:

    await pdb.set_trace_async(commands=["break 15", "continue"])
    
  3. Указывайте информативные заголовки для ориентации в коде:

    await pdb.set_trace_async(header=f"Отладка {func.__name__}()")
    

Ограничения:

  • Требует Python 3.14+.
  • Работает только с monitoring-бэкендом.
  • Не заменяет синхронный pdb.set_trace() в обычных функциях.

Примечание:
Для возврата к выполнению используйте команду continue в отладчике, как и в синхронной версии.

Примеры использования pdb.set_trace_async()

Базовый пример:

import pdb

async def fetch_data():
    await pdb.set_trace_async()
    # Дальнейший асинхронный код

С дополнительными параметрами:

async def main():
    await pdb.set_trace_async(
        header="--- Точка останова в main() ---",
        commands=["list", "locals"]
    )
    response = await api_call()

Отладка с await:

async def process_items():
    await pdb.set_trace_async()
    items = [await fetch_item(i) for i in range(10)]  # Можно выполнять await