Partilhar via


Como Depurar Scripts no ISE do Windows PowerShell

Este artigo descreve como depurar scripts em um computador local usando os recursos de depuração visual do ISE (Ambiente de Script Integrado) do Windows PowerShell.

Como gerir pontos de interrupção

Um ponto de interrupção é um local designado em um script onde você gostaria que a operação pausasse para que você possa examinar o estado atual das variáveis e o ambiente no qual o script está sendo executado. Depois que o script for pausado por um ponto de interrupção, você poderá executar comandos no Painel de Console para examinar o estado do script. Você pode produzir variáveis ou executar outros comandos. Você pode até mesmo modificar o valor de quaisquer variáveis visíveis para o contexto do script em execução no momento. Depois de examinar o que deseja ver, você pode retomar a operação do script.

Você pode definir três tipos de pontos de interrupção no ambiente de depuração do Windows PowerShell:

  1. Ponto de interrupção da linha. O script pausa quando a linha designada é alcançada durante a operação do script

  2. Ponto de interrupção variável. O script pausa sempre que o valor da variável designada muda.

  3. Ponto de interrupção do comando. O script pausa sempre que o comando designado está prestes a ser executado durante a operação do script. Ele pode incluir parâmetros para filtrar ainda mais o ponto de interrupção apenas para a operação desejada. O comando também pode ser uma função que você criou.

Destes, no ambiente de depuração ISE do Windows PowerShell, apenas os pontos de interrupção de linha podem ser definidos usando o menu ou os atalhos de teclado. Os outros dois tipos de pontos de interrupção podem ser definidos, mas são definidos a partir do Painel de Console usando o cmdlet Set-PSBreakpoint . Esta seção descreve como você pode executar tarefas de depuração no Windows PowerShell ISE usando os menus quando disponíveis e executar uma gama mais ampla de comandos do Painel de Console usando scripts.

Para definir um ponto de interrupção

Um ponto de interrupção pode ser definido em um script somente depois de ter sido salvo. Clique com o botão direito do rato na linha onde pretende definir um ponto de interrupção de linha e, em seguida, clique em Alternar Ponto de Interrupção. Em alternativa, clique na linha onde pretende definir um ponto de interrupção de linha e prima F9 ou, no menu Depurar, clique em Alternar Ponto de Interrupção.

O script a seguir é um exemplo de como você pode definir um ponto de interrupção variável a partir do Painel de Console usando o cmdlet Set-PSBreakpoint .

# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server

Listar todos os pontos de interrupção

Exibe todos os pontos de interrupção na sessão atual do Windows PowerShell.

No menu Depurar, clique em Listar pontos de interrupção. O script a seguir é um exemplo de como você pode listar todos os pontos de interrupção do Painel de Console usando o cmdlet Get-PSBreakpoint .

# This command lists all breakpoints in the current session.
Get-PSBreakpoint

Remover um ponto de interrupção

A remoção de um ponto de interrupção o exclui.

Se você acha que pode querer usá-lo novamente mais tarde, considere Desativar um ponto de interrupção . Clique com o botão direito do rato na linha onde pretende remover um ponto de interrupção e, em seguida, clique em ToggleBreakpoint. Em alternativa, clique na linha onde pretende remover um ponto de interrupção e, no menu Depurar , clique em Alternar Ponto de Interrupção. O script a seguir é um exemplo de como remover um ponto de interrupção com uma ID especificada do Painel de Console usando o cmdlet Remove-PSBreakpoint .

# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2

Remover todos os pontos de interrupção

Para remover todos os pontos de interrupção definidos na sessão atual, no menu Depurar , clique em Remover Todos os Pontos de Interrupção.

O script a seguir é um exemplo de como remover todos os pontos de interrupção do Painel de Console usando o cmdlet Remove-PSBreakpoint .

# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint

Desativar um ponto de interrupção

A desativação de um ponto de interrupção não o remove. Desliga-o até estar ativado. Para desativar um ponto de interrupção de linha específico, clique com o botão direito do rato na linha onde pretende desativar um ponto de interrupção e, em seguida, clique em Desativar Ponto de Interrupção.

Em alternativa, clique na linha onde pretende desativar um ponto de interrupção e prima F9 ou, no menu Depurar, clique em Desativar Ponto de Interrupção. O script a seguir é um exemplo de como você pode remover um ponto de interrupção com uma ID especificada do Painel de Console usando o cmdlet Disable-PSBreakpoint .

# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0

Desativar todos os pontos de interrupção

A desativação de um ponto de interrupção não o remove; desliga-o até estar ativado. Para desativar todos os pontos de interrupção na sessão atual, no menu Depurar , clique em Desativar todos os pontos de interrupção. O script a seguir é um exemplo de como você pode desabilitar todos os pontos de interrupção do Painel de Console usando o cmdlet Disable-PSBreakpoint .

# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint

Ativar um ponto de interrupção

Para ativar um ponto de interrupção específico, clique com o botão direito do rato na linha onde pretende ativar um ponto de interrupção e, em seguida, clique em Ativar Ponto de Interrupção. Em alternativa, clique na linha onde pretende ativar um ponto de interrupção e, em seguida, prima F9 ou, no menu Depurar, clique em Ativar Ponto de Interrupção. O script a seguir é um exemplo de como você pode habilitar pontos de interrupção específicos do Painel de Console usando o cmdlet Enable-PSBreakpoint .

# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5

Ativar todos os pontos de interrupção

Para habilitar todos os pontos de interrupção definidos na sessão atual, no menu Depurar , clique em Habilitar todos os pontos de interrupção. O script a seguir é um exemplo de como você pode habilitar todos os pontos de interrupção do Painel de Console usando o cmdlet Enable-PSBreakpoint .

# This command enables all breakpoints in the current session.
# You can abbreviate the command by using their aliases: "gbp | ebp".
Get-PSBreakpoint | Enable-PSBreakpoint

Como gerenciar uma sessão de depuração

Antes de começar a depuração, você deve definir um ou mais pontos de interrupção. Não é possível definir um ponto de interrupção, a menos que o script que você deseja depurar seja salvo. Para obter instruções sobre como definir um ponto de interrupção, consulte Como gerenciar pontos de interrupção ou Set-PSBreakpoint. Depois de iniciar a depuração, você não pode editar um script até parar a depuração. Um script que tenha um ou mais pontos de interrupção definidos é salvo automaticamente antes de ser executado.

Para iniciar a depuração

Pressione F5 ou, na barra de ferramentas, clique no ícone Executar Script ou, no menu Depurar, clique em Executar/Continuar. O script é executado até encontrar o primeiro ponto de interrupção. Ele pausa a operação lá e destaca a linha em que parou.

Para continuar a depuração

Pressione F5 ou, na barra de ferramentas, clique no ícone Executar Script ou, no menu Depurar, clique em Executar/Continuar ou, no Painel de Console, digite C e pressione ENTER. Isso faz com que o script continue sendo executado até o próximo ponto de interrupção ou até o final do script se nenhum outro ponto de interrupção for encontrado.

Para exibir a pilha de chamadas

A pilha de chamadas exibe o local de execução atual no script. Se o script estiver sendo executado em uma função que foi chamada por uma função diferente, isso será representado na exibição por linhas adicionais na saída. A linha mais inferior exibe o script original e a linha na qual uma função foi chamada. A próxima linha mostra essa função e a linha nela na qual outra função pode ter sido chamada. A linha mais alta mostra o contexto atual da linha atual na qual o ponto de interrupção está definido.

Durante a pausa, para ver a pilha de chamadas atual, pressione CTRL+SHIFT+D ou, no menu Depurar, clique em Exibir Pilha de Chamadas ou, no Painel de Console, digite K e pressione ENTER.

Para parar a depuração

Pressione SHIFT+F5 ou, no menu Depurar, clique em Parar Depurador ou, no Painel de Console, digite Q e pressione ENTER.

Como passar, entrar e sair durante a depuração

A revisão é o processo de executar uma instrução de cada vez. Você pode parar em uma linha de código e examinar os valores das variáveis e o estado do sistema. A tabela a seguir descreve tarefas comuns de depuração, como substituir, entrar e sair.

Tarefa de depuração Description Como realizá-lo no ISE do PowerShell
Entre em Executa a instrução atual e, em seguida, para na próxima instrução. Se a instrução atual for uma chamada de função ou script, o depurador entra nessa função ou script, caso contrário, ele para na próxima instrução. Pressione F11 ou, no menu Depurar, clique em Entrar ou, no Painel do Console, digite S e pressione ENTER.
Passo por cima Executa a instrução atual e, em seguida, para na próxima instrução. Se a instrução atual for uma chamada de função ou script, o depurador executará toda a função ou script e parará na próxima instrução após a chamada de função. Pressione F10 ou, no menu Depurar, clique em Passar sobre ou, no Painel de Console, digite V e pressione ENTER.
Saia Sai da função atual e sobe um nível se a função estiver aninhada. Se estiver no corpo principal, o script é executado até o final ou até o próximo ponto de interrupção. As instruções ignoradas são executadas, mas não executadas. Pressione SHIFT+F11 ou, no menu Depurar, clique em Sair ou, no Painel do Console, digite O e pressione ENTER.
Continuar Continua a execução até o final ou até o próximo ponto de interrupção. As funções ignoradas e invocações são executadas, mas não executadas. Pressione F5 ou, no menu Depurar, clique em Executar/Continuar ou, no Painel do Console, digite C e pressione ENTER.

Como exibir os valores das variáveis durante a depuração

Você pode exibir os valores atuais das variáveis no script à medida que percorre o código.

Para exibir os valores das variáveis padrão

Utilize um dos métodos seguintes:

  • No Painel de Script, passe o mouse sobre a variável para exibir seu valor como uma dica de ferramenta.

  • No Painel de Console, digite o nome da variável e pressione ENTER.

Todos os painéis no ISE estão sempre no mesmo escopo. Portanto, enquanto você está depurando um script, os comandos digitados no Painel de Console são executados no escopo do script. Isso permite que você use o Painel de Console para localizar os valores de variáveis e funções de chamada que são definidas somente no script.

Para exibir os valores das variáveis automáticas

Você pode usar o método anterior para exibir o valor de quase todas as variáveis enquanto estiver depurando um script. No entanto, esses métodos não funcionam para as seguintes variáveis automáticas.

  • $_

  • $Input

  • $MyInvocation

  • $PSBoundParameters

  • $Args

Se você tentar exibir o valor de qualquer uma dessas variáveis, obterá o valor dessa variável para em um pipeline interno que o depurador usa, não o valor da variável no script. Você pode contornar isso para algumas variáveis ($_, $Input, , $PSBoundParameters$MyInvocation, e $Args) usando o seguinte método:

  1. No script, atribua o valor da variável automática a uma nova variável.

  2. Exiba o valor da nova variável, passando o mouse sobre a nova variável no Painel de Script ou digitando a nova variável no Painel de Console.

Por exemplo, para exibir o valor da $MyInvocation variável, no script, atribua o valor a uma nova variável, como , e $scriptNamepasse o mouse sobre ou digite a $scriptName variável para exibir seu valor.

# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1

Consulte Também

Explorar o ISE do Windows PowerShell