Skip to main content

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

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

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

При анализе скомпилированных языков в режиме autobuild``manual OR CodeQL сканируют только файлы, созданные в ходе анализа. Поэтому число проверенных строк кода будет меньше, чем ожидалось, если некоторые строки исходного кода компилируются неправильно. Это может произойти по нескольким причинам.

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

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

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

Изменение процесса сборки manual

Замените autobuild процесс теми же командами сборки, которые будут использоваться в рабочей среде. Это гарантирует, что он CodeQL точно знает, как скомпилировать все исходные файлы, которые вы хотите сканировать. Дополнительные сведения об определении шагов сборки см. в разделе CodeQL code scanning for compiled languages.

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

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

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

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

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