Cómo lanzar y depurar WSL C++ Binario de Dentro de Visual Studio

Quiero poder lanzar y depurar un binario WSL Linux desde Visual Studio.

EDIT:

Tenga en cuenta que quiero construir dentro de WSL, es decir. gcc -g test.cpp -o test y solo use Visual Studio para lanzar y depurar el binario. Idealmente me gustaría algo como: devenv.exe /debugexe para un binario Linux. Esto probablemente equipararía a algo como DebugAdapterHost.Launch /LaunchJson:c:\wsl\vs\launch.json dentro de la ventana de mando.

Tomando el enfoque de este artículo, el siguiente es un launch.json que lo aqueja para . NET:

{
  "version": "0.2.0",
  "adapter": "c:\\tools\\plink.exe",
  "adapterArgs": "-ssh -pw  chrisnas@DBGDQPZ1 -batch -T ~/vsdbg/vsdbg --interpreter=vscode",
  "configurations": [
    {
      "name": ".NET Core Launch",
      "type": "coreclr",
      "cwd": "/mnt/d/wsl/TestConsole/TestConsole/bin/Debug/netcoreapp2.1/publish",
      "program": "TestConsole.dll",
      "request": "launch"
    }
  ]
}

He visto artículos que usan GDBServer, sin embargo esto mucho más engorroso que el enfoque descrito anteriormente.

¿Cómo se puede modificar esto para trabajar con C++?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por pixelpioneerx


2 Respuestas:

  • Para lanzar y depurar un binario de C++ compilado en WSL desde Visual Studio, puedes seguir los siguientes pasos:

    • Abre tu proyecto de C++ en WSL y compila el código utilizando gcc con la bandera de depuración `-g`, por ejemplo:

    bash
       gcc -g test.cpp -o test
       

    • Crea un archivo `launch.json` en el directorio `.vscode` de tu proyecto en WSL con la configuración adecuada para lanzar y depurar el binario de C++. Puedes modificar el ejemplo que proporcionaste para .NET para que funcione con C++ de la siguiente manera:

    json
       {
         "version": "0.2.0",
         "adapter": "c:\tools\plink.exe",
         "adapterArgs": "-ssh -pw  user@localhost -batch -T ~/vsdbg/vsdbg --interpreter=vscode",
         "configurations": [
           {
             "name": "C++ Launch",
             "type": "gdb",
             "cwd": "",
             "program": "",
             "request": "launch",
             "miDebuggerPath": "/usr/bin/gdb"
           }
         ]
       }
       

    Asegúrate de reemplazar <tu_directorio_de_trabajo> con el directorio donde se encuentra tu binario y <ruta_al_binario_en_wsl> con la ruta absoluta al binario compilado en WSL.

    • Luego, desde Visual Studio, puedes abrir la carpeta del proyecto que se encuentra en WSL y establecer la configuración de depuración para usar el archivo `launch.json` que configuraste.
    • Lanza la depuración desde Visual Studio y deberías poder depurar tu binario de C++ compilado en WSL.

    Ten en cuenta que esta configuración depende de tener instalado gdb en WSL para que Visual Studio pueda depurar el binario correctamente.

    Respondida el Dec 19, 2020 a las 10:06 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Configuración de Visual Studio

    • Instala la extensión "Remote - WSL" para Visual Studio.
    • Abre Visual Studio y haz clic en "Archivo" > "Abrir..." para abrir una terminal WSL.

    Creación del binario WSL C++

    • En la terminal WSL, navega hasta el directorio donde deseas construir el binario.
    • Compila el código C++ con depuración habilitada: `g++ -g test.cpp -o test`

    Lanzamiento y depuración del binario

    • En Visual Studio, abre la terminal WSL que contiene el binario compilado.
    • Ejecuta el siguiente comando para iniciar el servidor de depuración: `gdbserver :2345 test`
    • En Visual Studio, haz clic en "Depurar" > "Adjuntar a proceso...".
    • En el cuadro de diálogo "Adjuntar a proceso", selecciona "Proceso de cliente de depuración (64 bits)" en la lista desplegable "Tipo de proceso".
    • Introduce `localhost` como "Nombre del equipo" y `2345` como "Número de puerto".
    • Haz clic en "Adjuntar".

    Archivo launch.json (opcional)

    Si deseas utilizar un archivo launch.json para lanzar y adjuntar al proceso de depuración, puedes crear uno con el siguiente contenido:

    json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "WSL C++ Debug",
          "type": "gdb",
          "cwd": "/mnt/d/wsl/path/to/binaries",
          "request": "attach",
          "miDebuggerServerAddress": "localhost",
          "miDebuggerServerPort": 2345
        }
      ]
    }
    

    Guarda el archivo en la carpeta .vscode en tu directorio WSL y luego puedes lanzarlo y adjuntarlo desde Visual Studio utilizando la opción "Depurar archivo de configuración de inicio".

    Nota:

    Asegúrate de que tanto Visual Studio como la terminal WSL estén usando la misma versión de gdb. Si la depuración no funciona, intenta aumentar el valor del parámetro timeout en el archivo launch.json ("timeout": 10000).

    Respondida el Dec 19, 2020 a las 10:15 - por Gemini

    Votos positivos: 0 | Votos negativos: 0