Cloud Run Django应用使用Google Cloud Debugger报No code found at line错误求解
解决方案
1. 调整快照打点位置
你当前打点的第30行是Django ViewSet的类属性赋值语句,这类代码属于模块加载阶段执行的逻辑,不会在请求运行时触发执行,Cloud Debugger快照默认只能捕获请求链路中的运行时代码,因此会判定对应行无执行代码。
你可以做如下修改尝试:
- 把类属性
queryset改为动态方法实现:
class UserViewSet(viewsets.ModelViewSet): # 注释掉原类属性写法 # queryset = User.objects.all() serializer_class = UserSerializer def get_queryset(self): # 在这行打快照即可命中 return User.objects.all()
- 直接将快照打在ViewSet的内置方法(如list/retrieve/create)或者你自定义的业务方法内部行,不要打在类定义、类属性赋值的位置。
2. 对齐源码路径与行号
Cloud Debugger要求你上传的源码和容器内运行的源码路径、行号完全一致,你可以做如下校验:
- 确认Docker构建过程中没有执行代码格式化、空行清理、注释删除等会改变行号的操作,你可以在Dockerfile中加入如下语句,构建时输出目标文件的内容,确认行号和你本地上传的源码完全匹配:
RUN cat -n /app/djangotest/urls.py | grep -A2 -B2 "UserViewSet"
- 上传源码到Cloud Debugger时,务必在项目根目录(对应容器内
/app目录的本地路径)执行上传操作,不要包含额外的上层目录层级,确保源码的相对路径和容器内的绝对路径完全对齐。
3. 调整调试代理配置
- 升级容器内的
google-cloud-debugger依赖到最新正式版,解决Python 3.9版本的兼容问题 - 启动调试代理时显式指定工作目录和路径映射参数,示例如下:
gcloud debug source gen-repo-info-file --output-directory=/app/ python -m googleclouddebugger --working-dir=/app --module=djangotest --version=v1 main.py
- 关闭代理的自动源码拉取功能,手动上传对应部署版本的源码包,避免版本不匹配问题。
4. 临时规避方案
如果上述配置调整后仍未解决,可使用临时方案命中调试点:
- 在你需要调试的代码位置新增一行无业务影响的日志语句,将快照打在新增的日志行上,运行时执行到日志语句时即可触发快照捕获
- 将Cloud Run的实例数临时调整为1,关闭自动扩缩容,避免快照命中到已经销毁的旧实例。
内容的提问来源于stack exchange,提问作者cputoaster
相关产品推荐
相关产品推荐

