Чтение логов¶
Панель Logs — Ctrl+L — основной диагностический инструмент. Эта страница о том, как превратить её содержимое в диагноз.
Включайте категории в таком порядке¶
Начинайте узко и расширяйте по необходимости.
1. Session — смены фазы, старт и смерть адаптера, отказы DAP-запросов.
Большинство проблем названы здесь прямым текстом, одной строкой.
2. Adapter — собственный stderr адаптера. Здесь появляются жалобы,
специфичные для языка: отсутствующий модуль Python, расхождение версий Go,
ненайденная разделяемая библиотека.
3. Program — stdout и stderr вашей программы. Полезно, чтобы убедиться, что
программа вообще выполнялась, и понять, докуда дошла.
4. DAP — полная трасса запросов. Выключена по умолчанию как самая шумная.
Записи собираются даже при выключенной категории
Включить DAP можно после аварии и всё равно увидеть, что произошло.
Воспроизводить сбой с включённой трассировкой не нужно.
Как читать хронологию¶
Метки времени отсчитываются от начала сессии — +MM:SS.mmm — и начинаются
заново после разделителя ── новая сессия ──.
Относительное время отвечает на вопрос, который на самом деле возникает перед зависшим отладчиком: сколько уже висит?
Здоровый старт выглядит примерно так:
+00:00.010 SESSION старт сессии, профиль "api"
+00:00.050 SESSION building
+00:02.100 SESSION адаптер dlv запущен (pid 43912)
+00:02.300 SESSION launch
+00:02.900 SESSION остановка на cmd/api/main.go:42
Какой строки не хватает, та и указывает, куда смотреть:
| Последняя увиденная строка | Проблема в |
|---|---|
| старт сессии | конфиге или профиле |
| building | компиляторе |
| адаптер запущен | старте самого адаптера |
| launch | теле запроса или программе |
Долгий запрос сообщает о себе сам¶
Каждые 30 секунд неотвеченный запрос отмечается:
+00:30.001 SESSION запрос `launch` идёт 30 s (mode=debug, program=/repo/cmd/api):
dlv (pid 43912) ещё не ответил; таймаут через 90 s
Всё, что нужно для решения, есть в этой строке: сколько уже ждём, сколько
осталось и какой процесс держит ответ. По pid его видно в ps:
Если он занят компиляцией, ждать правильно — а лучше вынести сборку из сессии, см. Настройка → Профили. Если он простаивает, значит адаптер застрял и ответа уже не будет.
Буфер, копирование и сохранение¶
Лента держит последние 20 000 записей.
| Действие | Что делает |
|---|---|
| Copy | копирует видимое, с учётом фильтров |
| Save | пишет весь буфер, независимо от фильтров, в <проект>/.bugsaur/logs/<unix-мс>.log |
Для отчёта о проблеме всегда пользуйтесь Save. Фильтры, скрывшие причину от вас, скроют её и от того, кто будет читать отчёт.
Прокрутка¶
Лента следует за хвостом. G отключает слежение, чтобы можно было читать, не уезжая вниз; Shift+G возвращает его и прыгает в конец.
Секретов в логе не бывает¶
Значения env не появляются — тела DAP-запросов не печатаются. Это инвариант, а
не случайность: трассировку запросов нельзя расширять, не вычистив
предварительно значения env. По той же причине в сообщении о долгом запросе
есть только mode и program.
Так что сохранённый лог можно прикладывать к issue, если речь про env. При
этом в нём остаются ваши пути, имена профилей и вывод программы — просмотрите
глазами перед публикацией.
Что приложить к сообщению об ошибке¶
- Сохранённый файл лога — весь буфер.
- Нужный профиль из
.bugsaur/config.toml. - Версию адаптера:
- Чего вы ждали и что произошло вместо этого.