# 调试指南 本文档介绍如何在开发过程中进行调试,包括断点调试、日志调试等方法。 ## 调试方式概览 ### 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 /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. 参考项目文档和代码注释