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.
En esta guía se muestra cómo depurar de forma interactiva el código fuente de C# para un módulo de PowerShell compilado mediante Visual Studio Code (VS Code) y la extensión de C#.
Se asume cierta familiaridad con el depurador de Visual Studio Code.
Para obtener una introducción general al depurador de VS Code, vea Depuración en Visual Studio Code.
Para obtener ejemplos de cómo depurar módulos y archivos de scripts de PowerShell, vea Uso de Visual Studio Code para la edición y la depuración de forma remota.
En esta guía se da por hecho que ha leído y seguido las instrucciones de la guía Escritura de módulos portables.
Creación de una tarea de compilación
Compile el proyecto automáticamente antes de iniciar una sesión de depuración. La recompilación garantiza que se depura la versión más reciente del código.
Configure una tarea de compilación:
En la Paleta de comandos, ejecute el comando Configure Default Build Task.
En el cuadro de diálogo Seleccionar una tarea para configurar, elija la opción Crear un archivo tasks.json a partir de la plantilla.
En el cuadro de diálogo Select a Task Template (Seleccionar una plantilla de tarea), elija .NET Core.
Se crea un nuevo archivo tasks.json
si aún no existe uno.
Para probar la tarea de compilación:
En la Paleta de comandos, ejecute el comando Run Build Task.
En el cuadro de diálogo Select the build task to run (Seleccionar la tarea de compilación para ejecutar), elija Compilar.
Información sobre los archivos DLL que se bloquean
De forma predeterminada, una compilación correcta no muestra la salida en el panel de terminal. Si ve una salida que contiene el texto El archivo del proyecto no existe, debe editar el archivo de tasks.json
. Incluya la ruta de acceso explícita al proyecto de C# expresado como "${workspaceFolder}/myModule"
. En este ejemplo, myModule
es el nombre de la carpeta del proyecto. Esta entrada debe ir después de la entrada build
en la lista de args
de la siguiente manera:
{
"label": "build",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"${workspaceFolder}/myModule",
// Ask dotnet build to generate full paths for file names.
"/property:GenerateFullPaths=true",
// Do not generate summary otherwise it leads to duplicate errors in Problems panel
"/consoleloggerparameters:NoSummary",
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
}
Al depurar, el archivo DLL del módulo se importa en la sesión de PowerShell en el terminal de VS Code. El archivo DLL se bloquea. El mensaje siguiente se muestra al ejecutar la tarea de compilación sin cerrar la sesión de terminal:
Could not copy "obj\Debug\netstandard2.0\myModule.dll" to "bin\Debug\netstandard2.0\myModule.dll"`.
Las sesiones del terminal deben cerrarse antes de recompilar.
Configuración del depurador
Para depurar el cmdlet de PowerShell, debe configurar una configuración de inicio personalizada. Esta configuración se usa para:
- Compilación del código fuente
- Inicio de PowerShell con el módulo cargado
- Deje PowerShell abierto en el panel de terminales.
Al invocar el cmdlet en la sesión de terminal, el depurador se detiene en cualquier punto de interrupción establecido en el código fuente.
Configuración de launch.json para PowerShell
Instala la extensión C# para Visual Studio Code
En el panel Depurar, agregue una configuración de depuración.
En el cuadro de diálogo
Select environment
, elija.NET Core
El archivo
launch.json
se abre en el editor. Con tu cursor dentro de la matrizconfigurations
, ves el selectorconfiguration
. Si no ve esta lista, seleccione Agregar configuración.Para crear una configuración de depuración predeterminada, seleccione Launch .NET Core Console App (Iniciar la aplicación de consola de .NET Core):
Edite los campos
name
,program
,args
yconsole
como se indica a continuación:{ "name": "PowerShell cmdlets: pwsh", "type": "coreclr", "request": "launch", "preLaunchTask": "build", "program": "pwsh", "args": [ "-NoExit", "-NoProfile", "-Command", "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll", ], "cwd": "${workspaceFolder}", "stopAtEntry": false, "console": "integratedTerminal" }
El campo program
se usa para iniciar pwsh
, de modo que se pueda ejecutar el cmdlet que se está depurando. El argumento -NoExit
impide que la sesión de PowerShell salga tan pronto como se importe el módulo.
La ruta de acceso del argumento Import-Module
es la ruta de acceso de salida de la compilación predeterminada cuando se ha seguido la guía Escritura de módulos portables. Si se ha creado un manifiesto de módulo (archivo .psd1
), debe usar en su lugar la ruta de acceso a este. El separador de ruta de acceso /
funciona en Windows, Linux y macOS. Debe usar el terminal integrado para ejecutar los comandos de PowerShell que se quieren depurar.
Nota
Si el depurador no se detiene en ningún punto de interrupción, busque en la Consola de depuración de Visual Studio Code para ver una línea que indica:
Loaded '/path/to/myModule.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Si ve esto, agregue "justMyCode": false
a la configuración de inicio (en el mismo nivel que "console": "integratedTerminal"
.
Configuración de launch.json para Windows PowerShell
Esta configuración de inicio funciona para probar los cmdlets en Windows PowerShell (powershell.exe
).
Cree una segunda configuración de inicio con los siguientes cambios:
name
debe serPowerShell cmdlets: powershell
type
debe serclr
program
debe serpowershell
Debería tener este aspecto:
{ "name": "PowerShell cmdlets: powershell", "type": "clr", "request": "launch", "preLaunchTask": "build", "program": "powershell", "args": [ "-NoExit", "-NoProfile", "-Command", "Import-Module ${workspaceFolder}/myModule/bin/Debug/netstandard2.0/myModule.dll", ], "cwd": "${workspaceFolder}", "stopAtEntry": false, "console": "integratedTerminal" }
Inicio de una sesión de depuración
Ahora todo está listo para comenzar la depuración.
Coloque un punto de interrupción en el código fuente del cmdlet que desea depurar:
Un punto de interrupción se muestra como un punto rojo en la encuadernación
Asegúrese de que la configuración relevante de los cmdlets de PowerShell está seleccionada en el menú desplegable de configuración de la vista Depuración:
Presione F5 o haga clic en el botón Iniciar depuración.
Cambie al panel de terminal e invoque el cmdlet:
La ejecución se detiene en el punto de interrupción:
Puede recorrer el código fuente, inspeccionar variables e inspeccionar la pila de llamadas.
Para finalizar la depuración, haga clic en Detener en la barra de herramientas Depurar o pulse Mayús+F5. El shell que se usa para la depuración se cierra y libera el bloqueo en el archivo DLL compilado.