Compartir a través de


Configuración de un proyecto de C++ para IntelliSense

En algunos casos, es posible que tenga que configurar manualmente el proyecto de C++ para que IntelliSense funcione correctamente. En el caso de los proyectos de MSBuild (basados en .vcxproj archivos), puede ajustar la configuración en las propiedades del proyecto. En el caso de los proyectos que no son de MSBuild, ajuste la configuración del CppProperties.json archivo en el directorio raíz del proyecto. En algunos casos, es posible que tenga que crear un archivo de sugerencias para ayudar a IntelliSense a comprender las definiciones de macro. El IDE de Visual Studio le ayuda a identificar y corregir problemas de IntelliSense.

IntelliSense de archivo único

Al abrir un archivo que no se incluye en un proyecto, Visual Studio proporciona compatibilidad con IntelliSense, pero de forma predeterminada no se muestran subrayados ondulados de error. Si la barra de navegación indica Archivos varios, eso probablemente explica por qué no ve subrayados de error debajo del código incorrecto o por qué no está definida una macro de preprocesador.

Comprobar la lista de errores

Si un archivo no está abierto en modo de archivo único y IntelliSense no funciona correctamente, el primer lugar para comprobar es la ventana Lista de errores . Para ver todos los errores de IntelliSense para el archivo de origen actual junto con todos los archivos de encabezado incluidos, elija Compilar e IntelliSense en la lista desplegable:

Captura de pantalla de la ventana de la lista de errores. En la lista desplegable de filtros, se ha seleccionado

IntelliSense genera un máximo de 1000 errores. Si hay más de 1000 errores en los archivos de encabezado que incluye un archivo de origen, el archivo de origen muestra solo una única marca ondulada de error al inicio del archivo de origen.

Asegúrese de que las rutas de acceso de #include son correctas

Proyectos de MSBuild

Si ejecuta las compilaciones fuera del IDE de Visual Studio y las compilaciones se ejecutan correctamente, pero IntelliSense es incorrecto, es posible que la línea de comandos no esté sincronizada con la configuración del proyecto para una o varias configuraciones. Haga clic con el botón derecho en el nodo del proyecto en Explorador de Soluciones y asegúrese de que todas las rutas de acceso de #include sean correctas para la configuración y la plataforma actuales. Si las rutas de acceso son idénticas en todas las configuraciones y plataformas, puede seleccionar Todas las configuraciones y Todas las plataformas y, a continuación, comprobar que las rutas de acceso son correctas.

Captura de pantalla que muestra la opción Incluir directorios en la sección Propiedades de configuración.

Para ver los valores actuales de las macros de compilación, como VC_IncludePath, seleccione la lista desplegable Directorios de inclusión . A continuación, elija <Editar> y seleccione el botón Macros .

Proyectos Makefile

Para proyectos makefile basados en la plantilla de proyecto NMake, elija NMake en Propiedades de configuración y, a continuación, elija Incluir ruta de búsqueda en la categoría IntelliSense :

Captura de pantalla que muestra la opción Propiedades > de configuración N Make Include Search Path (Incluir > ruta de acceso de búsqueda).

Proyectos de CMake

En el caso de los proyectos de CMake, asegúrese de que las rutas de acceso de #include se especifiquen correctamente para todas las configuraciones en CMakeLists.txt. Otros tipos de proyecto pueden requerir un CppProperties.json archivo. Para obtener más información, consulte Configuración de la navegación de código con CppProperties.json. Asegúrese de que las rutas de acceso son correctas para cada configuración definida en el archivo.

Si hay un error de sintaxis en el CppProperties.json archivo, IntelliSense en los archivos afectados es incorrecto. Visual Studio muestra el error en la ventana de salida.

Problemas del analizador de etiquetas

El parser de etiquetas es un parser fuzzy de C++ aproximado que se utiliza para exploración y navegación. Es rápido, pero no intenta comprender completamente todas las construcciones de código.

Por ejemplo, no evalúa las macros de preprocesador y, por tanto, podría analizar código incorrectamente que hace un uso intensivo de ellas. Cuando el analizador de etiquetas encuentra una construcción de código desconocida, puede omitir esa región de código completa.

Hay dos maneras comunes en las que este problema se manifiesta en Visual Studio:

  1. El IDE ofrece crear una definición de función para una función que ya está definida.

  2. Si la barra de navegación muestra una macro más interna, se omitió la definición de función actual:

    Captura de pantalla que muestra el analizador de etiquetas que omite la definición de la función.

    El fragmento de código muestra una definición de macro para do_if que se usa dentro de la función principal. El analizador de etiquetas no entiende la macro, por lo que en lugar de la lista desplegable de navegación que muestra que el nombre de la función actual es main, muestra el nombre de la macro: do_if.

Para corregir estos tipos de problemas, agregue un archivo denominado cpp.hint a la raíz del directorio de la solución. Para más información, consulte Archivos de indicaciones.

Los errores del analizador de etiquetas aparecen en la ventana Lista de errores .

Validar la configuración del proyecto con registros de diagnóstico

Para comprobar si el compilador de IntelliSense usa las opciones correctas del compilador, incluidas las macros Incluir rutas de acceso y preprocesador, active registro de diagnóstico de las líneas de comandos de IntelliSense.

  1. Abra el panel Herramientas>Opciones y expanda la sección de Todos los ajustes>Idiomas>C/C++>, y Registro de diagnóstico de >.

  2. Seleccione la casilla Log diagnostic information en la ventana de salida.

  3. Establezca el valor de Nivel de Registro en 5 (más detallado).

  4. Establezca el valor del filtro de registro en 8 (registro de IntelliSense).

  1. Abra el cuadro de diálogo Opciones de herramientas> y expanda la sección Editor de texto>>.

  2. En el grupo Registro de diagnóstico , establezca la opción Habilitar registro en True.

  3. Establezca el valor Nivel de Registro en 5 (más detallado).

  4. Configure el valor del Filtro de registro a 8 (registro de IntelliSense).

  5. Selecciona Aceptar.

La ventana salida muestra ahora las líneas de comandos que se pasan al compilador de IntelliSense. Este es una salida de ejemplo:

[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h

Esta información puede ayudarle a comprender por qué IntelliSense proporciona información inexacta. Por ejemplo, si el directorio Include del proyecto contiene $(MyVariable)\Include, y el registro de diagnóstico muestra /I\Include como una ruta de inclusión, significa que $(MyVariable) no se evaluó y se quitó de la ruta de inclusión final.

Información sobre la compilación de IntelliSense

Visual Studio usa un compilador de C++ dedicado para crear y mantener la base de datos que impulsa todas las características de IntelliSense. Para mantener la base de datos de IntelliSense sincronizada con el código, Visual Studio inicia automáticamente compilaciones solo de IntelliSense como tareas en segundo plano en respuesta a determinados cambios realizados en la configuración del proyecto o archivos de origen.

Sin embargo, en algunos casos, Es posible que Visual Studio no actualice la base de datos de IntelliSense de forma oportuna. Por ejemplo, al ejecutar un git pull comando o git checkout , Visual Studio puede tardar hasta una hora en detectar cambios en los archivos. Para forzar un nuevo examen de todos los archivos de una solución, haga clic con el botón derecho en el nodo del proyecto en Explorador de soluciones y elija Volver a examinar la solución.

Solución de problemas de errores de compilación de IntelliSense

Una compilación de IntelliSense no genera archivos binarios, pero todavía puede producir un error. Una posible causa de error son los archivos personalizados .props o .targets. En Visual Studio 2017 versión 15.6 y posteriores, los errores de compilación solo de IntelliSense se registran en la ventana de salida. Para verlos, establezca Mostrar resultados desde en Solución:

Captura de pantalla que muestra la ventana de salida. El menú desplegable Mostrar salida desde está establecido en Solución.

Es posible que el mensaje de error le indique habilitar el seguimiento en tiempo de diseño:

error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.

Si establece la variable TRACEDESIGNTIME de entorno en true y reinicia Visual Studio, verá un archivo de registro en el %TEMP% directorio, lo que podría ayudar a diagnosticar el error de compilación.

Para más información sobre la TRACEDESIGNTIME variable de entorno, consulte Roslyn y Compilaciones en tiempo de diseño. La información de estos artículos es relevante para los proyectos de C++.