243 lines
5.2 KiB
Markdown
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_video_frames函数中设置断点
|
|
def generate_video_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_video', {});
|
|
```
|
|
|
|
## 性能调试
|
|
|
|
### 使用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. 参考项目文档和代码注释 |