跳至主要内容

CodeQL 扫描的行数少于预期

如果 CodeQL 分析的代码少于您的预期,您可能需要使用自定义构建命令。

关于已编译语言的分析

当使用 autobuildmanual 构建模式分析已编译语言时,CodeQL 仅扫描在分析期间被构建的文件。因此,如果某些源代码未正确编译,扫描的代码行数将低于预期。这可能由多种原因导致。

  1. CodeQL 的 autobuild 功能使用启发式方法来构建仓库中的代码。然而,这种方法有时会导致仓库分析不完整。例如,当同一仓库中存在多个 build.sh 命令时,分析可能不完整,因为 autobuild 步骤只会执行其中一个命令,从而导致某些源文件未被编译。

  2. 某些编译器与 CodeQL 不兼容,可能会在代码分析时导致问题。例如,大多数厂商特定的 C 编译器无法被 CodeQL 识别。C 代码需要使用受支持的编译器(例如 GCC、Clang 或 MSVC)进行编译,才能被分析。

如果您的 CodeQL 分析扫描的代码行数少于预期,您可以尝试将构建模式改为 manual 并在工作流指定构建模式时明确指定构建命令;如果工作流中包含 autobuild 步骤,则用构建命令替代该步骤;或者检查 CodeQL 数据库中源文件的副本。

切换到 manual 构建流程

用您在生产环境中使用的相同构建命令替换 autobuild 过程。这可确保 CodeQL 完全了解如何编译您希望扫描的所有源文件。有关定义构建步骤的更多信息,请参阅 已编译语言的 CodeQL 代码扫描

检查 CodeQL 数据库中源文件的副本

通过检查随 CodeQL 数据库一起包含的源代码副本,您可能能够了解为何某些源文件未被分析。要从 Actions 工作流获取数据库,请修改 CodeQL 工作流文件的 init 步骤并将 debug: true 设置为 true。

- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    debug: true

这会将数据库作为 Actions 工件上传,您可以下载到本地机器。有关更多信息,请参阅 使用工作流工件存储和共享数据

该工件将包含名为 src.zip 的归档副本,其中包括 CodeQL 扫描的源文件。如果将仓库中的源代码文件与 src.zip 中的文件进行对比,您可以看到缺少了哪些类型的文件。一旦了解哪些文件类型未被分析,就更容易弄清楚如何更改 CodeQL 分析的工作流。

© . This site is unofficial and not affiliated with GitHub, Inc.