VSCode Remote-SSH调试FastAPI时路由内断点无法触发问题排查
VSCode调试FastAPI普通def路由断点不触发问题
问题现象
- 基础调试链路正常:通过VSCode Remote-SSH扩展连接GCloud虚拟机上的代码库运行调试,调试器可以成功命中文件中非路由部分的代码断点,模块初始化阶段的
app = FastAPI()、print('here')位置的断点均可正常触发。 - 异常表现:普通
def定义的路由函数内部的断点始终无法触发,但对应接口可以正常访问并返回预期数据。 - 对照测试:将路由函数从普通
def替换为async def定义后,断点可以正常命中。 - 场景约束:对接SQLite数据库的开发场景下,按照FastAPI官方SQL数据库教程的推荐,默认场景需使用普通
def定义路由,仅在可配置的特定场景下使用async def,因此需要适配普通def路由的调试方案。 - 排查进展:已参考相关技术社区《Debug FastAPI application in VSCode》主题帖提到的各类解决方案,问题仍未解决;初步判断Remote-SSH连接模式不会导致该问题,毕竟非路由部分的断点可正常触发,基础调试链路通畅。
复现代码
直接参照FastAPI官方调试教程编写的测试代码如下:
import uvicorn from fastapi import FastAPI app = FastAPI() # 启动文件时此处的断点可正常触发 print('here') # 启动文件时此处的断点可正常触发 @app.get("/") def root(): a = "a" # 此处的断点无法正常触发 b = "b" + a return {"hello world": b} # 接口可成功返回数据 if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=5002)
当前调试配置
目前使用的是VSCode默认的「Python: Current File」调试配置,对应的launch.json内容如下:
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal" } ] }
内容的提问来源于stack exchange,提问作者SS Shah
相关产品推荐
相关产品推荐

