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