Skip to main content

CodeQL сканировал меньше строк, чем ожидалось

If CodeQL analyzed less code than you expected, you may need to use a custom build command.

Анализ скомпилированных языков

Для скомпилированных языков, таких как C/C++, C#, Go и Java CodeQL проверяет только файлы, созданные во время анализа. Поэтому число проверенных строк кода будет меньше, чем ожидалось, если некоторые строки исходного кода компилируются неправильно. Это может произойти по нескольким причинам.

  1. Функция CodeQL autobuild использует эвристические методы для сборки кода в репозитории. Но иногда такой подход приводит к неполному анализу репозитория. Например, если в одном репозитории существует несколько команд build.sh, анализ может и не завершиться, так как шаг autobuild будет выполняет только одну из команд, поэтому некоторые исходные файлы могут не компилироваться.

  2. Некоторые компиляторы не работают с CodeQL и могут вызывать проблемы при анализе кода. Например, большинство компиляторов C, относящихся к поставщику, не будут распознаны CodeQL. Для анализа кода C необходимо скомпилировать с распознаваемым компилятором (например, GCC, Clang или MSVC).

Если анализ CodeQL сканирует меньше строк кода, чем ожидалось, попробуйте заменить autobuild stepили проверить копию исходных файлов в базе данных CodeQL .

Замена шага autobuild

Замените шаг autobuild теми же командами сборки, которые будут использоваться в рабочей среде. Это гарантирует, что CodeQL точно знает, как скомпилировать все исходные файлы, которые требуется проверить. Дополнительные сведения см. в разделе «AUTOTITLE».

Проверка копии исходных файлов в базе данных CodeQL

Вы можете понять, почему некоторые исходные файлы не были проанализированы, проверив копию исходного кода, включенную в базу данных CodeQL. Чтобы получить базу данных из рабочего процесса Actions, измените шаг init файла рабочего процесса CodeQL и задайте debug: true.

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

При этом база данных передается в виде артефакта действий, который можно скачать на локальный компьютер. Дополнительные сведения см. в разделе «AUTOTITLE».

Артефакт будет содержать архивную копию исходных файлов, проверенных с помощью CodeQL под названием src.zip. При сравнении файлов исходного кода в репозитории с файлами в src.zip можно увидеть, какие типы файлов отсутствуют. Узнав, какие типы файлов не анализируются, проще понять, как нужно изменить рабочий процесс для анализа CodeQL.