Skip to main content

database analyze

Analiza una base de datos y genera resultados significativos en el contexto del código fuente.

¿Quién puede utilizar esta característica?

Las licencias de GitHub CodeQL se otorgan por usuario tras la instalación. Puedes usar CodeQL solo para determinadas tareas según las restricciones de las licencias. Para obtener más información, vea «Acerca de la CLI de CodeQL».

Si tienes una licencia de GitHub Advanced Security, puedes usar CodeQL para el análisis automatizado, la integración continua y la entrega continua. Para obtener más información, vea «Acerca de GitHub Advanced Security».

En este contenido se describe la versión más reciente de CodeQL CLI. Para obtener más información sobre esta versión, consulta https://github.com/github/codeql-cli-binaries/releases.

Para ver detalles de las opciones disponibles para este comando en una versión anterior, ejecuta el comando con la opción --help en el terminal.

Sinopsis

Shell
codeql database analyze --format=<format> --output=<output> [--threads=<num>] [--ram=<MB>] <options>... -- <database> <query|dir|suite|pack>...

Descripción

Analiza una base de datos y genera resultados significativos en el contexto del código fuente.

Ejecuta un conjunto de consultas (o algunas consultas individuales) en una base de datos CodeQL y genera resultados, con estilo de alertas o rutas de acceso, en SARIF u otro formato interpretado.

Este comando combina el efecto de los comandos codeql database run-queries y codeql database interpret-results. Si quieres ejecutar consultas cuyos resultados no cumplen con los requisitos para su interpretación como alertas de código fuente, usa en su lugar codeql database run-queries o codeql query run y, luego, codeql bqrs decode para convertir los resultados sin formato en una notación legible.

Opciones

Opciones principales

<database>

[Obligatorio] Ruta de acceso a la base de datos CodeQL que se va a consultar.

<querysuite|pack>...

Consultas que se van a ejecutar. Cada argumento tiene el formato scope/name@range:path, donde:

  • scope/name es el nombre completo de un paquete de CodeQL.
  • range es un intervalo de SemVer.
  • path es una ruta de acceso al sistema de archivos.

Si se especifica scope/name, range y path son opcionales. Un elemento range que falta implica la versión más reciente del paquete especificado. Un elemento path que falta implica el conjunto de consultas predeterminado del paquete especificado.

path puede ser un archivo de consulta *.ql, un directorio que contiene una o varias consultas o un archivo de conjunto de consultas .qls. Si no se especifica ningún nombre de paquete, se debe proporcionar un elemento path, que se interpretará en relación con el directorio de trabajo actual del proceso actual.

Para especificar un elemento path que contiene un literal @ o :, usa path: como prefijo del argumento, tal como se muestra a continuación: path:directory/with:and@/chars.

Si se especifica scope/name y path, el valor de path no puede ser absoluto. Se interpreta en relación con la raíz del paquete de CodeQL.

Si no se especifica ninguna consulta, la CLI determinará automáticamente un conjunto adecuado de consultas que se van a ejecutar. En concreto, si se especificó un archivo de configuración de análisis de código en el momento de la creación de la base de datos mediante --codescanning-config, se usarán las consultas de este. De lo contrario, se usarán las consultas predeterminadas correspondientes al idioma que se analiza.

--format=<format>

[Obligatorio] Formato en el que se van a escribir los resultados. Uno de los valores siguientes:

csv: valores separados por comas con formato, incluidas las columnas con metadatos de regla y alerta.

sarif-latest: formato de intercambio de resultados de análisis estático (SARIF); un formato basado en JSON para describir los resultados de análisis estático. Esta opción de formato usa la versión admitida más reciente (v2.1.0). Esta opción no es adecuada para su uso en la automatización, ya que generará diferentes versiones de SARIF entre diferentes versiones de CodeQL.

sarifv2.1.0: SARIF v2.1.0.

graphtext: formato de texto que representa un grafo. Solo es compatible con las consultas con el grafo @kind.

dgml: lenguaje de marcado de grafos dirigido; un formato basado en XML para describir grafos. Solo es compatible con las consultas con el grafo @kind.

dot: lenguaje DOT de Graphviz; un formato basado en texto para describir grafos. Solo es compatible con las consultas con el grafo @kind.

-o, --output=<output>

[Obligatorio] Ruta de acceso de salida en la que se van a escribir los resultados. En el caso de los formatos de grafo, debe ser un directorio y el resultado (o los resultados si este comando admite la interpretación de más de una consulta) se escribirá en ese directorio.

--[no-]rerun

Evalúa incluso las consultas que parecen tener un resultado BQRS ya almacenado en la base de datos.

--no-print-diagnostics-summary

No imprimas un resumen de los diagnósticos analizados en la salida estándar.

--no-print-metrics-summary

No imprimas un resumen de las métricas analizadas en la salida estándar.

--max-paths=<maxPaths>

Número máximo de rutas de acceso que se van a generar para cada alerta con rutas de acceso. (Valor predeterminado: 4)

--[no-]sarif-add-file-contents

[Solo formatos SARIF] Incluye el contenido completo de todos los archivos a los que se hace referencia en al menos un resultado.

--[no-]sarif-add-snippets

[Solo formatos SARIF] Incluye fragmentos de código de cada ubicación mencionada en los resultados, con dos líneas de contexto antes y después de la ubicación notificada.

--[no-]sarif-add-query-help

[Solo formatos SARIF] [En desuso] Incluye la ayuda de la consulta de Markdown para todas las consultas. Carga la ayuda de consulta para /path/to/query.ql desde el archivo /path/to/query.md. Si no se proporciona esta marca, el comportamiento predeterminado es incluir ayuda solo para consultas personalizadas, es decir, las de los paquetes de consultas que no tienen el formato `codeql/<lang&rt;-queries`. Esta opción no tiene ningún efecto cuando se pasa a codeql bqrs interpret.

--sarif-include-query-help=<mode>

[Solo formatos SARIF] Especifica si se debe incluir la ayuda de consulta en la salida de SARIF. Uno de los valores siguientes:

always: incluir la ayuda de consulta para todas las consultas.

custom_queries_only(valor predeterminado): incluir la ayuda de consulta solo para consultas personalizadas, es decir, las de los paquetes de consultas que no tienen el formato `codeql/<lang&rt;-queries`.

never: no incluir la ayuda de consulta para ninguna consulta.

Esta opción no tiene ningún efecto cuando se pasa a codeql bqrs interpret.

Disponible desde la versión v2.15.2.

--no-sarif-include-alert-provenance

[Solo formatos [SARIF avanzados] No incluya información de procedencia de alertas en la salida de SARIF.

Disponible desde la versión v2.18.1.

--[no-]sarif-group-rules-by-pack

[Solo formatos SARIF] Coloca el objeto de regla de cada consulta en su paquete de QL correspondiente en la propiedad <run>.tool.extensions. Esta opción no tiene ningún efecto cuando se pasa a codeql bqrs interpret.

--[no-]sarif-multicause-markdown

[Solo formatos SARIF] Para las alertas que tienen varias causas, las incluyes como una lista de elementos con formato Markdown en la salida además de como una cadena sin formato.

--no-sarif-minify

[Formatos SARIF solamente] Produce resultados SARIF impresos con bastante detalle. De manera predeterminada, la salida SARIF se minimiza para reducir el tamaño del archivo de resultados.

--sarif-run-property=<String=String>

[Solo formatos SARIF] Par clave-valor para añadir al contenedor de propiedades "run" de SARIF generado. Se puede repetir.

--no-group-results

[Solo formatos SARIF] Genera un resultado por mensaje, en lugar de un resultado por ubicación única.

--csv-location-format=<csvLocationFormat>

Formato en el que se van a generar ubicaciones en la salida CSV. Puede ser: URI, columna de línea, longitud de desplazamiento. (Valor predeterminado: columna de línea)

--dot-location-url-format=<dotLocationUrlFormat>

Cadena de formato que define el formato en el que se van a generar direcciones URL de ubicación de archivo en la salida de DOT. Se pueden usar los siguientes marcadores de posición {path} {start:line} {start:column} {end:line} {end:column}, {offset}, {length}.

--[no-]sublanguage-file-coverage

[GitHub.com y GitHub Enterprise Server v3.12.0 y versiones posteriores solamente] Use la información de cobertura de archivos de sublenguaje. Esto calcula, muestra y exporta información de cobertura de archivos independiente para lenguajes que comparten un extractor de CodeQL como C y C++, Java y Kotlin, y JavaScript y TypeScript.

Disponible desde la versión v2.15.2.

--sarif-category=<category>

[Solo formatos SARIF] [Recomendado] Especifica una categoría para este análisis que se va a incluir en la salida de SARIF. Puede usarse una categoría para distinguir análisis múltiples realizados en la misma confirmación y repositorio, pero en lenguajes diferentes o en partes diferentes del código.

Si analizas la misma versión de una base de código de varias maneras diferentes (por ejemplo, para distintos lenguajes) y cargas los resultados en GitHub para su presentación en el análisis de código, este valor debe variar entre cada uno de los análisis, lo que indica al análisis de código que los análisis se complementan en lugar de sustituirse entre sí. (Los valores deben ser coherentes entre ejecuciones del mismo análisis para diferentes versiones del código base).

Este valor aparecerá (con una barra diagonal final anexada si aún no está presente) como la propiedad <run>.automationDetails.id.

--no-database-extension-packs

[Avanzado] Omite los paquetes de extensión almacenados en la base de datos durante su creación, ya sea desde un archivo de configuración de análisis de código o desde archivos de extensión almacenados en el directorio "extensions" del código base analizado.

--no-database-threat-models

[Avanzado] Omite la configuración del modelo de riesgos almacenada en la base de datos durante la creación de esta a partir de un archivo de configuración de análisis de código.

--[no-]download

Descarga las consultas que faltan antes de analizarlas.

Opciones para controlar los paquetes de modelos que se van a usar

--model-packs=<name@range>...

Lista de nombres de paquete de CodeQL, cada uno con un intervalo de versiones opcional, que se usará como paquetes de modelos para personalizar las consultas que están a punto de evaluarse.

Opciones para controlar los modelos de amenazas que se van a usar

--threat-model=<name>...

Una lista de modelos de amenazas para habilitar o deshabilitar.

El argumento es el nombre de un modelo de amenazas, opcionalmente precedido por "!". Si no está presente "!", el modelo de riesgos con nombre y todos sus descendientes están habilitados. Si está presente "!", el modelo de riesgos con nombre y todos sus descendientes están inhabilitados.

El modelo de riesgos "default" se habilita de forma predeterminada, pero se puede deshabilitar especificando "--threat-model !default".

El modelo de riesgos "all" se puede usar para habilitar o deshabilitar todos los modelos de riesgos.

Las opciones --threat-model se procesan en orden. Por ejemplo, "--threat-model local --threat-model !environment" habilita todos los modelos de amenazas del grupo "local", excepto para el modelo de riesgos "entorno".

Esta opción solo tiene efecto en lenguajes que admiten modelos de riesgos.

Disponible desde la versión v2.15.3.

Opciones para controlar el evaluador de consultas

--[no-]tuple-counting

[Avanzado] Muestra recuentos de tuplas para cada uno de los pasos de evaluación en los registros del evaluador de consultas. Si se proporciona la opción --evaluator-log, los recuentos de tuplas se incluirán en los registros JSON estructurados y basados en texto generados por el comando. (Esto puede ser útil para la optimización del rendimiento del código QL complejo).

--timeout=<seconds>

[Avanzado] Establece la duración del tiempo de espera para la evaluación de consultas, en segundos.

La característica de tiempo de espera está pensada para detectar los casos en los que una consulta compleja tardaría "una eternidad" en evaluarse. No es una forma eficaz de limitar la cantidad total de tiempo que puede tardar la evaluación de la consulta. La evaluación podrá continuar siempre y cuando cada parte cronometrada por separado del cálculo se complete dentro del plazo de tiempo de espera. Actualmente, estas partes cronometradas por separado son "capas de RA" de la consulta optimizada, lo cual puede cambiar en el futuro.

Si no se especifica el tiempo de espera o se define como 0, no se establecerá tiempo de espera (excepto para codeql test run, donde el tiempo de espera predeterminado es de 5 minutos).

-j, --threads=<num>

Usa todos estos subprocesos para evaluar las consultas.

De manera predeterminada, su valor es 1. Puedes pasar 0 para usar un subproceso por núcleo en la máquina o -N para dejar N núcleos sin usar (excepto que aún se usa al menos un subproceso).

--[no-]save-cache

[Avanzado] Escribe los resultados intermedios de forma activa en la caché del disco. Esto tarda más y usa (mucho) más espacio en disco, pero puede acelerar la ejecución posterior de consultas similares.

--[no-]expect-discarded-cache

[Avanzado] Toma decisiones sobre qué predicados se van a evaluar y qué se va a escribir en la memoria caché del disco, si se asume que la caché se descartará después de ejecutar las consultas.

--[no-]keep-full-cache

[Avanzado] No limpies la caché del disco una vez finalizada la evaluación. Esto puede ahorrar tiempo si después vas a ejecutar codeql dataset cleanup o codeql database cleanup de todos modos.

--max-disk-cache=<MB>

Establece la cantidad máxima de espacio que puede usar la caché del disco para los resultados intermedios de la consulta.

Si este tamaño no está configurado explícitamente, el evaluador intentará usar una cantidad "razonable" de espacio de caché, en función del tamaño del conjunto de datos y de la complejidad de las consultas. Establecer explícitamente un límite mayor que este uso predeterminado permitirá el almacenamiento en caché adicional que puede acelerar las consultas posteriores.

--min-disk-free=<MB>

[Avanzado] Establece la cantidad de espacio libre de destino en el sistema de archivos.

Si no se proporciona --max-disk-cache, el evaluador intentará reducir el uso de la caché del disco si el espacio libre en el sistema de archivos cae por debajo de este valor.

--min-disk-free-pct=<pct>

[Avanzado] Establece la fracción de destino del espacio libre en el sistema de archivos.

Si no se proporciona --max-disk-cache, el evaluador intentará reducir el uso de la caché del disco si el espacio libre en el sistema de archivos cae por debajo de este porcentaje.

--external=<pred>=<file.csv>

Un archivo CSV que contiene filas para el predicado <pred> externo. Se pueden especificar varias opciones --external.

--xterm-progress=<mode>

[Avanzado] Controla si se va a mostrar el seguimiento del progreso durante la evaluación de QL mediante las secuencias de control xterm. Los valores posibles son:

no: nunca se produce un progreso destacado; se asume que el terminal es lento.

auto (predeterminado) : detecta automáticamente si el comando se ejecuta en un terminal adecuado.

yes: se asume que el terminal comprende las secuencias de control xterm. La característica sigue dependiendo de poder detectar automáticamente el tamaño del terminal y también se deshabilitará si se proporciona -q.

25x80 (o similar): como yes, además de proporcionar también explícitamente el tamaño del terminal.

25x80:/dev/pts/17 (o similar): muestra un progreso destacado en un terminal distinto de stderr. Resulta útil sobre todo para las pruebas internas.

Opciones para controlar la salida de registros de evaluador estructurados

--evaluator-log=<file>

[Avanzado] Genera registros estructurados sobre el rendimiento del evaluador en el archivo especificado. El formato de este archivo de registro está sujeto a cambios sin previo aviso, pero será una secuencia de objetos JSON separados por dos caracteres de nueva línea (opción predeterminada) o por uno si se pasa la opción --evaluator-log-minify. Usa codeql generate log-summary <file> para generar un resumen más estable de este archivo y evita analizar el archivo directamente. Si el archivo ya existe, se sobrescribirá.

--evaluator-log-minify

[Avanzado] Si se pasa la opción --evaluator-log, al pasar también esta opción se minimizará el tamaño del registro JSON generado, a costa de un resultado mucho menos legible.

Opciones para controlar el uso de RAM

-M, --ram=<MB>

El evaluador de consultas intentará mantener su superficie total de memoria por debajo de este valor. (Sin embargo, para bases de datos de gran tamaño es posible que el umbral se interrumpa mediante asignaciones de memoria respaldadas por archivos, que se pueden intercambiar al disco en caso de presión de memoria.)

El valor debe ser de al menos 2048 MB; los valores más pequeños se redondean de forma transparente hacia arriba.

Opciones para controlar la compilación de QL

--warnings=<mode>

Cómo controlar las advertencias del compilador de QL. Uno de los valores siguientes:

hide: suprime las advertencias.

show (predeterminado) : imprime advertencias, pero continúa con la compilación.

error: trata las advertencias como errores.

--no-debug-info

No emite información de ubicación de origen en RA para la depuración.

--[no-]fast-compilation

[En desuso] [Avanzado] Omite los pasos de optimización especialmente lentos.

--no-release-compatibility

[Avanzado] Usa las características más recientes del compilador, a costa de la portabilidad.

De vez en cuando, el evaluador de QL será compatible con nuevas características del lenguaje QL y optimizaciones del evaluador unas cuantas versiones antes de que se habiliten de forma predeterminada en el compilador de QL. Esto ayuda a garantizar que el rendimiento que experimentes al desarrollar consultas en la versión de CodeQL más reciente puede coincidir con versiones ligeramente anteriores que todavía pueden estar en uso para las integraciones de CI o el examen de código.

Si no te importa que las consultas sean compatibles con otras versiones de CodeQL (anteriores o posteriores), a veces puedes lograr una pequeña cantidad de rendimiento adicional mediante esta marca para habilitar las mejoras recientes en el compilador desde el principio.

En versiones en las que no hay ninguna mejora reciente que se deba habilitar, esta opción silenciosamente no hace nada. Por lo tanto, es seguro establecerla una vez y para todo en el archivo de configuración de CodeQL global.

Disponible desde la versión v2.11.1.

--[no-]local-checking

Realiza solo comprobaciones iniciales en la parte del origen de QL que se usa.

--no-metadata-verification

No compruebes los metadatos de consulta insertados en los comentarios de QLDoc para ver si son válidos.

--compilation-cache-size=<MB>

[Avanzado] Reemplaza el tamaño máximo predeterminado para un directorio de caché de compilación.

--fail-on-ambiguous-relation-name

[Avanzado] Se produce un error en la compilación si se genera un nombre de relación ambiguo durante la compilación.

Opciones para configurar el entorno de compilación

--search-path=<dir>[:<dir>...]

Lista de directorios en los que se pueden encontrar paquetes de QL. Cada directorio puede ser un paquete de QL (o una agrupación de paquetes que contenga un archivo .codeqlmanifest.json en la raíz) o el elemento primario inmediato de uno o varios directorios de este tipo.

Si la ruta de acceso contiene más de un directorio, su orden define la prioridad entre ellos: cuando un nombre de paquete que se debe resolver tiene coincidencias en más de uno de los árboles de directorio, tiene prioridad el que se indica primero.

Apuntar esto a una extracción del repositorio CodeQL de código abierto debería funcionar al consultar uno de los lenguajes que residen allí.

Si extrajiste el repositorio CodeQL como un elemento relacionado de la cadena de herramientas CodeQL desempaquetada, no es necesario proporcionar esta opción; dichos directorios del mismo nivel siempre se buscarán paquetes de QL que no se encuentren de otro modo. (Si este valor predeterminado no funciona, se recomienda encarecidamente configurar --search-path de una vez en un archivo de configuración por usuario).

(Nota: En Windows, el separador de ruta de acceso es ;).

--additional-packs=<dir>[:<dir>...]

Si se da esta lista de directorios, se buscarán paquetes en ellos antes que en los incluidos en --search-path. El orden entre ellos no importa; si se encuentra un nombre de paquete en dos lugares diferentes de esta lista es un error.

Esto resulta útil si estás desarrollando temporalmente una versión nueva de un paquete que también aparece en la ruta de acceso predeterminada. Por otro lado, no se recomienda reemplazar esta opción en un archivo de configuración; algunas acciones internas agregarán esta opción sobre la marcha y reemplazarán cualquier valor configurado.

(Nota: En Windows, el separador de ruta de acceso es ;).

--library-path=<dir>[:<dir>...]

[Avanzado] Lista opcional de los directorios que se agregarán a la ruta de búsqueda de importación sin procesar para las bibliotecas de QL. Esto solo debe usarse si usas bibliotecas de QL que no se han empaquetado como paquetes de QL.

(Nota: En Windows, el separador de ruta de acceso es ;).

--dbscheme=<file>

[Avanzado] Define explícitamente las consultas dbscheme en las que se debe realizar la compilación. Esto solo debe proporcionarse a los autores de llamadas que están extremadamente seguros de lo que están haciendo.

--compilation-cache=<dir>

[Avanzado] Especifica un directorio adicional que se va a usar como caché de compilación.

--no-default-compilation-cache

[Avanzado] No uses cachés de compilación en ubicaciones estándar, como en el paquete de QL que contiene la consulta o en el directorio de la cadena de herramientas de CodeQL.

Opciones para configurar el administrador de paquetes de CodeQL

--registries-auth-stdin

Autentícate en los registros de contenedores de servidor de GitHub Enterprise; para ello, pasa una lista separada por comas de pares <registry_url>=<token>.

Por ejemplo, puedes pasar https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 para autenticarte en dos instancias del servidor de GitHub Enterprise.

Esto invalida las variables de entorno CODEQL_REGISTRIES_AUTH y GITHUB_TOKEN. Si solo necesitas autenticarte en el registro de contenedor de github.com, puedes hacerlo mediante la opción --github-auth-stdin más sencilla.

--github-auth-stdin

Autentícate en el registro de contenedores de github.com; para ello, pasa un token de aplicaciones de GitHub en github.com o un token de acceso personal mediante la entrada estándar.

Para autenticarte en los registros de contenedores de servidor de GitHub Enterprise, pasa --registries-auth-stdin o usa la variable de entorno CODEQL_REGISTRIES_AUTH.

Esto invalida la variable de entorno GITHUB_TOKEN.

Opciones comunes

-h, --help

Muestra este texto de ayuda.

-J=<opt>

[Avanzado] Asigna la opción a la JVM que ejecuta el comando.

(Ten en cuenta que las opciones que contienen espacios no se administrarán correctamente).

-v, --verbose

Aumenta incrementalmente el número de mensajes de progreso impresos.

-q, --quiet

Reduce incrementalmente el número de mensajes de progreso impresos.

--verbosity=<level>

[Avanzado] Establece explícitamente el nivel de detalle en errores, advertencias, progreso, progreso+, progreso++, progreso+++. Invalida -v y -q.

--logdir=<dir>

[Avanzado] Escribe registros detallados en uno o varios archivos del directorio especificado, con nombres generados que incluyen marcas de tiempo y el nombre del subcomando en ejecución.

(Para escribir un archivo de registro con un nombre sobre el que tienes control total, proporciona --log-to-stderr y redirige stderr como quieras).

--common-caches=<dir>

[Avanzado] Controla la ubicación de los datos en caché del disco que se conservarán entre varias ejecuciones de la CLI, como paquetes QL descargados y planes de consulta compilada. Si no se define explícitamente, se toma como predeterminado un directorio denominado .codeql en el directorio principal del usuario, que se creará en caso de que no exista.

Disponible desde la versión v2.15.2.