Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 对无服务器lambda flask应用程序使用VS代码调试器_Debugging_Visual Studio Code_Aws Lambda_Wsgi_Aws Serverless - Fatal编程技术网

Debugging 对无服务器lambda flask应用程序使用VS代码调试器

Debugging 对无服务器lambda flask应用程序使用VS代码调试器,debugging,visual-studio-code,aws-lambda,wsgi,aws-serverless,Debugging,Visual Studio Code,Aws Lambda,Wsgi,Aws Serverless,我一直在使用无服务器框架、Flask和SLS WSGI在AWS上创建一些Lambda函数。一些dynamodb表,但在这种情况下这不重要 我面临的问题是,我无法端到端地调试整个程序,我能够运行sls wsgi-service并运行lambda函数的本地实例,快乐时光。然而,我有点被其他开发工具、语言和IDE(甚至仅仅是Flask本身)宠坏了,它们允许我设置断点并查看范围、步骤等。所以我真的希望在这里也能做到这一点 我尝试在vs代码中的启动配置中启动上面提到的sls命令,但没有成功。接下来我尝试运

我一直在使用无服务器框架、Flask和SLS WSGI在AWS上创建一些Lambda函数。一些dynamodb表,但在这种情况下这不重要

我面临的问题是,我无法端到端地调试整个程序,我能够运行
sls wsgi-service
并运行lambda函数的本地实例,快乐时光。然而,我有点被其他开发工具、语言和IDE(甚至仅仅是Flask本身)宠坏了,它们允许我设置断点并查看范围、步骤等。所以我真的希望在这里也能做到这一点

我尝试在vs代码中的启动配置中启动上面提到的sls命令,但没有成功。接下来我尝试运行默认的flask启动配置,但显然没有包括sls.yml文件中存储的所有配置,这对于访问本地dynamodb实例至关重要

我最后一次尝试是在app.py文件末尾附加到ptvsd。因此,我将从ptvsd中点击
wait
操作,将vs代码中的调试器附加到指定的端口,这似乎是成功的,并返回代码执行。然而,sls wsgi似乎运行了两次该文件,因此附加只针对第一个实例而不是第二个实例,这样当我试图通过Postman执行API调用时,不会触发断点

我想我可以在所有地方手动包含
wait
步骤,然后在代码中而不是在IDE中为我尝试调试的每个方法附加,但这似乎有些过分,而且不太方便


我一直在网上寻找答案并阅读文档,但找不到更多的答案。

我发现我可以使用
附加进程Id
,但这有点棘手,因为列表中总是有两个进程(不同的pid)。虽然不是很好,但它确实起到了关键作用。我发现有一种技术很有用,尽管是在节点环境中,但应该在这里应用,那就是利用单元测试作为一种在本地执行代码的方法,它可以绑定到Debugger中,还可以利用模拟来消除外部依赖项,如AWS服务(S3、DynamoDB等)。我写了一篇博客文章,关于设置这个节点,但你可能会发现它是有用的一种方式来考虑与Pythoin一起设置:

然而,在无服务器开发的世界中,最终无论您的本地开发环境有多复杂,您都必须在云环境中进行测试。我描述的单元测试技术很适合捕捉那些基本的语法和逻辑错误,但是您仍然需要在云中执行部署并在该环境中进行测试。这也是我们在Serverless努力提高部署到云端的能力和时间的原因之一,这样AWS中的测试就可以取代本地测试