fix(physics): port retail slope landing stop
This commit is contained in:
parent
1d8371dbe5
commit
5a0f9868a6
13 changed files with 870 additions and 103 deletions
74
tools/cdb/run-issue269-slope-stop.ps1
Normal file
74
tools/cdb/run-issue269-slope-stop.ps1
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
param(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[ValidatePattern('^[A-Za-z0-9_.-]+$')]
|
||||
[string]$ScenarioTag = "slope-stop",
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[ValidateRange(60, 1800)]
|
||||
[int]$MaxQuanta = 450
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$cdbExe = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe"
|
||||
if (-not (Test-Path -LiteralPath $cdbExe)) {
|
||||
throw "cdb.exe was not found at '$cdbExe'."
|
||||
}
|
||||
|
||||
$retail = Get-CimInstance Win32_Process -Filter "Name = 'acclient.exe'" |
|
||||
Select-Object -First 1
|
||||
if ($null -eq $retail) {
|
||||
throw "No live retail acclient.exe process was found."
|
||||
}
|
||||
|
||||
$repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path
|
||||
$checkScript = Join-Path $repoRoot "tools\pdb-extract\check_exe_pdb.py"
|
||||
$pairing = & py $checkScript $retail.ExecutablePath 2>&1 | Out-String
|
||||
if ($pairing -notmatch "=== MATCH:") {
|
||||
throw @"
|
||||
The live retail executable does not pair with the named-retail PDB.
|
||||
Process path: $($retail.ExecutablePath)
|
||||
$pairing
|
||||
"@
|
||||
}
|
||||
|
||||
$symbolCandidates = @(
|
||||
(Join-Path $repoRoot "refs"),
|
||||
(Join-Path $env:USERPROFILE "source\repos\acdream\refs"),
|
||||
(Join-Path $env:USERPROFILE ".windbg\x86\sym")
|
||||
)
|
||||
$symbolPath = $symbolCandidates |
|
||||
Where-Object { Test-Path -LiteralPath $_ } |
|
||||
Select-Object -First 1
|
||||
if ([string]::IsNullOrWhiteSpace($symbolPath)) {
|
||||
throw "The matching acclient.pdb symbol directory could not be found."
|
||||
}
|
||||
|
||||
$templatePath = Join-Path $PSScriptRoot "issue269-slope-stop.cdb"
|
||||
$artifactDir = Join-Path $repoRoot "artifacts\issue269"
|
||||
New-Item -ItemType Directory -Path $artifactDir -Force | Out-Null
|
||||
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
||||
$logPath = Join-Path $artifactDir "$ScenarioTag-retail-$timestamp.log"
|
||||
$scriptPath = Join-Path $env:TEMP "issue269-$ScenarioTag-$timestamp.cdb"
|
||||
|
||||
$script = Get-Content -LiteralPath $templatePath -Raw
|
||||
$script = $script.Replace('${ARG_LOG_PATH}', $logPath)
|
||||
$script = $script.Replace('${ARG_SYMBOL_PATH}', $symbolPath)
|
||||
$script = $script.Replace('${ARG_MAX_QUANTA}', $MaxQuanta.ToString(
|
||||
[System.Globalization.CultureInfo]::InvariantCulture))
|
||||
Set-Content -LiteralPath $scriptPath -Value $script -Encoding ASCII
|
||||
|
||||
Write-Host "Attaching cdb to retail PID $($retail.ProcessId)."
|
||||
Write-Host "Capture: $logPath"
|
||||
Write-Host "Perform the slope run, release movement, and let the character settle."
|
||||
Write-Host "The probe detaches after $MaxQuanta player physics quanta."
|
||||
|
||||
try {
|
||||
& $cdbExe -p $retail.ProcessId -cf $scriptPath 2>&1 |
|
||||
Out-File -LiteralPath "$logPath.console" -Encoding ASCII
|
||||
}
|
||||
finally {
|
||||
Remove-Item -LiteralPath $scriptPath -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
Write-Host "Retail capture complete: $logPath"
|
||||
Loading…
Add table
Add a link
Reference in a new issue