Debugueando .Net en Cursor

A pesar de que vscode con Copilot es, en mi humilde opinión considerablemente superior, así son las modas y hay quienes quieren usar herramientas como Cursor. Me ha llevado un buen tiempo de prueba y error, pero al final resulta ser más fácil de lo que parece.

Desafortunadamente, en este momento estas instrucciones no funcionan con Windsurf, recientemente adquirido por OpenAI (y por lo tanto próximo a volverse el próximo furor), a pesar de ser un fork del mismo proyecto y totalmente compatible en otros aspectos.

Para sorpresa de nadie, Microsoft promueve el código abierto, pero nos restringe el uso de las herramientas de desarrollo a sus propios productos: La depuración solo funciona con la versión de Microsoft de vscode. Otros productos, como JetBrains, resolvieron esto desarrollando sus propias herramientas de desarrollo. Por suerte, hay una tercera alternativa de código abierto: netcoredbg de Samsung. ¿Que qué tiene que ver Samsung? Me pregunto lo mismo, no te preocupes.

Cabe aclarar que hablamos de .Net Core.

Para comenzar, debemos obtener el binario para nuestro sistema operativo, no te dejes engañar por las instrucciones complicadas del léame.

Luego de extraer los archivos en una carpeta (no temporal, es decir, donde puedan quedar), abrimos el proyecto en Cursor y agregamos las configuraciones de ejecución.

Debemos crear dos archivos:

.vscode/tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/src/Solution.sln",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary;ForceNoAlign"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

Lo único a modificar, inicialmente, es la ruta y nombre del archivo .sln.

.vscode/launch.json en Windows

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C# Webapp",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/src/bin/Debug/net7.0/App.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src",
            "stopAtEntry": false,
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "pipeTransport": {
                "pipeCwd": "${workspaceFolder}",
                "pipeProgram": "Powershell",
                "pipeArgs": ["-Command"],
                "debuggerPath": "C:\\Users/gabriel\\netcoredbg\\netcoredbg",
                "quoteArgs": true,
                "debuggerArgs": ["--interpreter=vscode"]
            }
        }
    ]
}

.vscode/launch.json en Linux o MacOS

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C# Webapp",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/src/bin/Debug/net7.0/App.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src",
            "stopAtEntry": false,
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "pipeTransport": {
                "pipeCwd": "${workspaceFolder}",
                "pipeProgram": "bash",
                "pipeArgs": ["-c"],
                "debuggerPath": "/Users/gabriel/netcoredbg/netcoredbg",
                "quoteArgs": true,
                "debuggerArgs": ["--interpreter=vscode"]
            }
        }
    ]
}

En ambos casos, las propiedades a ajustar son: program, cwd y pipeTransport.debuggerPath (está en la carpeta donde descomprimimos lo anterior).

Claro que esta es la configuración básica, posiblemente tengas que adaptarlo a tu proyecto, pero creo que es un buen comienzo.

¡Y listo! Ahora simplemente resta ejecutar el proyecto desde la pestaña de Debug, botón de play (Start Debugging o F5). Luego controlaremos el flujo con la barra flotante de depuración.

Adicionalmente, podés instalar extenciones de C#. La extensión C# Dev Kit (oficial de Microsoft) permite abrir y gestionar las soluciones tanto en vscode como en Cursor. Si bien nunca será lo mismo que el Visual Studio, es más que suficiente para las tareas cotidianas. El problema es que, por algún motivo que no he investigado, está disponible en el marketplace de Cursor en Mac, pero no en Windows.

Parece ser que a la fecha la única opción es utilizar la extensión C# (solo «C#» de ms-dotnettools). Asegurate de no tener, o desinstalar, la de Anysphere. En mi caso, quizás porque tenía múltiples soluciones, fue necesario abrir la solución para activarla: F1 > .Net: Open Solution > Tu archivo .sln.

Algunas limitaciones (tiene muchas…)

No puede ejecutar más de un proyecto a la vez. Tampoco podrás ejecutar con dotnet run mientras netcoredbg esté corriendo. Mal si tenés front y backend.

No utilizará tu launchSettings.json, por lo que probablemente necesites agregar variables de entorno en el launch.json.

Todo environmentVariables debe copiarse a env, y si, por ejemplo, se trata de una aplicación web, seguramente tengas:

"applicationUrl": "https://localhost:8080"

Que se traduce en el siguiente parámetro en launch.json:

"env": {
    "ASPNETCORE_URLS": "https://localhost:8080"
    ...
}

Publicado el

en

,

¿Querés seguir la conversación?