Compartir por


Implementación, ejecución y depuración del proyecto de MSBuild de Linux

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

  1. 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:

    Captura de pantalla del cuadro de diálogo Páginas de propiedades de la aplicación de consola Linux para Visual Studio, con la opción Propiedades de configuración > Depuración seleccionada y Modo de depuración resaltado con la opción GDB seleccionada y resaltada en la lista desplegable.

    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:

    Captura de pantalla del cuadro de diálogo Páginas de propiedades de la aplicación de consola Linux para Visual Studio 2017 con la opción Propiedades de configuración > Depuración seleccionada y Modo de depuración resaltado con la opción GDB seleccionada y resaltada en la lista desplegable.

    • En modo gdbserver, GDB se ejecuta localmente, con lo que se conecta a gdbserver, en el sistema remoto.

    • 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.

  2. 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.

    Captura de pantalla en la que se muestra una dirección IP de destino remoto.

    Si aún no ha establecido conexión con el destino remoto, se le indicará que use el administrador de conexiones de Linux para conectarse al destino remoto.

    Captura de pantalla en la que se muestra la arquitectura remota, que es x64.

  3. 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.

  4. 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 posibles errores de compilación aparecerán en la ventana Lista de errores.

    Si no hay ningún error, la aplicación se iniciará y el depurador se detendrá en el punto de interrupción.

    Captura de pantalla en la que se muestra que la aplicación ha llegado a un 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.

  5. Si quiere usar la consola de Linux para interactuar con la aplicación, seleccione Depurar > Consola de Linux.

    Captura de pantalla en la que se muestra el elemento de menú Consola de Linux.

    Esta consola muestra cualquier salida de consola del equipo de destino y acepta entradas y las envía al equipo de destino.

    Captura de pantalla en la que se muestra la ventana Consola de Linux.

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

    Captura de pantalla en la que se muestra la propiedad Argumentos de programa en el cuadro de diálogo Páginas de propiedades.

  • 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). Podría usar el comando handle para lograr esto agregando lo siguiente a la entrada Comandos adicionales del depurador como se muestra arriba:

    handle SIGILL nostop noprint

  • Puede especificar la ruta de acceso al GDB usado por Visual Studio mediante el elemento de ruta de acceso de GDB de la página de propiedades de 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 incluye un ejemplo sencillo:

<?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 bibliotecas .so. 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ón>Depuración>Equipo de depuración remoto.

Captura de pantalla en la que se muestra la propiedad máquina de depuración remota de Linux en el cuadro de diálogo Páginas de propiedades que muestra el nombre de usuario, el tipo de autenticación y el puerto.

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 los archivos necesarios para depurar el proceso se implementarán en la máquina de depuración remota. Puede usar el Explorador de soluciones para configurar qué archivos de origen se implementarán en la máquina de depuración remota. Al hacer clic en un archivo de origen, verá una vista previa de las propiedades directamente debajo del Explorador de soluciones.

Captura de pantalla en la que se muestran las propiedades del archivo main.cpp con el contenido de la propiedad = False resaltado.

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" está sincronizado con la propiedad "remoteMachineName" en CMakeSettings.json, que corresponde a la máquina de compilación remota. Estas propiedades ya no tienen que coincidir y el valor de "remoteMachineName" en launch.vs.json determinará qué máquina remota se usa para implementar y depurar.

Máquina de depuración remota de CMake especificada en el archivo launch_schema.json. El nombre de la máquina remota es ${debugInfo . remoteMachineName}

IntelliSense le sugerirá 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

Consulte también

Propiedades de depuración de C++ (C++ para Linux)