5.7 KiB
5.7 KiB
Отладка LineDB
Этот документ описывает различные способы отладки проекта LineDB.
Быстрый старт
1. Отладка в VS Code
- Откройте проект в VS Code
- Нажмите
F5или выберите "Run and Debug" в боковой панели - Выберите одну из конфигураций:
- Debug LineDB Simple Test - отладка простого теста
- Debug LineDB Tests - отладка тестов
- Debug LineDB Example - отладка примера
2. Отладка через Makefile
# Отладка простого теста
make debug-simple
# Отладка тестов
make debug-tests
# Отладка примера
make debug-example
# Запуск без отладки
make run-simple
3. Отладка через скрипт
# Отладка простого теста
./debug.sh simple
# Отладка тестов
./debug.sh tests
# Отладка примера
./debug.sh example
Инструменты отладки
Delve (dlv)
Delve - это отладчик для Go. Устанавливается автоматически при использовании Makefile или скрипта.
Основные команды Delve:
# Установка
go install github.com/go-delve/delve/cmd/dlv@latest
# Отладка программы
dlv debug main.go
# Отладка тестов
dlv test ./tests/... -- -v
# Отладка с аргументами
dlv debug main.go -- --arg1 --arg2
Команды внутри Delve:
break main.main # Установить точку останова в main
break pkg/linedb/line_db.go:30 # Установить точку останова на строке 30
continue # Продолжить выполнение
next # Следующая строка
step # Войти в функцию
print variable # Вывести значение переменной
vars # Показать все переменные
goroutines # Показать горутины
stack # Показать стек вызовов
quit # Выйти из отладчика
VS Code
VS Code предоставляет удобный интерфейс для отладки Go приложений.
Конфигурации отладки:
Debug LineDB Simple Test- отладкаdebug_main.goDebug LineDB Tests- отладка тестовDebug LineDB Example- отладка примера
Файлы для отладки
debug_main.go
Содержит подробный тест с отладочной информацией, который проверяет:
- Инициализацию базы данных
- Вставку данных
- Чтение данных
- Фильтрацию
- Обновление данных
simple.go
Простой тест для быстрой проверки функциональности.
tests/linedb_test.go
Официальные тесты проекта.
Переменные окружения
# Включить отладочный режим
DEBUG=true make run-simple
# Отладка с переменными окружения
./debug.sh env
Точки останова
Рекомендуемые места для установки точек останова:
- Инициализация базы данных:
// pkg/linedb/line_db.go:61
func (db *LineDb) Init(force bool, initOptions *LineDbInitOptions) error
2 Вставка данных:
// pkg/linedb/line_db.go:140
func (db *LineDb) Insert(data any, collectionName string, options LineDbAdapterOptions) error
3 Чтение данных:
// pkg/linedb/line_db.go:123
func (db *LineDb) Read(collectionName string, options LineDbAdapterOptions) ([]any, error)
4 Фильтрация:
// pkg/linedb/line_db.go:343
func (db *LineDb) ReadByFilter(filter any, collectionName string, options LineDbAdapterOptions) ([]any, error)
Отладка проблем
Проблема: Программа зависает
-
Проверьте кэш:
// pkg/linedb/cache.go:cleanupLoop func (c *RecordCache) cleanupLoop() -
Проверьте транзакции:
// pkg/linedb/transaction.go func (t *Transaction) IsActive() bool
Проблема: Ошибки при работе с файлами
- Проверьте права доступа к папке
testdata - Убедитесь, что папка существует
- Проверьте логи файловых операций
Проблема: Ошибки кэша
- Проверьте размер кэша
- Проверьте TTL кэша
- Убедитесь, что кэш корректно очищается
Полезные команды
# Очистка и пересборка
make clean && make build
# Проверка кода
make lint
# Форматирование кода
make fmt
# Проверка зависимостей
make deps
# Справка
make help
Логирование
Для добавления отладочной информации используйте:
fmt.Printf("DEBUG: %+v\n", variable)
Или создайте функцию логирования:
func debugLog(format string, args ...any) {
if os.Getenv("DEBUG") == "true" {
fmt.Printf("DEBUG: "+format+"\n", args...)
}
}