Files
elowdb-go/DEBUG.md

220 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отладка 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...)
}
}
```