Отладка сценариев в интегрированной среде сценариев Windows PowerShell

В этой статье описано, как отлаживать сценарии на локальном компьютере визуальными инструментами отладки интегрированной среды сценариев (ISE) Windows PowerShell.

Управление точками останова

Точка останова — это назначенная точка в сценарии, на которой выполнение временно останавливается, чтобы можно было проверить текущее состояние переменных и среды, в которой выполняется сценарий. После приостановки сценария в точке останова можно выполнить команды в области консоли для проверки его состояния. Можно выводить переменные и выполнять другие команды. Можно даже изменять значения любых переменных, видимых в контексте текущего выполняемого сценария. После получения нужных сведений можно продолжить выполнение сценария.

В среде отладки Windows PowerShell можно установить три вида точек останова:

  1. Точка останова по строке. Сценарий приостанавливается при достижении назначенной строки.

  2. Точка останова переменной. Сценарий приостанавливается при изменении значения, назначенного переменной.

  3. Точка останова команды. Сценарий приостанавливается перед выполнением назначенной команды. Можно указать параметры, чтобы отфильтровать для точки останова только нужную операцию. Команда также может быть созданной вами функцией.

В среде отладки интегрированной среды сценариев Windows PowerShell только точки останова по строке можно задать с помощью меню или сочетаний клавиш. Точки останова двух других типов также можно задать, но в области консоли, используя командлет Set-PSBreakpoint. В этом разделе описано, как выполнять задачи отладки в интегрированной среде сценариев Windows PowerShell, по возможности используя меню, и выполнять более широкий набор команд из области консоли, используя сценарии.

Задание точки останова

Точку останова можно задать в сценарии только после его сохранения. Щелкните правой кнопкой мыши строку, где нужно задать точку останова, и выберите пункт Точка останова. Другой вариант: щелкните строку, где нужно задать точку останова, и нажмите клавишу F9 либо выберите Точка останова в меню Отладка.

Следующий сценарий — пример создания точки останова по переменной из области консоли с помощью командлета Set-PSBreakpoint:

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

Перечисление всех точек останова

Отображает все точки останова в текущем сеансе Windows PowerShell.

В меню Отладка выберите пункт Вывести список точек останова. Следующий сценарий — пример перечисления всех точек останова из области консоли с помощью командлета Get-PSBreakpoint:

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

Удаление точки останова

Удаляет указанную точку останова.

Если вы считаете, что точка останова может понадобиться в будущем, лучше отключите ее. Щелкните правой кнопкой мыши строку, где нужно удалить точку останова, и выберите пункт ToggleBreakpoint (Точка останова). Другой вариант: щелкните строку, где нужно удалить точку останова, и выберите пункт Точка останова в меню Отладка. Следующий сценарий — пример удаления точки останова с указанным идентификатором из области консоли с помощью командлета Remove-PSBreakpoint:

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

Удалить все точки останова

Чтобы удалить все точки останова, определенные в текущем сеансе, выберите команду Удалить все точки останова в меню Отладка.

Следующий сценарий — пример удаления всех точек останова из области консоли с помощью командлета Remove-PSBreakpoint:

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

Отключение точки останова

Отключение точки останова не приводит к ее удалению. Она просто остается неактивной, пока не будет включена. Щелкните правой кнопкой мыши строку, где нужно отключить точку останова, и выберите команду Отключить точку останова.

Другой вариант: щелкните строку, где нужно отключить точку останова, и нажмите клавишу F9 либо выберите Отключить точку останова в меню Отладка. Следующий сценарий — пример отключения точки останова с указанным идентификатором из области консоли с помощью командлета Disable-PSBreakpoint.

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

Отключение всех точек останова

Отключение точки не приводит к ее удалению; она просто остается неактивной, пока не будет включена. Чтобы отключить все точки останова в текущем сеансе, выберите команду Отключить все точки останова в меню Отладка. Следующий сценарий — пример отключения всех точек останова из области консоли с помощью командлета Disable-PSBreakpoint:

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

Включение точки останова

Щелкните правой кнопкой мыши строку, где нужно включить точку останова, и выберите команду Включить точку останова. Другой вариант: щелкните строку, где нужно включить точку останова, и нажмите клавишу F9 либо выберите Включить точку останова в меню Отладка. Следующий сценарий — пример включения отдельных точек останова из области консоли с помощью командлета Enable-PSBreakpoint:

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

Включение всех точек останова

Чтобы включить все точки останова, определенные в текущем сеансе, выберите команду Включить все точки останова в меню Отладка. Следующий сценарий — пример включения всех точек останова из области консоли с помощью командлета 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

Управление сеансом отладки

Перед запуском отладки нужно задать одну или несколько точек останова. Точки останова нельзя задавать, если отлаживаемый сценарий не сохранен. Инструкции по заданию точек останова см. в статье Управление точками останова или Set-PSBreakpoint. После начала отладки сценарий нельзя редактировать до ее окончания. Сценарий, содержащий одну или несколько точек останова, автоматически сохраняется перед запуском.

Начало отладки

Нажмите клавишу F5, щелкните значок Выполнить сценарий на панели инструментов или выберите Выполнить/продолжить в меню Отладка. Сценарий выполняется до первой точки останова. В ней он приостанавливается и выделяет соответствующую строку.

Продолжение отладки

Нажмите клавишу F5, щелкните значок Run Script (Выполнить сценарий) на панели инструментов, выберите Run/Continue (Выполнить/продолжить) в меню Debug (Отладка) либо введите C в области консоли и нажмите клавишу ВВОД. В результате выполнение продолжается до следующей точки останова, а при ее отсутствии — до конца сценария.

Просмотр стека вызовов

Стек вызовов отображает текущее расположение выполнения в сценарии. Если сценарий выполняется в функции, вызванной другой функцией, это отражается путем добавления строк в выходные данные. В самой нижней строке отображается исходный сценарий и его строка, в которой была вызвана функция. Предыдущая строка показывает эту функцию и ее строку, в которой могла быть вызвана другая функция. В самой верхней строке отображается текущий контекст для текущей строки, в которой задана точка останова.

Чтобы просмотреть текущий стек вызовов, пока выполнение приостановлено, нажмите клавиши CTRL+SHIFT+D, выберите команду Display Call Stack (Отображение стека вызовов) в меню Debug (Отладка) или введите K в области консоли и нажмите клавишу ВВОД.

Остановка отладки

Нажмите клавиши SHIFT+F5, выберите команду Stop Debugger (Остановить отладчик) в меню Debug (Отладка) или введите Q в области консоли и нажмите клавишу ВВОД.

Выполнение шагов с обходом, заходом и выходом во время отладки

Пошаговое выполнение сценария — это поочередное выполнение его операторов. Выполнение можно остановить на любой строке кода, чтобы проверить значения переменных и состояние системы. В следующей таблице описаны задачи, часто выполняемые при отладке, такие как шаги с обходом, заходом и выходом:

Задача отладки Description Способ выполнения в интегрированной среде сценариев PowerShell
Шаг с заходом Выполняет текущий оператор и останавливается на следующем операторе. Если текущий оператор является вызовом функции или сценария, отладчик выполняет их по шагам. В противном случае он останавливается на следующем операторе. Нажмите клавишу F11, выберите Step Into (Шаг с заходом) в меню Debug (Отладка) или введите S в области консоли и нажмите клавишу ВВОД.
Шаг с обходом Выполняет текущий оператор и останавливается на следующем операторе. Если текущий оператор является вызовом функции или сценария, отладчик выполняет их полностью и останавливается на операторе, следующем после этого вызова. Нажмите клавишу F10, выберите Step Over (Шаг с обходом) в меню Debug (Отладка) или введите V в области консоли и нажмите клавишу ВВОД.
Шаг с выходом Выходит из текущей функции и переходит на один уровень выше, если функция является вложенной. Если выполняется тело главной функции, сценарий выполняется до конца или до следующей точки останова. Пропущенные операторы выполняются, но в них отладчик не останавливается. Нажмите клавиши SHIFT+F11, выберите команду Step Out (Шаг с выходом) в меню Debug (Отладка) или введите O в области консоли и нажмите клавишу ВВОД.
Продолжить Продолжает выполнение до конца или до следующей точки останова. Пропущенные функции и вызовы выполняются, но в них отладчик не останавливается. Нажмите клавишу F5, выберите Run/Continue (Выполнить/продолжить) в меню Debug (Отладка) или введите C в области консоли и нажмите клавишу ВВОД.

Отображение значений переменных при отладке

При пошаговом выполнении кода можно отобразить текущие значения переменных в сценарии.

Отображение значений стандартных переменных

Используйте один из следующих методов:

  • В области сценариев наведите указатель на переменную, чтобы отобразить ее значение в подсказке.

  • В области консоли введите имя переменной и нажмите клавишу ВВОД.

Все области в интегрированной среде сценариев всегда относятся к одной области действия. Таким образом, при отладке сценария команды, вводимые в области консоли, выполняются в области сценариев. Это позволяет использовать область консоли для поиска значений переменных и вызова функций, которые определены только в сценарии.

Отображение значений автоматических переменных

Описанный выше метод позволяет отобразить значения почти всех переменных при отладке сценария. Однако он не работает для следующих автоматических переменных:

  • $_

  • $Input

  • $MyInvocation

  • $PSBoundParameters

  • $Args

При попытке отобразить значение любой из этих переменных отображается значение переменной из внутреннего конвейера отладчика, а не переменной в сценарии. Для некоторых переменных ($_, $Input, $MyInvocation, $PSBoundParameters и $Args) это можно обойти с помощью следующего метода.

  1. Присвойте значение автоматической переменной в сценарии новой переменной.

  2. Отобразите значение новой переменной, наведя на нее указатель мыши в области сценариев или введя ее имя в области консоли.

Например, чтобы отобразить значение переменной $MyInvocation в сценарии, присвойте ее значение новой переменной, например $scriptName, а затем наведите указатель мыши на переменную $scriptName или введите ее для отображения значения.

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

См. также

Обзор интегрированной среды скриптов Windows PowerShell