BodyBalanceEvaluation/DEBUG_GUIDE.md
2025-07-29 18:28:40 +08:00

243 lines
5.2 KiB
Markdown

# 调试指南
本文档介绍如何在开发过程中进行调试,包括断点调试、日志调试等方法。
## 调试方式概览
### 1. 批处理文件调试 (推荐新手)
```bash
# 启动调试模式
./start_debug.bat
```
### 2. Python脚本调试 (推荐)
```bash
# 直接运行调试服务器
python debug_server.py
```
### 3. VS Code调试 (推荐开发者)
- 打开VS Code
- 按F5或点击调试按钮
- 选择"Debug Backend Server"配置
### 4. 命令行调试
```bash
# 激活虚拟环境
backend\venv\Scripts\activate
# 设置环境变量
set FLASK_ENV=development
set FLASK_DEBUG=1
set PYTHONPATH=%cd%
# 启动调试服务器
python -u backend\app.py
```
## 详细调试方法
### VS Code 断点调试
1. **安装Python扩展**
- 确保VS Code已安装Python扩展
2. **打开项目**
```bash
code .
```
3. **设置断点**
- 在代码行号左侧点击设置断点
- 红色圆点表示断点已设置
4. **启动调试**
- 按F5或点击调试面板的播放按钮
- 选择"Debug Backend Server"配置
5. **调试操作**
- F10: 单步跳过
- F11: 单步进入
- Shift+F11: 单步跳出
- F5: 继续执行
- Shift+F5: 停止调试
### PyCharm 调试
1. **打开项目**
- File -> Open -> 选择项目目录
2. **配置Python解释器**
- File -> Settings -> Project -> Python Interpreter
- 选择backend/venv/Scripts/python.exe
3. **创建运行配置**
- Run -> Edit Configurations
- 添加新的Python配置
- Script path: debug_server.py
- Working directory: 项目根目录
4. **设置断点并调试**
- 点击行号左侧设置断点
- 点击调试按钮启动
### 命令行调试
1. **使用pdb调试器**
```python
import pdb
pdb.set_trace() # 在需要调试的地方插入
```
2. **使用ipdb (增强版pdb)**
```bash
pip install ipdb
```
```python
import ipdb
ipdb.set_trace()
```
## 调试配置说明
### 环境变量
- `FLASK_ENV=development`: 启用开发模式
- `FLASK_DEBUG=1`: 启用调试模式
- `PYTHONPATH`: 设置Python模块搜索路径
### 调试端口
- 后端服务: http://127.0.0.1:5000
- 健康检查: http://127.0.0.1:5000/health
- WebSocket: ws://127.0.0.1:5000/socket.io/
## 常见调试场景
### 1. WebSocket连接问题
```python
# 在handle_connect函数中设置断点
@socketio.on('connect')
def handle_connect():
print(f'客户端连接: {request.sid}') # 添加调试输出
# 设置断点在这里
emit('connect_status', {'status': 'connected'})
```
### 2. RTSP流问题
```python
# 在generate_rtsp_frames函数中设置断点
def generate_rtsp_frames():
print(f'RTSP URL: {rtsp_url}') # 调试输出
# 设置断点检查rtsp_url值
cap = cv2.VideoCapture(rtsp_url)
```
### 3. API请求问题
```python
# 在API路由中设置断点
@app.route('/api/patients', methods=['GET'])
def get_patients():
print(f'请求参数: {request.args}') # 调试输出
# 设置断点检查请求参数
```
### 4. 数据库操作问题
```python
# 在数据库操作中设置断点
def get_patients(self, page, size, keyword):
print(f'查询参数: page={page}, size={size}, keyword={keyword}')
# 设置断点检查SQL查询
```
## 日志调试
### 查看日志文件
```bash
# 实时查看日志
tail -f logs/debug.log
tail -f logs/backend.log
```
### 调整日志级别
```python
# 在代码中临时调整日志级别
import logging
logging.getLogger().setLevel(logging.DEBUG)
```
## 前端调试
### 浏览器开发者工具
1. 按F12打开开发者工具
2. Console标签页查看JavaScript错误
3. Network标签页查看网络请求
4. WebSocket连接在Network -> WS中查看
### 前端调试技巧
```javascript
// 在浏览器控制台中测试WebSocket连接
const socket = io('http://127.0.0.1:5000');
socket.on('connect', () => console.log('连接成功'));
socket.emit('start_rtsp', {});
```
## 性能调试
### 使用cProfile
```bash
python -m cProfile -o profile_output.prof debug_server.py
```
### 内存使用监控
```bash
pip install memory-profiler
python -m memory_profiler debug_server.py
```
## 故障排除
### 常见问题
1. **端口被占用**
```bash
netstat -ano | findstr :5000
taskkill /PID <PID> /F
```
2. **模块导入错误**
- 检查PYTHONPATH设置
- 确认虚拟环境已激活
3. **权限问题**
- 以管理员身份运行
- 检查文件夹权限
4. **依赖包问题**
```bash
pip install -r backend/requirements.txt --force-reinstall
```
### 调试检查清单
- [ ] Python虚拟环境已激活
- [ ] 所有依赖包已安装
- [ ] 环境变量设置正确
- [ ] 端口5000未被占用
- [ ] config.ini文件存在且配置正确
- [ ] 日志文件可以正常写入
- [ ] 断点设置在正确位置
## 调试最佳实践
1. **逐步调试**: 从简单的断点开始,逐步深入
2. **日志记录**: 在关键位置添加详细的日志输出
3. **单元测试**: 编写测试用例验证功能
4. **代码审查**: 定期检查代码逻辑
5. **版本控制**: 使用Git跟踪代码变更
## 获取帮助
如果遇到调试问题,可以:
1. 查看logs目录下的日志文件
2. 检查控制台输出信息
3. 使用浏览器开发者工具
4. 参考项目文档和代码注释