

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用调试您的无服务器应用程序 AWS SAM
<a name="debug-application"></a>

测试应用程序后，您就可以调试发现的任何问题了。使用 AWS SAM 命令行界面 (CLI)，您可以先在本地测试和调试您的无服务器应用程序，然后再将其上传到 AWS 云端。调试应用程序可识别并修复应用程序中的问题或错误。

您可以使用 AWS SAM 执行分步调试，这是一种逐行运行代码或指令的方法。当您在中的调试模式下本地调用 Lambda 函数时 AWS SAMCLI，可以将调试器附加到该函数。借助调试程序，您可以逐行分步调试代码，查看不同变量的值，并像处理任何其他应用程序一样修复问题。在完成打包和部署应用程序的步骤之前，您可以验证应用程序是否按预期运行，调试问题，并修正任何问题。

**注意**  
如果应用程序包含一个或多个层，则在本地运行和调试应用程序时，层包会下载并缓存在本地主机上。有关更多信息，请参阅 [如何在本地缓存层](serverless-sam-cli-layers.md#local-testing-with-layers)。

**Topics**
+ [使用本地调试函数 AWS SAM](serverless-sam-cli-using-debugging.md)
+ [使用调试时传递多个运行时参数 AWS SAM](serverless-sam-cli-using-debugging-additional-arguments.md)
+ [使用 CloudFormation Linter 验证您的 AWS SAM 应用程序](validate-cfn-lint.md)

# 使用本地调试函数 AWS SAM
<a name="serverless-sam-cli-using-debugging"></a>

您可以 AWS SAM 与各种 AWS 工具包和调试器配合使用，在本地测试和调试您的无服务器应用程序。通过逐步调试 Lambda 函数，您可以在本地环境中逐行或逐条指令地识别和修复应用程序中的问题。

您可以执行本地逐步调试的一些方法包括设置断点、检查变量以及逐行执行函数代码。本地分步调试使您可以发现和解决可能在云中遇到的问题，从而缩短反馈循环。

您可以使用 AWS 工具包进行调试，也可以在调试模式 AWS SAM 下运行。有关详细信息，请参阅本节中的主题。

## 使用 AWS 工具包
<a name="serverless-sam-cli-using-aws-toolkits"></a>

AWS 工具包是集成开发环境 (IDE) 插件，可让您执行许多常见的调试任务，例如设置断点、检查变量和逐行执行函数代码。 AWS 工具包使您可以更轻松地开发、调试和部署使用构建的无服务器应用程序。 AWS SAM它们提供了构建、测试、调试、部署和调用集成到 IDE 中的 Lambda 函数的体验。

有关可与之配合使用的 AWS 工具包的更多信息 AWS SAM，请参阅以下内容：
+ [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/)
+ [AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/)
+ [AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/)

有各种各样的 AWS 工具包适用于 IDEs 和运行时的不同组合。下表列出了支持 AWS SAM 应用程序分步调试的常用 IDE/runtime 组合：


| IDE | 运行时 | AWS 工具包 | 逐步调试说明 | 
| --- | --- | --- | --- | 
| Visual Studio Code |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Toolkit for Visual Studio Code | 《AWS Toolkit for Visual Studio Code 用户指南》中的[使用 AWS Serverless Application](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/serverless-apps.html)  | 
| AWS Cloud9 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html)  | AWS Cloud9，启用 AWS 工具包后 1 |  [使用《*AWS Cloud9 用户指南*》中的 AWS Toolkit 使用 AWS 无服务器应用程序](https://docs.aws.amazon.com/cloud9/latest/user-guide/serverless-apps-toolkit.html)。  | 
| WebStorm | Node.js | AWS Toolkit for JetBrains2 |  在 *AWS Toolkit for JetBrains* 中[运行（调用）或调试本地函数](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)  | 
| PyCharm | Python | AWS Toolkit for JetBrains2 |  在 *AWS Toolkit for JetBrains* 中[运行（调用）或调试本地函数](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)  | 
| Rider | .NET | AWS Toolkit for JetBrains2 |  在 *AWS Toolkit for JetBrains* 中[运行（调用）或调试本地函数](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)  | 
| IntelliJ | Java | AWS Toolkit for JetBrains2 |  在 *AWS Toolkit for JetBrains* 中[运行（调用）或调试本地函数](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)  | 
| GoLand | Go | AWS Toolkit for JetBrains2 |  在 *AWS Toolkit for JetBrains* 中[运行（调用）或调试本地函数](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/invoke-lambda.html)  | 

**备注**：

1.  AWS Cloud9 要使用逐步调试 AWS SAM 应用程序，必须启用 AWS Toolkit。有关更多信息，请参阅[《*AWS Cloud9 用户指南》*中的 “启用 AWS 工具包](https://docs.aws.amazon.com/cloud9/latest/user-guide/toolkit-welcome.html#access-toolkit)”。

1. 要使用分步调试 AWS SAM 应用程序，必须先按照中安装中的说明进行[安装](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html)和配置。 AWS Toolkit for JetBrains AWS Toolkit for JetBrains*AWS Toolkit for JetBrains*

## 在调试模式下在 AWS SAM 本地运行
<a name="serverless-sam-cli-running-locally"></a>

[除了与 T AWS oolkits 集成外，您还可以在调试模式下运行 AWS SAM 以连接到第三方调试器，例如 [pt](https://pypi.org/project/ptvsd/) vsd 或 delve。](https://github.com/go-delve/delve)

要 AWS SAM 在调试模式下运行，请使用命令[sam local invoke](sam-cli-command-reference-sam-local-invoke.md)或[sam local start-api](sam-cli-command-reference-sam-local-start-api.md)使用`--debug-port`或`-d`选项。

例如：

```
# Invoke a function locally in debug mode on port 5858
sam local invoke -d 5858 <function logical id>

# Start local API Gateway in debug mode on port 5858
sam local start-api -d 5858
```

**注意**  
如果使用 `sam local start-api`，则本地 API Gateway 实例会公开您的所有 Lambda 函数。但是，因为您能指定一个调试端口，所以每次只能调试一个函数。您需要在 AWS SAM CLI 绑定到端口之前调用 API，以允许调试器进行连接。

# 使用调试时传递多个运行时参数 AWS SAM
<a name="serverless-sam-cli-using-debugging-additional-arguments"></a>

您可以选择传递额外的运行时参数， AWS SAM 以更有效地检查问题和解决变量。这样做可以增强调试过程的可控性和灵活性，从而帮助您自定义运行时配置和环境。

要在调试函数时传递其他运行时参数，请使用环境变量 `DEBUGGER_ARGS`。这会将一串参数直接传递到 AWS SAM CLI 用于启动函数的 run 命令中。

例如，如果你想在 Python 函数的运行时加载像我KPdb 这样的调试器，你可以将以下内容传递为`DEBUGGER_ARGS: -m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0`。这将在运行KPdb 时加载你指定的其他参数。

在这种情况下，您的完整 AWS SAM CLI 命令将是：

```
DEBUGGER_ARGS="-m ikpdb --ikpdb-port=5858 --ikpdb-working-directory=/var/task/ --ikpdb-client-working-directory=/myApp --ikpdb-address=0.0.0.0" echo {} | sam local invoke -d 5858 myFunction
```

您可以将调试器参数传递给所有运行时的函数。

# 使用 CloudFormation Linter 验证您的 AWS SAM 应用程序
<a name="validate-cfn-lint"></a>

 AWS CloudFormation Linter（cfn-lint）是一个开源工具，可用于对模板进行详细验证。 CloudFormation CFN-Lint 包含以资源规范为指导的 CloudFormation 规则。使用 cfn-lint 将您的资源与这些规则进行比较，以接收有关错误、警告或信息建议的详细消息。或者，创建自己的自定义规则进行验证。*要了解有关 cfn-lint 的更多信息，请参阅存储库中的 [cfn-](https://github.com/aws-cloudformation/cfn-lint) lint。CloudFormation GitHub *

 你可以使用 cfn-lint 通过 AWS SAM 命令行界面 AWS Serverless Application Model (AWS SAM) 通过选项运行**sam validate**来验证你的 (AWS SAMCLI) 模板。**--lint**

```
sam validate --lint
```

 要自定义 cfn-lint 行为，例如创建自定义规则或指定验证选项，可以定义配置文件。要了解更多信息，请参阅 [cf *n-lint 存储库中的 Conf CloudFormation GitHub * ig 文件](https://github.com/aws-cloudformation/cfn-lint#config-file)。运行 **sam validate --lint** 时，将应用配置文件中定义的 cfn-lint 行为。

## 示例
<a name="validate-cfn-lint-examples"></a>

### 对模板执行 cfn-lint 验证 AWS SAM
<a name="validate-cfn-lint-examples-example1"></a>

```
sam validate --lint --template myTemplate.yaml
```

## 了解详情
<a name="validate-cfn-lint-learn"></a>

 要了解有关 **sam validate** 命令的更多信息，请参阅 [sam validate](sam-cli-command-reference-sam-validate.md)。