220 lines
5.7 KiB
Markdown
220 lines
5.7 KiB
Markdown
# Отладка 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...)
|
||
}
|
||
}
|
||
```
|