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 en el archivo CppProperties.json 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 está incluido en un proyecto, Visual Studio proporciona cierto soporte de IntelliSense, pero de forma predeterminada no se muestran los marcadores de error. Si en la barra de navegación dice Archivos varios, eso probablemente explique por qué no ve ningún subrayado ondulado de error debajo del código incorrecto o por qué no hay definida ninguna 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:
IntelliSense genera un máximo de 1000 errores. Si hay más de 1000 errores en los archivos de encabezado incluidos por un archivo de origen, solo se muestra un subrayado ondulado 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.
Para ver los valores actuales de las macros de compilación, como VC_IncludePath, seleccione la línea Directorios de inclusión y haga clic en la lista desplegable de la derecha. A continuación, elija <Editar> y haga clic en el botón Macros.
Proyectos Makefile
Para proyectos de archivos Make basados en la plantilla de proyecto NMake, elija NMake en el panel de la izquierda y, luego, Ruta de acceso de búsqueda de inclusión en la categoría IntelliSense:
Abrir proyectos de carpeta
En el caso de los proyectos de CMake, asegúrese de que las rutas de #include se especifican correctamente para todas las configuraciones de CMakeLists.txt. Otros tipos de proyecto pueden requerir un archivo CppProperties.json. Para más información, consulte Configurar IntelliSense 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 archivo CppProperties.json, IntelliSense en los archivos afectados será incorrecto. Visual Studio mostrará el error en la ventana de salida.
Problemas del analizador de etiquetas
El analizador de etiquetas es un analizador "aproximado" de C++ que se usa para exploración y navegación. Es muy 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, puede 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 completa del código.
Hay dos maneras comunes en las que este problema se manifiesta en Visual Studio:
Si la barra de navegación muestra una macro más interna, se omitió la definición de función actual:
El IDE ofrece crear una definición de función para una función que ya está definida:
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 utiliza las opciones correctas del compilador, incluidas las rutas de inclusión y las macros del preprocesador, active el registro de diagnóstico de líneas de comandos de IntelliSense en Herramientas > Opciones > Editor de texto > C/C++ > Avanzado > Registro de diagnóstico. Establezca Enable Logging (Habilitar registro) en True, Logging Level (Nivel de registro) en 5 (el más detallado) y Logging Filter (Filtro de registro) en 8 (registro de IntelliSense).
La ventana de salida mostrará ahora las líneas de comandos que se pasan al compilador de IntelliSense. Esta 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)\Includey el registro de diagnóstico muestra /I\Include como ruta de acceso 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 una git pull o comando 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 del fallo son los archivos .props o .targets personalizados. 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:
Ventana de salida
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 de entorno TRACEDESIGNTIME en true y reinicia Visual Studio, verá un archivo de registro en el directorio %TEMP%, lo que podría ayudar a diagnosticar el error de compilación.
Para obtener más información sobre la variable de entorno TRACEDESIGNTIME, consulte Roslyn y Common Project System. La información de estos artículos es relevante para los proyectos de C++.