

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 在 IDE 中使用生成器、运行器和调试器 AWS Cloud9
<a name="build-run-debug"></a>

*生成器*指示 AWS Cloud9 集成开发环境 (IDE) 如何生成项目的文件。*运行*器指示 AWS Cloud9 IDE 如何运行特定类型的文件。运行程序可使用*调试程序*来帮助找到文件源代码中的任何问题。

您可以通过以下方式使用 AWS Cloud9 IDE 来构建、运行和调试代码：
+ 使用生成器来生成您的项目文件。有关更多信息，请参阅[生成您的项目文件](#build-run-debug-build)。
+ 使用运行程序可运行（也可以调试）您的代码。有关更多信息，请参阅[内置的生成、运行和调试支持](#build-run-debug-supported)以及[运行代码](#build-run-debug-run)。
+ 更改一个内置运行程序的初始定义，以便通过不同方法运行（也可以调试）您的代码。有关更多信息，请参阅[更改内置运行程序](build-run-debug-change-runner.md)。
+ 使用具有自定义的文件名、命令行选项，调试模式、当前工作目录和环境变量组合的运行程序来运行（也可以调试）您的代码。有关更多信息，请参阅[创建运行配置](build-run-debug-create-run-config.md)。
+ 创建您自己的生成器或运行程序。有关更多信息，请参阅[创建生成器或运行程序](#build-run-debug-create-builder-runner)。

## 内置的生成、运行和调试支持
<a name="build-run-debug-supported"></a>

 AWS Cloud9 IDE 为构建、运行和调试多种语言的代码提供了内置支持。有关完整列表，请参阅[语言支持](language-support.md)。

内置的生成支持通过菜单栏上的 **Run（运行）**、**Build System（生成系统）**以及 **Run（运行）**、**Build（生成）**菜单命令提供。要添加对未列出的编程语言或工具的支持，请参阅[创建生成器或运行程序](#build-run-debug-create-builder-runner)。

内置的运行支持通过 **Run（运行）**按钮，菜单栏上的 **Run（运行）**、**Run With（运行方式）**以及 **Run（运行）**、**Run Configurations（运行配置）**菜单命令提供。要添加对未列出的编程语言或工具的支持，请参阅[创建生成器或运行程序](#build-run-debug-create-builder-runner)和[创建运行配置](build-run-debug-create-run-config.md)。

内置的调试支持通过 **Debugger（调试程序）**窗口提供。要显示 **Debugger（调试程序）** 窗口，请选择 **Debugger（调试程序）**按钮。如果 **Debugger（调试程序）** 按钮不可见，请在菜单栏上依次选择 **Window（窗口）**、**Debugger（调试程序）**。

## 生成您的项目文件
<a name="build-run-debug-build"></a>

1. 打开与要生成的代码对应的文件。

1. 在菜单栏上，依次选择 **Run（运行）、Build System（生成系统）**，然后选择要使用的生成器的名称（如果尚未选择）。如果未列出您要使用的生成器，请停止本过程，去完成[创建生成器或运行程序](#build-run-debug-create-builder-runner)中的步骤，然后再返回本过程。

1. 依次选择 **Run（运行）, Build（生成）**。

## 运行代码
<a name="build-run-debug-run"></a>

1. 如果尚未选择并打开与要运行的代码对应的文件，将该文件打开。

1. 在菜单栏上，选择下列项之一：
   + 要使用最匹配的内置运行程序来运行代码，请依次选择 **Run（运行）、Run（运行）**。如果找 AWS Cloud9 不到，则禁用此命令。
   + 要使用 AWS Cloud9 上次使用的运行配置运行代码，请选择**运行，最后运行**。
   + 要使用特定的运行程序运行代码，请依次选择 **Run（运行）、Run With（运行方式）**，然后选择运行程序的名称。如果未列出您要使用的运行程序，请停止本过程，去完成[创建生成器或运行程序](#build-run-debug-create-builder-runner)中的步骤，然后再返回到本过程。
   + 要使用具有文件名、命令行选项、调试模式、当前工作目录和环境变量的自定义组合的特定运行程序来运行代码，请依次选择 **Run（运行）、Run Configurations（运行配置）**，然后选择运行配置的名称。在显示的运行配置选项卡中，选择 **Runner: Auto（运行程序：自动）**，再选择要使用的运行程序，然后选择 **Run（运行）**。如果未列出您要使用的运行程序，请停止本过程，去完成[创建生成器或运行程序](#build-run-debug-create-builder-runner)中的步骤，然后再返回到本过程。

## 调试代码
<a name="build-run-debug-debug"></a>

1. 在代码对应的运行配置选项卡上，选择 **Run in Debug Mode（在调试模式下运行）**。白色背景上的错误图标会变成绿色。有关更多信息，请参阅[运行代码](#build-run-debug-run)和[创建运行配置](build-run-debug-create-run-config.md)。

1. 在代码中设置在运行期间暂停的任何断点，如下所示：

   1. 打开要在其中设置断点的每个文件。

   1. 在文件中要设置断点的每个点，选择其行号左侧间距中的空白区域。会显示红色圆圈。

      要删除断点，请选择间距中的现有断点。

      要禁用断点而不是删除它，请在 **Debugger（调试程序）** 窗口的 **Breakpoints（断点）** 中，清除要禁用的断点对应的框。要重新启用断点，请选中清除的框。

      要一次性禁用所有断点，请在 **Debugger（调试程序）** 窗口中选择 **Deactivate All Breakpoints（停用所有断点）**。要重新启用所有断点，请选择 **Activate All Breakpoints（激活所有断点）**。

      如果 **Debugger（调试程序）** 窗口不可见，则选择 **Debugger（调试程序）**按钮。如果 **Debugger（调试程序）** 按钮不可见，则在菜单栏上选择 **Window（窗口）**、**Debugger（调试程序）**。

1. 在暂停运行的点设置要为其获取值的任何监视表达式，如下所示：

   1. 在 **Debugger（调试程序）** 窗口中，在 **Watch Expressions（监视表达式）**中选择 **Type an expression here（在此处键入表达式）**。

   1. 键入要监视的表达式，然后按 `Enter`。

      要更改现有的监视表达式，请右键单击对应监视表达式，然后选择 **Edit Watch Expression（编辑监视表达式）**。键入更改，然后按 `Enter`。

      要删除现有的监视表达式，请右键单击对应监视表达式，然后选择 **Remove Watch Expression（删除监视表达式）**。

1. 按照[运行代码](#build-run-debug-run)中所述，运行您的代码。

每当运行暂停时，也可以将指针暂停在显示的任意一段代码（例如，变量）上，以便在工具提示中显示有关该端代码的所有可用信息。

# 更改内置运行程序
<a name="build-run-debug-change-runner"></a>

此步骤说明如何更改一个内置运行程序的初始定义，以便通过不同方法运行（也可以调试）您的代码。

1. 在菜单栏上，依次选择 **Run（运行）、Run With（运行方式）**，然后选择您要更改的内置运行程序。

1. 在显示的运行配置选项卡上，选择 **Stop（停止）**，将试图运行代码的运行程序停止。

1. 选择 **Runner: My Runner（运行程序：我的运行程序）**，其中 **My Runner（我的运行程序）**是要更改的运行程序的名称，然后选择 **Edit Runner（编辑运行程序）**。

1. 在显示的 **My Runner.run** 选项卡上，更改运行程序的当前定义。请参阅[定义生成器或运行程序](build-run-debug-define-builder-runner.md)。

1. 依次选择 **File（文件）、Save As（另存为）**。将同名文件 (M **y Runner.run**) 保存在`my-environment/.c9/runners`目录中，其中`my-environment`是您的 AWS Cloud9 开发环境的名称。

**注意**  
您对内置运行程序所做的任何更改都仅应用于您在其中进行这些更改的环境。要将更改应用于单独的环境，请打开其他环境，然后按照以上步骤打开、编辑和保存对相关内置运行程序进行的那些相同更改。

# 创建运行配置
<a name="build-run-debug-create-run-config"></a>

此步骤说明如何使用具有自定义的文件名、命令行选项，调试模式、当前工作目录和环境变量组合的运行程序来运行（也可以调试）您的代码。

在菜单栏上依次选择 **Run（运行）、Run Configurations（运行配置）和 New Run Configuration（新建运行配置）**。在显示的运行配置选项卡上，执行以下操作：

1. 在 **Run（运行）** 和 **Restart（重启）**旁的框中，键入在 **Run（运行）、Run Configurations（运行配置）** 菜单上将为该运行配置显示的名称。

1. 在 **Command（命令）**框中，键入要使用的任何自定义命令行选项。

1. 要让此运行配置使用运行程序的预定义调试设置，请选择 **Run in Debug Mode（在调试模式下运行）**。白色背景上的错误图标会变成绿色。

1. 要让此运行配置使用特定的工作目录，请选择 **CWD** 并选择要使用的目录，然后选择 **Select（选择）**。

1. 要让此运行配置使用特定的环境变量，请选择 **ENV**，然后键入每个环境变量的名称和值。

要使用该运行配置，请打开与要运行的代码对应的文件。在菜单栏上依次选择 **Run（运行）、Run Configurations（运行配置）**，然后选择此运行配置的名称。在显示的运行配置选项卡中，选择 **Runner: Auto（运行程序：自动）**，再选择要使用的运行程序，然后选择 **Run（运行）**。

**注意**  
您创建的所有运行配置仅应用于您在其中创建运行配置的环境。要为单独的环境添加该运行配置，请打开其他环境，然后按照以上步骤在该环境中创建相同的运行配置。

## 创建生成器或运行程序
<a name="build-run-debug-create-builder-runner"></a>

此步骤说明如何创建自己的生成器或运行程序。

1. 要创建生成器，请在菜单栏上依次选择 **Run（运行）、Build System（生成系统）、New Build System（新建生成系统）**。要创建运行程序，请在菜单栏上依次选择 **Run（运行）、Run With（运行方式）、New Runner（新建运行程序）**。

1. 在显示的生成器选项卡（标记为 **My Builder.build**）或运行程序选项卡（标记为 **My Runner.run**）上，定义生成器或运行程序。请参阅[定义生成器或运行程序](build-run-debug-define-builder-runner.md)。

1. 定义生成器或运行程序后，依次选择 **File（文件）、Save As（另存为）**。对于生成器，使用 `.build` 扩展名将文件保存在 `my-environment/.c9/builders` 目录中，其中 `my-environment` 是环境的名称。对于运行程序，使用 `.run` 文件扩展名将文件保存在 `my-environment/.c9/runners` 目录中，其中 `my-environment` 是环境的名称。您指定的文件名将是在 **Run（运行）、Build System（生成系统）**菜单（对于生成器）或者 **Run（运行）、Run With（运行方式）**菜单（对于运行程序）上显示的名称。因此，除非您指定不同的文件名，否则默认显示的名称将是 **My Builder（我的生成器）**（对于生成器）或 **My Runner（我的运行程序）**（对于运行程序）。

要使用此生成器或运行程序，请参阅[生成项目文件](#build-run-debug-build)或[运行代码](#build-run-debug-run)。

**注意**  
您创建的任何生成器或运行程序仅适用于您在其中创建该生成器或运行程序的环境。要为单独的环境添加该运行生成器或运行程序，请打开其他环境，然后按照以上步骤在该环境中创建相同的生成器或运行程序。

# 定义生成器或运行程序
<a name="build-run-debug-define-builder-runner"></a>

本主题说明如何定义生成器或运行程序。定义生成器或运行程序之前，请确保已[创建生成器或运行程序](build-run-debug.md#build-run-debug-create-builder-runner)。



在显示的生成器或运行程序选项卡上，使用 JSON 定义运行程序或生成器。使用以下代码开头的模板。

对于生成器，使用以下代码开头。

```
{
  "cmd": [],
  "info": "",
  "env": {},
  "selector": ""
}
```

对于运行程序，使用以下代码开头。

```
{
  "cmd": [],
  "script": "",
  "working_dir": "",
  "info": "",
  "env": {},
  "selector": "",
  "debugger": "",
  "debugport": ""
}
```

在以上代码中：
+  `cmd`：表示要作为单个命令运行的 AWS Cloud9 以逗号分隔的字符串列表。

   AWS Cloud9 运行此命令时，列表中的每个字符串将用一个空格分隔。例如， AWS Cloud9 将`$file`以 a `"cmd": [ "ls", "$file", "$args"]` s 运行`ls $file $args`， AWS Cloud9 where 将替换为当前文件的完整路径以及在`$args`文件名后输入的任何参数。有关更多信息，请参阅本节后面所支持变量的列表。
+  `script`：代表运行程序在终端执行的 bash 脚本 (也可以根据需要，将其指定为行阵列以保证可读性)。
+  `working_dir`：代表运行程序将从中运行的目录。
+  `info`：代表在开始运行时，要向用户显示的任何文本字符串。此字符串可以包含变量`Running $project_path$file_name...`，例如，其中 AWS Cloud9 将`$project_path`替换为当前文件的目录路径和`$file_name`当前文件的名称部分。请参阅本节后面所支持变量的列表。
+  `env`: 表示 AWS Cloud9 要使用的任何命令行参数数组，例如：

  ```
  "env": {
    "LANG": "en_US.UTF-8",
    "SHLVL": "1"
  }
  ```
+  `selector`: 表示您 AWS Cloud9 要用来标识适用于此运行器的文件名的任何正则表达式。例如，您可以为 Python 文件指定 `source.py`。
+  `debugger`: 表示您 AWS Cloud9 要使用的与该运行器兼容的任何可用调试器的名称。例如，您可以为 V8 调试程序指定 `v8`。
+  `debugport`：表示调试期间 AWS Cloud9 要使用的端口号。例如，您可以指定 `15454` 作为要使用的端口号。

下表给出您可以使用的变量。


****  

|  **变量**  |  **描述**  | 
| --- | --- | 
|   `$file_path`   |  当前文件的目录，例如，`/home/ec2-user/environment` 或 `/home/ubuntu/environment`。  | 
|   `$file`   |  当前文件的完整路径，例如，`/home/ec2-user/environment/hello.py` 或 `/home/ubuntu/environment/hello.py`。  | 
|   `$args`   |  在文件名之后输入的任何参数，例如，`"5" "9"`。  | 
|   `$file_name`   |  当前文件的名称部分，例如，`hello.py`。  | 
|   `$file_extension`   |  当前文件的扩展名，例如，`py`。  | 
|   `$file_base_name`   |  当前文件的名称（不带扩展名），例如，`hello`。  | 
|   `$packages`   |  程序包文件夹的完整路径。  | 
|   `$project`   |  当前项目文件夹的完整路径。  | 
|   `$project_path`   |  当前项目文件的目录，例如，`/home/ec2-user/environment/` 或 `/home/ubuntu/environment/`。  | 
|   `$project_name`   |  当前项目文件的名称（不带扩展名），例如，`my-demo-environment`。  | 
|   `$project_extension`   |  当前项目文件的扩展名。  | 
|   `$project_base_name`   |  当前项目文件的名称（不带扩展名）。  | 
|   `$hostname`   |  环境的主机名，例如，`192.0.2.0`。  | 
|   `$hostname_path`   |  环境的主机名，包含指向项目文件的相对路径，例如，`https://192.0.2.0/hello.js`。  | 
|   `$url`   |  用于访问环境的完整 URL，例如，`https://192.0.2.0.`。  | 
|   `$port`   |  分配给环境的端口，例如，`8080`。  | 
|   `$ip`   |  为环境运行进程的 IP 地址，例如，`0.0.0.0`。  | 

举例来说，名为 `G++.build` 的以下生成器文件为 GCC 定义一个生成器，它运行 **`g++`** 命令以及 `-o` 选项以将当前文件（例如 `hello.cpp`）编译到对象模块中。然后，它将对象模块链接到与当前文件使用相同名称（例如，`hello`）的程序中。以下命令具有等效作用：`g++ -o hello hello.cpp`。

```
{
  "cmd": [ "g++", "-o", "$file_base_name", "$file_name" ],
  "info": "Compiling $file_name and linking to $file_base_name...",
  "selector": "source.cpp"
}
```

再举一个例子，名为 `Python.run` 的以下运行程序文件定义一个运行程序，它使用 Python 以及提供的所有参数运行当前文件。例如，如果当前文件名为 `hello.py` 且提供了 `5` 和 `9` 参数，则等效命令是 `python hello.py 5 9`。

```
{
  "cmd": [ "python", "$file_name", "$args" ],
  "info": "Running $file_name...",
  "selector": "source.py"
}
```

最后，名为 `Print Run Variables.run` 的以下运行程序定义一个运行程序，它只是输出每个可用变量的值，然后就停止。

```
{
  "info": "file_path = $file_path, file = $file, args = $args, file_name = $file_name, file_extension = $file_extension, file_base_name = $file_base_name, packages = $packages, project = $project, project_path = $project_path, project_name = $project_name, project_extension = $project_extension, project_base_name = $project_base_name, hostname = $hostname, hostname_path = $hostname_path, url = $url, port = $port, ip = $ip"
}
```