如何 post-mortem 调试 .NET 进程和 运行 powershell 脚本作为调试器操作?

How to post-mortem debug .NET process and run powershell script as debugger action?

是否有一种简单的方法来监视给定的 Windows 进程是否有明确定义的 .NET 异常(第一次或第二次机会)和 运行 在引发该异常时的 powershell 脚本?我真的不需要进程转储(还)。

.NET 应用程序错误记录到应用程序事件日志中。 在计划任务管理器中,我们可以添加一个由 .NET 运行时异常事件触发的任务。

实际上,手工操作有点麻烦,因为我们需要一些额外的 ValueQueries 来完成这项工作,我做了一个任务 XML 可以导入到任务调度程序。参见 this gist

该任务需要使用 EventId 调用我们的 PowerShell 脚本,我们从中检索相应的事件日志项,检查堆栈跟踪消息,并搜索匹配的已知异常字符串。

param($eventRecordID, $eventChannel = "Application")

$event = Get-WinEvent -LogName $eventChannel -FilterXPath "<QueryList><Query Id='0' Path='$eventChannel'><Select Path='$eventChannel'>*[System[(EventRecordID=$eventRecordID)]]</Select></Query></QueryList>"

$stackTrace = $event.Message

if($stackTrace -match "ConfigurationErrorsException")
{
    echo "Error Thrown in Application"
    # do some stuff
}

启用该任务后,每次您的 .NET 应用程序出现故障时,PowerShell 脚本应为 运行。