Powershell:调用调试分析器 cdb.exe 作为进程
Powershell: Call Debug Analyzer cdb.exe as Process
我需要调用 cdb.exe 作为一个进程来检查以在几秒钟后终止进程。
有些转储无法分析,所以我必须再打一次电话。
在这里你可以看到我的代码。但它不起作用。 cdb.exe 没有正确启动,我没有得到输出文件。
你对我有什么建议吗?
实现流程部分的调用 "before" 启动 cdb.exe
$maximumRuntimeSeconds = 3
$path = "C:\Program Files (x86)\Windows Kits\Debuggers\x86\cdb.exe"
$process = Start-Process -FilePath $path "-z $unzippedFile.FullName, -c `".symfix;.reload;!analyze -v; q`""
try {
$process | Wait-Process -Timeout $maximumRuntimeSeconds -ErrorAction Stop > $outputFile
Write-Warning -Message 'Process successfully completed within timeout.'
}
catch {
Write-Warning -Message 'Process exceeded timeout, will be killed now.'
$process | Stop-Process -Force
}
# call before implementing Process
& "C:\Program Files (x86)\Windows Kits\Debuggers\x86\cdb.exe" -z $unzippedFile.FullName -c ".symfix;.reload;!analyze -v; q" > $outputFile
-需要传递才能使等待进程正常工作。
我想你还需要看看双引号字符串是如何展开的。 我认为 $UnzippedFIle.Fullname 可能会在 zip 文件的实际全名末尾添加文字“.FullName”。我没有你的环境,但我所做的粗略测试表明了这一点。尝试将其包装在子表达式中,例如:
"-z $($unzippedFile.FullName), -c `".symfix;.reload;!analyze -v; q`""
让我知道进展如何。谢谢
C:\>dir /b ok.txt
File Not Found
C:\>type dodump.ps1
$path = "C:\Program Files\Windows Kits\Debuggers\x86\cdb.exe"
$process = Start-Process -PassThru -FilePath $path -ArgumentList "-z `"C:\calc.DMP`"" ,
"-c `".symfix;.reload;!analyze -v;q`"" -RedirectStandardOutput c:\ok.txt
try {
$process | Wait-Process -Timeout 100 -ErrorAction Stop
Write-Host "Process finished within timeout"
}catch {
$process | Stop-Process
Write-Host "process killed"
}
Get-Content C:\ok.txt |Measure-Object -Line
C:\>powershell -f dodump.ps1
Process finished within timeout
Lines Words Characters Property
139
我需要调用 cdb.exe 作为一个进程来检查以在几秒钟后终止进程。 有些转储无法分析,所以我必须再打一次电话。 在这里你可以看到我的代码。但它不起作用。 cdb.exe 没有正确启动,我没有得到输出文件。
你对我有什么建议吗? 实现流程部分的调用 "before" 启动 cdb.exe
$maximumRuntimeSeconds = 3
$path = "C:\Program Files (x86)\Windows Kits\Debuggers\x86\cdb.exe"
$process = Start-Process -FilePath $path "-z $unzippedFile.FullName, -c `".symfix;.reload;!analyze -v; q`""
try {
$process | Wait-Process -Timeout $maximumRuntimeSeconds -ErrorAction Stop > $outputFile
Write-Warning -Message 'Process successfully completed within timeout.'
}
catch {
Write-Warning -Message 'Process exceeded timeout, will be killed now.'
$process | Stop-Process -Force
}
# call before implementing Process
& "C:\Program Files (x86)\Windows Kits\Debuggers\x86\cdb.exe" -z $unzippedFile.FullName -c ".symfix;.reload;!analyze -v; q" > $outputFile
-需要传递才能使等待进程正常工作。
我想你还需要看看双引号字符串是如何展开的。 我认为 $UnzippedFIle.Fullname 可能会在 zip 文件的实际全名末尾添加文字“.FullName”。我没有你的环境,但我所做的粗略测试表明了这一点。尝试将其包装在子表达式中,例如:
"-z $($unzippedFile.FullName), -c `".symfix;.reload;!analyze -v; q`""
让我知道进展如何。谢谢
C:\>dir /b ok.txt
File Not Found
C:\>type dodump.ps1
$path = "C:\Program Files\Windows Kits\Debuggers\x86\cdb.exe"
$process = Start-Process -PassThru -FilePath $path -ArgumentList "-z `"C:\calc.DMP`"" ,
"-c `".symfix;.reload;!analyze -v;q`"" -RedirectStandardOutput c:\ok.txt
try {
$process | Wait-Process -Timeout 100 -ErrorAction Stop
Write-Host "Process finished within timeout"
}catch {
$process | Stop-Process
Write-Host "process killed"
}
Get-Content C:\ok.txt |Measure-Object -Line
C:\>powershell -f dodump.ps1
Process finished within timeout
Lines Words Characters Property
139