Логи и диагностика¶
Панель Logs — то место, где выясняется, чем на самом деле заняты отладчик и адаптер. Когда что-то не работает, смотреть нужно сюда в первую очередь. Открывается по Ctrl+L.
Четыре источника в одной ленте¶
Лента сводит четыре категории, у каждой свой тумблер:
| Категория | Что несёт |
|---|---|
Program |
stdout и stderr отлаживаемой программы |
Session |
смены фазы, старт и смерть адаптера, отказы DAP-запросов |
DAP |
полная трасса запросов и ответов |
Adapter |
stderr самого адаптера (dlv, codelldb, debugpy) |
DAP выключена по умолчанию как самая шумная. Записи при этом собираются
независимо от тумблеров, поэтому включить её можно уже после аварии и всё
равно увидеть, что произошло.
Как читать время¶
Время показывается от начала сессии — +MM:SS.mmm — и отсчёт начинается заново
после разделителя ── новая сессия ──.
Относительное время точнее отвечает на вопрос, который на самом деле возникает перед зависшим отладчиком: сколько уже висит?
Долгий запрос сообщает о себе сам¶
Каждые 30 секунд неотвеченный запрос отмечается в категории SESSION:
+00:30.001 SESSION запрос `launch` идёт 30 s (mode=debug, program=/repo/cmd/api):
dlv (pid 43912) ещё не ответил; таймаут через 90 s
+01:00.002 SESSION запрос `launch` идёт 60 s (mode=debug, program=/repo/cmd/api):
dlv (pid 43912) ещё не ответил; таймаут через 60 s
Молчащий отладчик неотличим от зависшего, поэтому в строке есть всё, что нужно
для решения: сколько уже ждём, сколько осталось, какой процесс держит ответ —
по pid его видно в ps — и что именно запускается.
Буфер, копирование и сохранение¶
Лента держит последние 20 000 записей.
| Действие | Что делает |
|---|---|
| Copy | кладёт в буфер обмена то, что видно сейчас, с учётом фильтров |
| Save | пишет весь буфер, независимо от фильтров, в <проект>/.bugsaur/logs/<unix-мс>.log |
Для отчёта о проблеме пользуйтесь Save: фильтры, скрывшие причину от вас, скроют её и от того, кто будет читать отчёт.
Прокрутка¶
Лента по умолчанию следует за хвостом. G отключает слежение, чтобы можно было читать, не уезжая вниз; Shift+G возвращает его и прыгает в конец.
Секреты в лог не попадают¶
Значения env не появляются ни в логе, ни в этой панели: тела DAP-запросов не
печатаются. Это инвариант, а не побочное свойство — трассировку запросов нельзя
расширять, не вычистив предварительно значения env.
Именно поэтому в сообщении о долгом запросе из тела берутся только mode и
program.
Что приложить к сообщению об ошибке¶
- Save лога — весь буфер, а не скриншот видимой части.
- Нужный профиль из
.bugsaur/config.toml. - Версию адаптера (
dlv version,codelldb --version,python3 -m debugpy --version). - Чего вы ждали и что произошло вместо этого.
Подробнее о том, как превратить лог в диагноз: Диагностика → Чтение логов.