Поделиться через


Как отлаживать сценарии в Windows PowerShell ISE

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

Как управлять точками останова

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

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

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

  2. Переменная точка останова. Скрипт приостанавливается при изменении значения указанной переменной.

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

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

Установка точки останова

Точку останова можно задать в скрипте только после сохранения. Щелкните правой кнопкой мыши строку, в которой нужно задать точку останова, а затем выберите пункт "Переключить точку останова". Или щелкните строку, в которой нужно задать точку останова строки, и нажмите клавишу 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 или на панели инструментов щелкните значок запуска скрипта или в меню отладки нажмите кнопку "Выполнить или продолжить " или в области консоли введите C и нажмите клавишу ВВОД. Это приводит к тому, что скрипт продолжит работать до следующей точки останова или до конца сценария, если не обнаружены дальнейшие точки останова.

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

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

При приостановке, чтобы просмотреть текущий стек вызовов, нажмите клавиши CTRL+SHIFT+D или в меню отладки нажмите кнопку "Показать стек вызовов " или в области консоли введите K и нажмите клавишу ВВОД.

Чтобы остановить отладку

Нажмите клавиши SHIFT+F5 или в меню отладки нажмите кнопку "Остановить отладчик" или в области консоли введите Q и нажмите клавишу ВВОД.

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

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

Задача отладки Описание Как это сделать в PowerShell ISE
Войдите в Выполняет текущую инструкцию, а затем останавливается на следующей инструкции. Если текущая инструкция является вызовом функции или скрипта, отладчик выполняет шаги в этой функции или скрипте, в противном случае она останавливается на следующей инструкции. Нажмите клавишу F11 или в меню Отладка выберите Шаг внутрь, или в области консоли, введите S и нажмите клавишу ВВОД.
Шаг через Выполняет текущую инструкцию, а затем останавливается на следующей инструкции. Если текущая инструкция является вызовом функции или скрипта, отладчик выполняет всю функцию или скрипт и останавливается на следующей инструкции после вызова функции. Нажмите клавишу F10 или в меню Отладка выберите Шаг с переходом, или в панели консоли введите V и нажмите клавишу ВВОД.
выйти Выйдет из текущей функции и поднимется на один уровень вверх, если функция является вложенной. Если в основном блоке скрипт выполняется до конца или до следующей точки останова. Пропущенные инструкции выполняются, но не проходят пошаговую отладку. Нажмите SHIFT+F11 или в меню Отладка нажмите Шаг за пределы, или в консоли введите O и нажмите ВВОД.
Продолжить Продолжает выполнение до конца или до следующей точки останова. Пропущенные функции и вызовы выполняются, но не проходят пошагово. Нажмите клавишу F5 или в меню Отладка щелкните "Выполнить/Продолжить", или в консоли введите C и нажмите клавишу ВВОД.

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

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

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

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

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

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

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

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

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

  • $_
  • $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 ISE