Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La compatibilidad con Linux está disponible en Visual Studio 2017 y versiones posteriores. Para ver la documentación correspondiente a estas versiones, establezca la lista desplegable Versión que se encuentra sobre la tabla de contenido en Visual Studio 2017 o Visual Studio 2019.
Una vez que haya creado un proyecto de C++ basado en MSBuild para Linux en Visual Studio y se haya conectado a él mediante el Administrador de conexiones de Linux, puede ejecutar y depurar el proyecto. Compile, ejecute y depure el código en el destino remoto.
Visual Studio 2019 versión 16.1 y posteriores: puede tener como destino distintos sistemas Linux para la depuración y la compilación. Por ejemplo, puede realizar compilaciones cruzadas en x64 y llevar a cabo implementaciones en un dispositivo ARM cuando se eligen escenarios de IoT como destino. Para obtener más información, consulte Especificación de distintas máquinas para compilar y depurar más adelante en este artículo.
Hay varias formas de interactuar con el proyecto de Linux y de depurarlo.
Depure con las características tradicionales de Visual Studio, como son los puntos de interrupción, las ventanas Inspección y mantener el mouse sobre una variable. Con estos métodos, puede depurar como lo haría normalmente para otros tipos de proyecto.
Vea la salida del equipo de destino en la ventana de la consola de Linux. También puede usar la consola para enviar la entrada al equipo de destino.
Depurar el proyecto de Linux
Seleccione el modo de depuración en la página de propiedades Depuración.
GDB se usa para depurar aplicaciones que se ejecutan en Linux. Al depurar en un sistema remoto (no WSL), GDB se puede ejecutar en dos modos diferentes, que pueden seleccionarse desde la opción Modo de depuración de la página de propiedades Depuración del proyecto:
GDB se usa para depurar aplicaciones que se ejecutan en Linux. GDB se puede ejecutar en dos modos diferentes, que pueden seleccionarse desde la opción Modo de depuración de la página de propiedades Depuración del proyecto:
En modo gdbserver, GDB se ejecuta localmente, con lo que se conecta a gdbserver, en el sistema remoto. Para usarlo, debe proporcionar una ruta de acceso local de Windows a GDB en Ruta del depurador en Visual Studio 2022, versión 17.6 y posteriores, o en Ruta de acceso de GDB en Visual Studio 2019 versión 16.11 y versiones anteriores. Para obtener más información sobre dónde proporcionar la ruta de acceso a GDB para proyectos de CMake, consulte Opciones adicionales permitidas con la configuración de gdbserver (16.7 o posterior).
En el modo gdb, el depurador de Visual Studio controla GDB en el sistema remoto. Esta opción es más recomendable si la versión local de GDB no es compatible con la versión instalada en el equipo de destino. Este es el único modo que admite la ventana Consola de Linux.
Nota
Si no es posible alcanzar puntos de interrupción en el modo de depuración gdbserver, pruebe el modo gdb. En primer lugar, gdb debe instalarse en el destino remoto.
Seleccione el destino remoto a través de la barra de herramientas estándar Depurar de Visual Studio.
Cuando el destino remoto esté disponible, verá que aparece por nombre o dirección IP:
Si aún no se ha conectado al destino remoto, verá instrucciones para usar el Administrador de conexiones de Linux para conectarse al destino remoto:
Establezca un punto de interrupción; para ello, haga clic en el margen interno izquierdo de una parte del código que sabe que se ejecutará. Un punto rojo aparece en la línea de código en la que estableció el punto de interrupción.
Presione F5 (o Depurar > Iniciar depuración) para iniciar la depuración.
Al iniciar la depuración, la aplicación se compila en el destino remoto antes de comenzar. Los errores de compilación aparecen en la ventana Lista de errores .
Si no hay errores, la aplicación se inicia y el depurador se detiene en el punto de interrupción:
Ahora, puede interactuar con la aplicación en su estado actual, ver variables y recorrer el código mediante teclas de comando como F10 o F11.
Si quiere usar la consola de Linux para interactuar con la aplicación, seleccione Depurar > Consola de Linux.
Esta consola muestra la salida de la consola del equipo de destino y toma la entrada y la envía al equipo de destino.
Configuración de otras opciones de depuración (proyectos de MSBuild)
Se pueden pasar argumentos de línea de comandos al ejecutable mediante el elemento Argumentos de programa de la página de propiedades Depuración del proyecto.
Puede exportar la variable de entorno
DISPLAY
mediante el comando anterior al inicio en las páginas de propiedades de depuración del proyecto. Por ejemplo:export DISPLAY=:0.0
Se pueden pasar opciones concretas del depurador a GDB mediante la entrada Comandos adicionales del depurador. Por ejemplo, es posible que quiera pasar por alto las señales SIGILL (instrucciones no válidas). Puede usar el comando handle para lograrlo agregando lo siguiente a la entrada Comandos adicionales del depurador que se muestra anteriormente:
handle SIGILL nostop noprint
.Especifique la ruta de acceso a la GDB usada por Visual Studio mediante el elemento Ruta de acceso de GDB en la página de propiedades Depuración del proyecto. Esta opción está disponible en Visual Studio 2019, versión 16.9 y posteriores.
Depurar con la opción Asociar al proceso
La página de propiedades Depuración de los proyectos de Visual Studio y la configuración Launch.vs.json de los proyectos de CMake tienen ambas una opción que permite establecer una asociación con un proceso en ejecución. Si necesita más control del que se proporciona en esta opción, puede colocar un archivo denominado Microsoft.MIEngine.Options.xml
en la raíz de la solución o el área de trabajo. A continuación se muestra un sencillo ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<SupplementalLaunchOptions>
<AttachOptions>
<AttachOptionsForConnection AdditionalSOLibSearchPath="/home/user/solibs">
<ServerOptions MIDebuggerPath="C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\Common7\IDE\VC\Linux\bin\gdb\7.9\x86_64-linux-gnu-gdb.exe"
ExePath="C:\temp\ConsoleApplication17\ConsoleApplication17\bin\x64\Debug\ConsoleApplication17.out"/>
<SetupCommands>
<Command IgnoreFailures="true">-enable-pretty-printing</Command>
</SetupCommands>
</AttachOptionsForConnection>
</AttachOptions>
</SupplementalLaunchOptions>
AttachOptionsForConnection tiene la mayoría de los atributos que probablemente necesite. En el ejemplo anterior se muestra cómo especificar una ubicación para buscar más .so
bibliotecas. El elemento secundario ServerOptions permite asociar al proceso remoto con gdbserver en su lugar. Para ello, deberá especificar un cliente de gdb local (arriba se muestra el que venía incluido en Visual Studio 2017) y una copia local del archivo binario con símbolos. El elemento SetupCommands permite pasar comandos directamente a gdb. Puede encontrar todas las opciones disponibles en el esquema LaunchOptions.xsd en GitHub.
Especificación de distintas máquinas para compilar y depurar en proyectos basados en MSBuild para Linux
Puede separar la máquina de compilación remota de la máquina de depuración remota para proyectos de Linux basados en MSBuild y CMake cuyo destino sea una máquina Linux remota. Por ejemplo, ahora puede realizar compilaciones cruzadas en x64 y llevar a cabo implementaciones en un dispositivo ARM cuando se destinen a escenarios de IoT.
De forma predeterminada, la máquina de depuración remota es la misma que la máquina de compilación remota (Propiedades de configuración>General>Equipo de compilación remoto). Para especificar una nueva máquina de depuración remota, haga clic con el botón derecho en el proyecto en el Explorador de soluciones y vaya a Propiedades> de configuraciónDepuración>remota Máquina de depuración:
El menú desplegable Equipo de depuración remoto se rellena con todas las conexiones remotas establecidas.
Para agregar una nueva conexión remota, vaya a Herramientas>Opciones>Multiplataforma>Administrador de conexiones o busque "Administrador de conexiones" en Inicio rápido. También puede especificar un nuevo directorio de implementación remota en las páginas de propiedades del proyecto (Propiedades de configuración>General>Directorio de implementación remota).
De forma predeterminada, solo se implementan los archivos necesarios para el proceso de depuración en la máquina de depuración remota. Puede usar el Explorador de soluciones para configurar los archivos de origen que se implementan en la máquina de depuración remota. Al hacer clic en un archivo de origen, verá una vista previa de sus propiedades de archivo directamente debajo del Explorador de soluciones:
La propiedad Content especifica si el archivo se implementará en la máquina de depuración remota. Puede deshabilitar por completo la implementación accediendo a Páginas de propiedades>Configuration Manager y desactivando Implementar en la configuración deseada.
En algunos casos, es posible que necesite más control sobre la implementación del proyecto. Por ejemplo, algunos archivos que desea implementar podrían estar fuera de la solución o querrá personalizar el directorio de implementación remoto por archivo o directorio. En estos casos, anexe los bloques de código siguientes al archivo .vcxproj y reemplace "example.cpp" con los nombres de archivo real:
<ItemGroup>
<RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
<SourceMachine>$(RemoteTarget)</SourceMachine>
<TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
<SourcePath>~/example.cpp</SourcePath>
<TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
<DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
<Executable>true</Executable>
</RemoteDeploy>
</ItemGroup>
Proyectos de CMake
Para los proyectos de CMake que tienen como destino una máquina remota Linux, puede especificar una nueva máquina de depuración remota en launch.vs.json. De forma predeterminada, el valor de "remoteMachineName"
se sincroniza con la "remoteMachineName"
propiedad de CMakeSettings.json
, que corresponde a la máquina de compilación remota. Estas propiedades ya no necesitan coincidir y el valor de "remoteMachineName"
en launch.vs.json
dicta qué máquina remota se usa para implementar y depurar.
IntelliSense sugiere una lista de todas las conexiones remotas establecidas. Puede agregar una nueva conexión remota accediendo a Herramientas>Opciones>Multiplataforma>Administrador de conexiones o busque "Administrador de conexiones" en Inicio rápido.
Si desea un control completo sobre la implementación, puede anexar los siguientes bloques de código en el archivo launch.vs.json. Reemplace los valores del marcador de posición con los reales:
"disableDeploy": false,
"deployDirectory": "~\foo",
"deploy" : [
{
"sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
"targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
"sourcePath": "~/example.cpp",
"targetPath": "~/example.cpp",
"executable": "false"
}
]
Pasos siguientes
- Para depurar dispositivos ARM en Linux, consulte la entrada de blog Debugging an embedded ARM device in Visual Studio (Depuración de un dispositivo ARM incrustado en Visual Studio).