Skip to main content

运行 CodeQL 查询

可在 数据库上运行查询,并在 中查看结果。

关于运行 CodeQL 查询

存储库 github/codeql 包含大量示例查询。 可通过“查询”视图访问工作区中的任何现有查询。

先决条件

要分析代码库,需要对从代码中提取的 数据库运行查询,因此需要选择要在扩展中使用的数据库。 可在本地(从 ZIP 存档或未存档的文件夹)、公共 URL 或 GitHub.com 上项目的 URL 中选择数据库。 有关详细信息,请参阅“管理 CodeQL 数据库”。

运行单个查询

  1. 在边栏中,打开“查询”视图。

  2. 要对所选数据库运行查询,请将鼠标悬停在所需查询上,然后单击运行本地查询图标。

“查询”视图的屏幕截图,其中“运行本地查询”按钮以深橙色边框显示。

CodeQL 扩展对当前数据库运行查询,并在应用程序的右下角报告���度。 结果准备就绪后,它们将显示在 CodeQL“查询结果”视图中。

如果运行查询时出现任何问题,则会在应用程序的右下角显示通知。 除了错误消息,通知还包括有关如何解决问题的详细信息。

运行目录中的所有查询

可运行目录中的所有查询。

  1. 在边栏中,打开“查询”视图。

  2. 将鼠标悬停在所需的查询目录上,然后单击运行本地查询图标。

运行所选查询

可使用单个命令运行多个查询。

  1. 转到文件资源管理器。

  2. 选择包含查询的多个文件或文件夹。

  3. 右键单击并选择 CodeQL:在所选文件中运行查询

在没有任何设置的情况下运行查询

处理新查询时,可以打开“快速查询”选项卡以轻松执行代码并查看结果,而无需在工作区中保存 .ql 文件。 从 VS Code Command Palette 中选择 CodeQL:快速查询,然后使用 CodeQL:对所选数据库运行查询

可在“查询历史记录”视图中查看在当前会话中运行的所有快速查询。 单击条目可查看生成结果的快速查询的确切文本。 有关详细信息,请参阅查看查询历史记录

如果对快速查询满意,应将其保存在 CodeQL 包中,便于以后访问。 有关详细信息,请参阅“使用 CodeQL 包自定义分析”。

运行查询或库的特定部分

如果你正在调试查询或库,并且想要找到错误的部件,这将很有帮助。

与使用 :对所选数据库运行查询来运行整个查询(选择子句和任意查询谓词)不同,可使用 :快速评估将评估你选择的代码片段,而不是整个查询,并在“结果”视图中显示该选择的结果。

快速评估可用于:

  • 选择 CodeQL 实体的名称(例如谓词)以评估该实体。

  • 选择包含可用变量的公式表达式以计算该公式或表达式。

例如,在以下代码片段中,可以选择谓词名称 foo 或公式 s = "bar" 进行快速评估:

predicate foo(string s) { s = "bar" }

对多个数据库运行查询

如果要在多个代码库上测试查询,或在多个项目中查找漏洞,该操作可能很有帮助。

  1. 打开一个查询 (.ql) 文件。

  2. 右键单击并选择 CodeQL:对多个数据库运行查询

  3. 从下拉菜单中,选择要运行查询的数据库。

查看查询历史记录

要查看在当前会话中运行的查询,请打开“查询历史记录”视图。

“查询历史记录”视图包含的信息包括运行查询的日期和时间、查询的名称、运行查询的数据库以及运行查询所花费的时间:

  • 要自定义显示的信息,请右键单击条目,然后选择重命名

  • (可选)使用语言选择器按语言筛选视图。 有关详细信息,请参阅按语言筛选数据库和查询

  • 单击一个条目以显示相应的结果,然后双击以在编辑器中显示查询本身(或右键单击并选择查看查询)。

  • 要显示为特定条目生成结果的确切文本,请右键单击它并选择查看查询文本。 这可能与视图查询不同,因为自上次运行查询以来,查询文件可能已被修改。

  • 要从视图中删除查询,请选择要删除的所有查询,然后右键单击并选择删除

理解查询结果

  1. 单击“查询历史记录”视图中的查询,在“结果”视图中显示其结果。

    Note

    根据查询,还可以选择不同的视图,例如 CSV、CodeQL CLI SARIF 输出DIL 格式。 例如,要查看 DIL 格式,请右键单击结果并选择查看 DIL。 可用的输出视图由查询的格式和元数据确定。 有关详细信息,请参阅 CodeQL 查询

  2. 使用“结果”视图中的下拉��单选择要显示的结果以及以何种形式显示这些结果,例如格式化的警报消息或原始结果表。

  3. 要按特定列中的条目对结果进行排序,请单击列标题。

如果结果链接到源代码元素,则可以单击该结果以在源代码中显示该元素。

要在源代码中使用标准代码导航功能,可以右键单击元素,然后使用命令转到定义转到引用。 这将对活动文件运行 CodeQL 查询,可能需要几秒钟。 此查询需要对每个文件运行一次,因此来自同一文件的任何其他引用都将更快。

Note

如果使用较旧的数据库,则代码导航命令(如“转到定义”和“转到引用”)可能不起作用********。 要使用代码导航,请尝试使用 CodeQL CLI 解压缩数据库并在解压缩的数据库上运行 codeql database cleanup <database>。 然后,将数据库重新添加到 Visual Studio Code。 有关详细信息,请参阅“database cleanup”。

比较查询结果

编写或调试查询时,查看更改对结果的影响非常有用。 可以比较两组结果,以查看更改的确切内容。 要比较结果,必须在同一数据库上运行这两个查询。

  1. 右键单击“查询历史记录”视图中的查询,然后选择比较结果

  2. 快速选择菜单显示所有有效的查询进行比较。 选择查询。

  3. “比较”视图显示两个查询结果的差异。

故障排除

要查看运行特定查询的日志,请右键单击“查询历史记录”视图中的查询,然后选择显示查询日志。 如果日志文件太大,无法在 VS Code 中打开,则该文件将显示在文件资源管理器中,以便使用外部程序打开。

有关编译和运行查询以及有关数据库升级的信息的详细信息,请查看 CodeQL 查询服务器日志。 有关详细信息,请参阅“访问日志”。

默认情况下,扩展���在每个工作区会话后删除日志。 要保存日志,可以为查询服务器日志指定自定义目录。 有关详细信息,请参阅“自定义设置”。

可以使用 CodeQL:重启查询服务器命令来重启查询服务器。 该操作将重启服务器,但不会影响 CodeQL 会话历史记录。 如果对扩展正在使用的文件进行外部更改,则很可能需要重新启动查询服务器。 例如,重新生成在 VS Code 中打开的 CodeQL 数据库。 除了日志中的问题之外,你可能还会看到:代码突出显示错误、结果总计不正确或查询正在运行的重复通知。

后续步骤

可选择使用该扩展来创建自己的自定义查询。 有关详细信息,请参阅“创建自定义查询”。

有关跨多个 CodeQL 数据库大规模运行分析的信息,请参阅 通过多库变体分析大规模运行 CodeQL 查询