init elowdb go-port commit
This commit is contained in:
219
DEBUG.md
Normal file
219
DEBUG.md
Normal 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...)
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user