init elowdb go-port commit

This commit is contained in:
41 changed files with 7273 additions and 0 deletions

219
DEBUG.md Normal file
View File

@@ -0,0 +1,219 @@
# Отладка 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...)
}
}
```