Local 命令

local 命令是在本地对函数调试的命令。

⚠️ 注意:该命令对 Docker 有所依赖,所以在使用该命令时,需要先进行 Docker 安装

命令解析

当执行命令local -h/local --help时,可以获取帮助文档。

在该命令中,包括了两个个子命令:

参数解析

参数全称参数缩写Yaml 模式下必填参数含义
evente选填传入 event 函数的 event 事件数据,可以通过 s cli fc-event 指令快速获取事件数据示例,详细操作参考这里
event-filef选填以文件形式传入 event 事件数据
configc选填指定断点调试时使用的 IDE,取值范围:vscode,intellij
debug-portd选填指定断点调试端

当前命令还支持部分全局参数(例如-a/--access, --debug, --help等),详情可参考 Serverless Devs 全局参数文档

local invoke 命令

local invoke 命令,是进行本地函数调试的命令, 本地函数容器实例执行完毕, 一次执行完毕会自动退出。

操作案例

有资源描述文件(Yaml)时,可以直接执行s local invoke进行本地调试,完成的输出示例:

FC Invoke Start RequestId: 0ba8ac3f-abf8-46d4-b61f-8e0f9f265d6a
2021-11-11T05:45:58.027Z 0ba8ac3f-abf8-46d4-b61f-8e0f9f265d6a [INFO] hello world
FC Invoke End RequestId: 0ba8ac3f-abf8-46d4-b61f-8e0f9f265d6a
hello world

RequestId: 0ba8ac3f-abf8-46d4-b61f-8e0f9f265d6a   Billed Duration: 146 ms   Memory Size: 128 MB   Max Memory Used: 23 MB

local start 命令

local start 命令,是进行本地函数调试的命令, 本地函数容器实例一直存在的调试模式,除非手动取消这次调试。

操作案例

有资源描述文件(Yaml)时,可以直接执行s local start进行资源部署,部署完成的输出示例:

⌛ Steps for [local] of [hello-world-app]
====================
[2023-09-21 12:17:56][INFO][hello_world] Local baseDir is: /Users/songluo/tmp/aaa/start-fc3-custom-java
You can use curl or Postman to make an HTTP request to 127.0.0.1:9001 to test the function

此时,可以根据命令行提示的url信息,使用 curl/Postman/浏览器中查看函数本地调试的具体内容。

断点调试

断点调试支持的 runtime 有:python3/python3.9/python3.10、nodejs10/nodejs12/nodejs14/nodejs16, php7.2、java8/java11

VSCode

使用 VSCode 进行断点调试时,流程十分简单,支持的语言有 NodeJSPythonPHP

调试函数

step1:打开终端,进入目标项目下(s.yaml 文件所在目录),输入启动指令
s local invoke --config vscode --debug-port 3000

启动指令执行后,本地的函数计算执行容器会有一定阻塞,我们需要等待调用;与此同时当前项目会自动生成 .vscode/launch.json 文件,该文件是基于 VSCode 进行调试的配置文件,若该文件已经存在,那么启动指令会打印相应配置文本,如下图所示,需要利用这部分内容覆盖已有 .vscode/launch.json 中的内容。

step2:启动断点调试器

打开 VSCode 界面,然后打开 s.yaml 中 codeUri 所存放的源代码,为其打上断点,接着点击开始调试按钮,具体执行如下图所示。

启动调试器后,程序便已经启动,此时就可以开始进行我们的断点调试工作了。

Intellij

基于 Intellij 进行断点调试时,支持 Java 语言, 接下来我们将以本地调试 Java 函数为例,对"启动断点调试器"步骤进行详细说明。

step1:打开终端,进入目标项目下(s.yaml 文件所在的目录),输入启动指令

由于 Java 是编译型语言,因此在开始前需要对程序进行打包,本文示例会使用 mvn package 对函数打包

mvn package
s local invoke --config intellij --debug-port 3000
step2:启动断点调试器
  • 打开 Intellij 界面,在菜单栏依次选择 Run -> Edit Configurations, 随后如下图所示,新建一个 Remote JVM Debug

  • 接着,自定义调试器名称,并将端口设置为 3000,如下图所示。

  • 最后,打开 s.yml 中 codeUri 存放的源代码,为其打上断点,接着点击开始调试按钮,如图所示。

附录

默认断点调试参数

RuntimeDefault Debug Args
nodejs 10/12/14/16--inspect-brk=0.0.0.0:${debugPort}
python 3/3.9/3.10-m ptvsd --host 0.0.0.0 --port ${debugPort} --wait
java8-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=${debugPort}
java11-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=*:${debugPort}
php7.2remote_enable=1 remote_autostart=1 remote_port=${debugPort} remote_host=${ip.address()}
在 GitHub 上编辑本页面 更新时间: Thu, Feb 22, 2024