Анализ скомпилированных языков
При анализе скомпилированных языков в режиме autobuild``manual OR CodeQL сканируют только файлы, созданные в ходе анализа. Поэтому число проверенных строк кода будет меньше, чем ожидалось, если некоторые строки исходного кода компилируются неправильно. Это может произойти по нескольким причинам.
-
Функция CodeQL
autobuildиспользует эвристики для построения кода в репозитории. Но иногда такой подход приводит к неполному анализу репозитория. Например, если в одном репозитории существует несколько командbuild.sh, анализ может и не завершиться, так как шагautobuildбудет выполняет только одну из команд, поэтому некоторые исходные файлы могут не компилироваться. -
Некоторые компиляторы не работают и 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 .