# Инструкция по использованию отладочных инструментов LineDB

## 🎯 Быстрый старт

### 1. Отладка в VS Code (рекомендуется)

1. Откройте проект в VS Code
2. Нажмите `F5` или выберите "Run and Debug" в боковой панели
3. Выберите одну из конфигураций:
   - **Debug LineDB Debug App** - отладка основного приложения
   - **Debug LineDB Simple Test** - отладка простого теста
   - **Debug LineDB Tests** - отладка тестов
   - **Debug LineDB Example** - отладка примера

### 2. Отладка через командную строку

```bash
# Отладка основного приложения
make debug-simple

# Отладка основного теста
make debug-main

# Отладка тестов
make debug-tests

# Отладка примера
make debug-example
```

### 3. Отладка через скрипт

```bash
# Отладка основного приложения
./debug.sh simple

# Отладка основного теста
./debug.sh main

# Отладка тестов
./debug.sh tests

# Отладка примера
./debug.sh example
```

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

### debug_app.go

Основной файл для отладки с подробной информацией:

- Инициализация базы данных
- Вставка данных
- Чтение данных
- Фильтрация
- Обновление данных
- Подробные логи каждого шага

### debug_main.go

Альтернативный тест с базовой функциональностью

### simple.go

Простой тест для быстрой проверки

### tests/linedb_test.go

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

## 🔧 Команды отладки

### VS Code

- `F5` - Запуск отладки
- `F9` - Установить/снять точку останова
- `F10` - Следующая строка (Step Over)
- `F11` - Войти в функцию (Step Into)
- `Shift+F11` - Выйти из функции (Step Out)
- `Ctrl+Shift+F5` - Перезапуск отладки
- `Shift+F5` - Остановка отладки

### Delve (dlv)

```bash
# Основные команды
break main.main          # Точка останова в main
break pkg/linedb/line_db.go:30  # Точка останова на строке 30
continue                 # Продолжить выполнение
next                     # Следующая строка
step                     # Войти в функцию
print variable           # Вывести значение переменной
vars                     # Показать все переменные
goroutines               # Показать горутины
stack                    # Показать стек вызовов
quit                     # Выйти из отладчика
```

## 🎯 Ключевые точки останова

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

```go
// Инициализация базы данных
pkg/linedb/line_db.go:61

// Вставка данных
pkg/linedb/line_db.go:140

// Чтение данных
pkg/linedb/line_db.go:123

// Фильтрация
pkg/linedb/line_db.go:343

// Обновление данных
pkg/linedb/line_db.go:307

// Удаление данных
pkg/linedb/line_db.go:330
```

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

### Программа зависает

```bash
# Проверьте кэш и очистите данные
make clean
make run-simple
```

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

```bash
# Проверьте права доступа
ls -la testdata/

# Создайте папку заново
mkdir -p testdata
```

### Ошибки кэша

```bash
# Проверьте размер кэша в коде
# Убедитесь, что TTL установлен корректно
```

## 📊 Мониторинг производительности

### Проверка кэша

```go
// В коде добавьте:
fmt.Printf("Cache size: %d\n", db.GetActualCacheSize())
fmt.Printf("Cache limit: %d\n", db.GetLimitCacheSize())
```

### Проверка памяти

```bash
# Запустите с профилированием
go run -memprofile=mem.prof debug_app.go
go tool pprof mem.prof
```

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

### Makefile

```bash
make help          # Показать все команды
make clean         # Очистить данные
make build         # Собрать проект
make test          # Запустить тесты
make lint          # Проверить код
make fmt           # Форматировать код
```

### Скрипт отладки

```bash
./debug.sh         # Показать справку
./debug.sh simple  # Отладка основного приложения
./debug.sh main    # Отладка основного теста
./debug.sh tests   # Отладка тестов
./debug.sh example # Отладка примера
```

## 📖 Дополнительная документация

- `DEBUG.md` - Полная документация по отладке
- `QUICK_DEBUG.md` - Краткая инструкция
- `OPTIMIZATION_SUMMARY.md` - Резюме оптимизаций

## 🚀 Советы по эффективной отладке

1. **Используйте VS Code** для удобной отладки с графическим интерфейсом
2. **Устанавливайте точки останова** в ключевых местах кода
3. **Изучите переменные** во время отладки для понимания состояния
4. **Используйте логи** для отслеживания выполнения
5. **Проверяйте кэш** при проблемах с производительностью
6. **Очищайте данные** между тестами с помощью `make clean`
