# VS Code 调试指南

## 前置要求

确保已安装以下 VS Code 扩展：

1. **Extension Pack for Java** (Microsoft)
   - 包含：Language Support for Java, Debugger for Java, Maven for Java 等
2. **Spring Boot Extension Pack** (VMware)
   - 包含：Spring Boot Tools, Spring Initializr 等

安装方式：
- 按 `Ctrl+Shift+X` 打开扩展面板
- 搜索 "Extension Pack for Java" 并安装
- 搜索 "Spring Boot Extension Pack" 并安装

## 一、Debug 运行（推荐）

### 方法 1：使用侧边栏（最简单）

1. **打开运行和调试面板**：
   - 快捷键：`Ctrl+Shift+D` (Windows/Linux) 或 `Cmd+Shift+D` (Mac)
   - 或点击左侧活动栏的「运行和调试」图标

2. **选择配置**：
   - 在顶部下拉框选择：`Debug Spring Boot App (Dev)`

3. **开始调试**：
   - 点击绿色的「启动调试」按钮（三角形）
   - 或按 `F5`

4. **设置断点**：
   - 在代码行号左侧点击，出现红点即为断点
   - 例如在 Controller 方法中打断点

5. **调试操作**：
   - `F5` - 继续执行
   - `F10` - 单步跳过
   - `F11` - 单步进入
   - `Shift+F11` - 单步跳出
   - `Shift+F5` - 停止调试

### 方法 2：右键快速启动

1. **打开主类**：
   - 打开 `src/main/java/org/springblade/Application.java`

2. **右键运行**：
   - 在编辑器中右键
   - 选择 `Run Java` 或 `Debug Java`

### 方法 3：使用命令面板

1. 按 `Ctrl+Shift+P` (或 `Cmd+Shift+P`)
2. 输入 `Java: Run`
3. 选择 `Debug Spring Boot App (Dev)`

## 二、普通运行（无调试）

### 使用终端运行

```bash
# 在 VS Code 集成终端中（Ctrl+`）
cd /remote_dev/martial/martial-master

# 加载 Java 环境
source ~/.sdkman/bin/sdkman-init.sh

# 运行应用
mvn spring-boot:run
```

### 使用 Maven 侧边栏

1. 点击左侧 Maven 图标（M）
2. 展开 `blade-api` → `Plugins` → `spring-boot`
3. 右键 `spring-boot:run` → `Run Maven Goal`

## 三、构建任务

按 `Ctrl+Shift+B` 可以快速访问构建任务：

- **Maven: Clean** - 清理 target 目录
- **Maven: Compile** - 编译项目
- **Maven: Package (Skip Tests)** - 打包（默认任务）
- **Maven: Install BladeX Framework** - 编译 BladeX 框架依赖
- **Spring Boot: Run Dev** - 后台运行开发环境
- **Kill Java Process on Port 8123** - 停止占用 8123 端口的进程

## 四、端口转发设置

### 自动转发（推荐）

VS Code Remote SSH 会自动检测端口 8123，只需：

1. 应用启动后，底部会出现提示
2. 点击「在浏览器中打开」即可

### 手动添加端口

1. **打开端口面板**：
   - 按 `Ctrl+Shift+P`
   - 输入 `Forward a Port`
   - 输入 `8123`

2. **或使用端口视图**：
   - 点击底部状态栏的「端口」标签
   - 点击「+」添加端口
   - 输入 `8123`

3. **访问应用**：
   - 浏览器访问：`http://localhost:8123/doc.html`
   - Knife4j API 文档自动打开

### 批量转发（开发常用端口）

在端口面板添加：
- `8123` - Spring Boot 应用
- `33066` - MySQL
- `63379` - Redis

## 五、调试配置说明

已配置的调试选项：

### 1. Debug Spring Boot App (Dev)
- **用途**：开发环境调试
- **配置文件**：application-dev.yml
- **快捷键**：F5 启动

### 2. Debug Spring Boot App (Test)
- **用途**：测试环境调试
- **配置文件**：application-test.yml

### 3. Debug Current Java File
- **用途**：调试单个 Java 文件（有 main 方法）
- **使用**：打开文件后按 F5

### 4. Attach to Remote JVM
- **用途**：连接到远程 JVM 进程
- **端口**：5005
- **使用场景**：当应用已在运行时附加调试器

## 六、常见问题

### 问题 1：找不到主类

**解决方案**：
```bash
# 清理并重新编译
mvn clean compile

# 或在 VS Code 中
Ctrl+Shift+P -> Java: Clean Java Language Server Workspace
```

### 问题 2：端口 8123 已被占用

**解决方案**：
```bash
# 查找占用端口的进程
lsof -i:8123

# 或使用配置的任务
Ctrl+Shift+P -> Tasks: Run Task -> Kill Java Process on Port 8123
```

### 问题 3：Maven 依赖未找到

**解决方案**：
```bash
# 先编译 BladeX 框架
cd /remote_dev/martial/martial-tool
mvn clean install -DskipTests

# 或使用任务
Ctrl+Shift+P -> Tasks: Run Task -> Maven: Install BladeX Framework
```

### 问题 4：断点不生效

**原因**：代码未重新编译

**解决方案**：
- 停止调试 (Shift+F5)
- 重新编译 (Ctrl+Shift+B)
- 再次启动调试 (F5)

### 问题 5：MySQL/Redis 连接失败

**检查服务**：
```bash
# MySQL
docker ps --filter "name=dev-mysql"

# Redis
docker ps --filter "name=dev-redis"

# 如未运行，启动它们
docker start dev-mysql dev-redis
```

## 七、调试技巧

### 1. 条件断点
- 在断点上右键 → `Edit Breakpoint`
- 输入条件，例如：`userId == 1`

### 2. 日志断点
- 右键断点 → `Edit Breakpoint`
- 勾选 `Log Message`
- 输入消息，例如：`User ID: {userId}`

### 3. 异常断点
- 调试面板 → `BREAKPOINTS` → 点击 `+`
- 选择 `Java Exception Breakpoints`
- 输入异常类名，如：`NullPointerException`

### 4. 查看变量
- 鼠标悬停在变量上查看值
- 或在左侧 `VARIABLES` 面板查看所有变量
- 右键变量 → `Copy Value` 复制值

### 5. 表达式求值
- 调试时，点击 `DEBUG CONSOLE`
- 输入表达式并执行，例如：
  ```java
  user.getName()
  list.size()
  ```

### 6. 热重载（Spring Boot DevTools）
- 修改代码后自动重启应用
- 已在 `pom.xml` 中配置（如果需要）

## 八、快捷键速查表

| 操作 | Windows/Linux | Mac |
|------|---------------|-----|
| 开始调试 | F5 | F5 |
| 停止调试 | Shift+F5 | Shift+F5 |
| 单步跳过 | F10 | F10 |
| 单步进入 | F11 | F11 |
| 单步跳出 | Shift+F11 | Shift+F11 |
| 继续执行 | F5 | F5 |
| 切换断点 | F9 | F9 |
| 打开调试面板 | Ctrl+Shift+D | Cmd+Shift+D |
| 打开终端 | Ctrl+` | Ctrl+` |
| 命令面板 | Ctrl+Shift+P | Cmd+Shift+P |
| 构建任务 | Ctrl+Shift+B | Cmd+Shift+B |

## 九、开发工作流

### 典型开发流程：

1. **启动服务**：
   ```bash
   # 确保 MySQL 和 Redis 运行
   docker ps
   ```

2. **开始调试**：
   - 按 `F5` 启动应用
   - 等待应用启动（看底部终端日志）

3. **转发端口**：
   - VS Code 自动转发 8123
   - 或手动添加

4. **访问应用**：
   - 浏览器：`http://localhost:8123/doc.html`

5. **设置断点**：
   - 在 Controller 或 Service 方法中打断点

6. **测试 API**：
   - 在 Knife4j 界面发起请求
   - VS Code 会在断点处暂停

7. **修改代码**：
   - 停止调试 (Shift+F5)
   - 修改代码
   - 重新启动调试 (F5)

8. **查看日志**：
   - 集成终端显示应用日志
   - 或查看 `application.log` 文件

## 十、推荐扩展

除了必需的扩展，还推荐：

- **REST Client** - 直接在 VS Code 测试 API
- **Database Client** - 连接 MySQL 查看数据
- **GitLens** - Git 增强工具
- **Error Lens** - 内联显示错误
- **Better Comments** - 增强注释高亮
- **Material Icon Theme** - 美化文件图标

---

**快速开始：按 F5 即可开始调试！**
