Я могу получить подробное исключение stacktrace в PowerShell?

  1. обновить версию youtube-dl до последней, поскольку более старая версия может не поддерживать палилистов. sudo youtube-dl -U, если u установлен через .deb sudo pip install --upgrade youtube_dl via pip
  2. использовать это, чтобы загрузить плейлист в виде mp3-файла youtube-dl --extract-audio --audio- формат mp3 #url_to_playlist
49
задан alex2k8 28 April 2009 в 00:07
поделиться

6 ответов

Существует автоматическая переменная $ StackTrace , но она, кажется, немного более специфична для внутренних деталей PS, чем собственно забота о вашем скрипте, так что это не будет большая помощь.

Существует также Get-PSCallStack , но его нет, как только вы нажмете исключение, к сожалению. Однако вы можете поместить Get-PSCallStack перед каждым броском в вашем скрипте. Таким образом, вы получите трассировку стека непосредственно перед выполнением исключения.

Я думаю, что можно было бы написать такую ​​функциональность, используя функции отладки и трассировки Powershell, но я сомневаюсь, что это будет легко.

17
ответ дан 7 November 2019 в 11:36
поделиться

Вы не можете получить трассировку стека из исключений кода сценариев PowerShell, только из объектов .NET. Для этого вам нужно получить объект Exception, например, один из них:

$Error[0].Exception.StackTrace
$Error[0].Exception.InnerException.StackTrace
$Error[0].StackTrace
12
ответ дан 7 November 2019 в 11:36
поделиться

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

Trace {
   

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

[110].ScriptStackTrace }
0
ответ дан 7 November 2019 в 11:36
поделиться

Этот код:

try {
    ...
}
catch {
    Write-Host 

Этот код:

[110]

повторит ошибку в следующем формате:

No match was found for the specified search criteria and module names 'psake'.
at Get-InstalledModule<Process>, ...\PSModule.psm1: line 9251
at Import-ModuleThirdparty, ...\Import-ModuleThirdparty.psm1: line 3
at <ScriptBlock>, ...\index.ps1: line 13
.Exception.Message -Foreground "Red" Write-Host

Этот код:

[110]

повторит ошибку в следующем формате:

No match was found for the specified search criteria and module names 'psake'.
at Get-InstalledModule<Process>, ...\PSModule.psm1: line 9251
at Import-ModuleThirdparty, ...\Import-ModuleThirdparty.psm1: line 3
at <ScriptBlock>, ...\index.ps1: line 13
.ScriptStackTrace -Foreground "DarkGray" exit 1 }

повторит ошибку в следующем формате:

No match was found for the specified search criteria and module names 'psake'.
at Get-InstalledModule<Process>, ...\PSModule.psm1: line 9251
at Import-ModuleThirdparty, ...\Import-ModuleThirdparty.psm1: line 3
at <ScriptBlock>, ...\index.ps1: line 13
1
ответ дан 7 November 2019 в 11:36
поделиться

Вот способ: Отслеживание стека скриптов

Ядро этого кода:

    1..100 | %{ $inv = &{ gv -sc $_ myinvocation }
2
ответ дан 7 November 2019 в 11:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: