# 数据库追踪命令

\[管道] 在跟踪生成过程中运行单个命令。

> \[!NOTE]
> 此内容描述了 CodeQL CLI 的最新版本。 有关此版本的详细信息，请参阅 <https://github.com/github/codeql-cli-binaries/releases> 。
>
> 若要查看早期版本中此命令可用选项的详细信息，请在终端中使用 <span style="white-space: nowrap;">`--help`</span> 选项运行命令。

## 概要

```shell copy
codeql database trace-command [--threads=<num>] [--ram=<MB>] [--extractor-option=<extractor-option-name=value>] <options>... -- <database> <command>...
```

## Description

```
          \[管道] 在跟踪生成过程中运行单个命令。
```

这会在跟踪器下运行单个给定命令行，因此可能会执行一些提取，但不会最终确定生成的 CodeQL 数据库。

## 选项

### 主要选项

#### `<database>`

```
          \[必选] 正在构建的 CodeQL 数据库的路径。 必须准备好此选项，以便使用 [codeql database init](/code-security/reference/code-scanning/codeql/codeql-cli-manual/database-init) 进行提取。
```

如果提供了 `--db-cluster` 选项，此目录本身并非数据库，而是\_包含\_数据库的目录，所有这些数据库将一起处理。

#### `<command>...`

要运行的命令。 这可能由一个或多个用于创建进程的参数组成。 建议在列出命令的参数之前传递“--”参数，以避免其参数与我们的参数混淆。

命令应退出，状态代码为 0。 任何其他退出代码都解释为失败。

当给出 `--index-traceless-dbs` 时，可以省略该命令。

#### `-j, --threads=<num>`

要求提取程序使用此数量的线程。 此选项作为建议传递给提取程序。 如果设置了 CODEQL\_THREADS 环境变量，则环境变量值优先于此选项。

可以传递 0 以在机器上每个内核使用一个线程，或传递 -*N* 以保留 *N* 个内核不使用（但仍至少使用一个线程）。

#### `-M, --ram=<MB>`

要求提取程序使用此内存量。 此选项作为建议传递给提取程序。 如果设置了 CODEQL\_RAM 环境变量，则环境变量值优先于此选项。

#### `--[no-]db-cluster`

指示命令行中给定的目录本身并非数据库，而是\_包含\_一个或多个正在构建的数据库的目录。 这些数据库将一起处理。

#### `--no-tracing`

```
          \[高级] 不跟踪指定的命令，而是依赖它直接生成所有必要数据。
```

#### `--extra-tracing-config=<tracing-config.lua>`

```
          \[高级] 跟踪器配置文件的路径。 这可用于修改生成跟踪器的行为。 它可用于选取作为生成命令的一部分运行的编译器进程，并触发其他工具的执行。 提取程序将提供在大多数情况下应该都能工作的默认跟踪器配置文件。
```

#### `--[no-]index-traceless-dbs`

除了指定的命令之外，为不依赖于跟踪生成过程的提取程序运行 main 脚本。 如果要使用 `--db-cluster` 为多种语言构造数据库，则应仅将此选项指定给 codeql database trace-command 的一次调用。

#### `--[no-]use-build-mode`

根据数据库的生成模式确定要运行的内容。 此选项无法与 `--index-traceless-dbs` 一起使用。

#### `--working-dir=<dir>`

```
          \[高级] 应执行指定命令的目录。 如果未提供此参数，则会在传递给 `--source-root` 的 [](/code-security/reference/code-scanning/codeql/codeql-cli-manual/database-create) 的值（若存在）中执行命令。 如果未提供任何 `--source-root` 参数，则会在当前工作目录中执行命令。
```

#### `--no-run-unnecessary-builds`

```
          \[高级] 仅在构建中的数据库使用依赖于跟踪生成过程的提取程序时，才运行指定的生成命令。
```

如果未给定此选项，即使 CodeQL 不需要该命令，也会执行该命令，前提是出于其他原因需要其副作用。

### 用于控制提取程序行为的选项

#### `-O, --extractor-option=<extractor-option-name=value>`

设置 CodeQL 提取程序的选项。
`extractor-option-name` 应为 extractor\_name.group1.group2.option\_name 或 group1.group2.option\_name 格式。 如果 `extractor_option_name` 以提取程序名称开头，则指示的提取程序必须声明选项 group1.group2.option\_name。 否则，声明选项 group1.group2.option\_name 的任何提取程序都将设置该选项。
`value` 可以是任何不包含换行符的字符串。

可以重复使用此命令行选项来设置多个提取程序选项。 如果为同一提取程序选项提供多个值，则行为取决于提取程序选项所需的类型。 字符串选项将使用提供的最后一个值。 数组选项将按顺序使用提供的所有值。 使用此命令行选项指定的提取程序选项在通过 `--extractor-options-file` 给定的提取程序选项之后进行处理。

传递给 [codeql database init](/zh/code-security/reference/code-scanning/codeql/codeql-cli-manual/database-init) 或 `codeql database begin-tracing` 时，选项将仅应用于间接跟踪环境。 如果工作流还调用 codeql database trace-command，则还需根据需要传递选项。

请参阅 <https://codeql.github.com/docs/codeql-cli/extractor-options> 以了解有关 CodeQL 提取程序选项的详细信息，包括如何列出每个提取程序声明的选项。

#### `--extractor-options-file=<extractor-options-bundle-file>`

指定提取程序选项捆绑文件。 提取程序选项捆绑文件是设置提取程序选项的 JSON 文件（扩展名为 `.json`）或 YAML 文件（扩展名为 `.yaml` 或 `.yml`）。 该文件必须具有顶级映射键“extractor”，并且其下必须具有作为二级映射键的提取程序名称。 进一步的映射级别表示嵌套的提取程序组，字符串和数组选项是具有字符串和数组值的映射条目。

按指定的顺序读取提取程序选项捆绑文件。
如果不同的提取程序选项捆绑文件指定了相同的提取程序选项，则行为取决于提取程序选项所需的类型。 字符串选项将使用提供的最后一个值。 数组选项将按顺序使用提供的所有值。 使用此命令行选项指定的提取程序选项在通过 `--extractor-option` 给定的提取程序选项之前进行处理。

传递给 [codeql database init](/zh/code-security/reference/code-scanning/codeql/codeql-cli-manual/database-init) 或 `codeql database begin-tracing` 时，选项将仅应用于间接跟踪环境。 如果工作流还调用 codeql database trace-command，则还需根据需要传递选项。

请参阅 <https://codeql.github.com/docs/codeql-cli/extractor-options> 以了解有关 CodeQL 提取程序选项的详细信息，包括如何列出每个提取程序声明的选项。

### 常用选项

#### `-h, --help`

显示此帮助文本。

#### `-J=<opt>`

```
          \[高级] 向运行命令的 JVM 提供选项。
```

（请注意，无法正确处理包含空格的选项。）

#### `-v, --verbose`

以增量方式增加输出的进度消息数。

#### `-q, --quiet`

以增量方式减少输出的进度消息数。

#### `--verbosity=<level>`

```
          \[高级] 明确将详细级别设置为 errors、warnings、progress、progress+、progress++、progress+++ 之一。 重写 `-v` 和 `-q`。
```

#### `--logdir=<dir>`

```
          \[高级] 将详细日志写入指定目录中的一个或多个文件，生成的文件名包含时间戳和正在运行的子命令名称。
```

（要使用可以完全控制的名称编写日志文件，请根据需要提供 `--log-to-stderr` 并重定向 stderr。）

#### `--common-caches=<dir>`

```
          \[高级] 控制磁盘上缓存数据的位置，这些数据将在 CLI 的多次运行之间保留，例如下载的 QL 包和编译的查询计划。 如果未明确设置，则默认为用户主目录中名为 `.codeql` 的目录；如果尚不存在，则会创建该目录。
```

自 `v2.15.2` 起可用。