Files
elowdb-go/DEBUG.md

5.7 KiB
Raw Permalink Blame History

Отладка 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

# Отладка простого теста
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.go
  • Debug LineDB Tests - отладка тестов
  • Debug LineDB Example - отладка примера

Файлы для отладки

debug_main.go

Содержит подробный тест с отладочной информацией, который проверяет:

  • Инициализацию базы данных
  • Вставку данных
  • Чтение данных
  • Фильтрацию
  • Обновление данных

simple.go

Простой тест для быстрой проверки функциональности.

tests/linedb_test.go

Официальные тесты проекта.

Переменные окружения

# Включить отладочный режим
DEBUG=true make run-simple

# Отладка с переменными окружения
./debug.sh env

Точки останова

Рекомендуемые места для установки точек останова:

  1. Инициализация базы данных:
   // 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)

Отладка проблем

Проблема: Программа зависает

  1. Проверьте кэш:

    // pkg/linedb/cache.go:cleanupLoop
    func (c *RecordCache) cleanupLoop()
    
  2. Проверьте транзакции:

    // pkg/linedb/transaction.go
    func (t *Transaction) IsActive() bool
    

Проблема: Ошибки при работе с файлами

  1. Проверьте права доступа к папке testdata
  2. Убедитесь, что папка существует
  3. Проверьте логи файловых операций

Проблема: Ошибки кэша

  1. Проверьте размер кэша
  2. Проверьте TTL кэша
  3. Убедитесь, что кэш корректно очищается

Полезные команды

# Очистка и пересборка
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...)
    }
}