mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
ci: Generate crashlogs on Windows
This configures cdb.exe to log all crashes to "<workspace>\crashlogs\crashlog-<pid-in-hex>.txt" (as it was previously set up for cirrus-ci based CI). The upload logs step already collects these logs. The logic is copied from the generation of Postgres CI Windows images for cirrus-ci [1]. Since this would be too long to include inline in pg-ci.yml, it is implemented as 'src/tools/ci/gha_setup_windows_debugger.ps1' script. [1] https://github.com/anarazel/pg-vm-images/blob/main/scripts/windows_install_dbg.ps1 Author: Nazir Bilal Yavuz <byavuz81@gmail.com> Reviewed-by: Andres Freund <andres@anarazel.de> Discussion: https://postgr.es/m/CAN55FZ1BgsXSTzOpehnMa4NzWL8Aivsxx-di7-VT6bZ3j2Omow%40mail.gmail.com Discussion: https://postgr.es/m/iggjozfshwbqpv33x5jqwtju5k5zrkyu3257dlifxkhtpg7eoq@k2ccyrdi5dtu Backpatch-through: 19, where GHA CI was added
This commit is contained in:
13
.github/workflows/pg-ci.yml
vendored
13
.github/workflows/pg-ci.yml
vendored
@@ -990,6 +990,11 @@ jobs:
|
||||
shell: cmd
|
||||
run: mkdir ${{env.PG_REGRESS_SOCK_DIR}}
|
||||
|
||||
- &windows_setup_debugger_step
|
||||
name: Setup Windows debugger
|
||||
shell: pwsh
|
||||
run: src/tools/ci/gha_setup_windows_debugger.ps1
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
|
||||
@@ -1019,9 +1024,6 @@ jobs:
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
|
||||
run: *meson_test_world_cmd
|
||||
|
||||
# TODO: We need to collect crashlogs but for them to be generated, we'd
|
||||
# have to configure the JIT Debugger to do so. cdb.exe is installed on
|
||||
# the runner so that is possible.
|
||||
- *upload_logs_step
|
||||
|
||||
|
||||
@@ -1116,6 +1118,8 @@ jobs:
|
||||
shell: cmd
|
||||
run: mkdir ${{env.PG_REGRESS_SOCK_DIR}}
|
||||
|
||||
- *windows_setup_debugger_step
|
||||
|
||||
- *ccache_restore_default_step
|
||||
- *ccache_restore_branch_step
|
||||
|
||||
@@ -1138,9 +1142,6 @@ jobs:
|
||||
- name: Test world
|
||||
run: *meson_test_world_cmd
|
||||
|
||||
# TODO: We want to include crashlogs, but they are not yet
|
||||
# collected. cdb.exe is installed on the runner, so we can configure it
|
||||
# appropriately.
|
||||
- *upload_logs_step
|
||||
|
||||
|
||||
|
||||
75
src/tools/ci/gha_setup_windows_debugger.ps1
Normal file
75
src/tools/ci/gha_setup_windows_debugger.ps1
Normal file
@@ -0,0 +1,75 @@
|
||||
# Setup Windows debugger to log all crashes to
|
||||
# <workspace>\crashlogs\crashlog-<pid-in-hex>.txt
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$crashdir = "$env:GITHUB_WORKSPACE/crashlogs"
|
||||
New-Item -ItemType Directory -Force -Path $crashdir
|
||||
|
||||
# Ensure restricted child processes can write the log file
|
||||
icacls $crashdir /grant "${env:USERNAME}:(OI)(CI)F" /Q
|
||||
|
||||
# Prevent windows error handling dialog from causing hangs
|
||||
New-ItemProperty -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting' `
|
||||
-Name 'DontShowUI' -Value 1 -PropertyType DWord
|
||||
New-ItemProperty -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting' `
|
||||
-Name 'Disabled' -Value 1 -PropertyType DWord
|
||||
|
||||
### Fallback minidumps if the JIT debugger below doesn't run
|
||||
New-Item -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting' `
|
||||
-Name 'LocalDumps'
|
||||
New-ItemProperty -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps' `
|
||||
-Name 'DumpFolder' -Value $crashdir -PropertyType ExpandString
|
||||
New-ItemProperty -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps' `
|
||||
-Name 'DumpCount' -Value 5 -PropertyType DWord
|
||||
New-ItemProperty -Force -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps' `
|
||||
-Name 'DumpType' -Value 1 -PropertyType DWord
|
||||
###
|
||||
|
||||
$cdb64 = @(
|
||||
'C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe',
|
||||
'C:\Program Files\Windows Kits\10\Debuggers\x64\cdb.exe'
|
||||
) | Where-Object { Test-Path $_ } | Select-Object -First 1
|
||||
$cdb86 = $cdb64.Replace('\x64\', '\x86\')
|
||||
|
||||
###
|
||||
# -p PID:
|
||||
# Specifies the decimal process ID to be debugged. This is used to debug a
|
||||
# process that is already running.
|
||||
# -e Event:
|
||||
# Signals the debugger that the specified event has occurred. This option is
|
||||
# only used when starting the debugger programmatically.
|
||||
# -g:
|
||||
# Ignores the initial breakpoint in target application. This option will
|
||||
# cause the target application to continue running after it is started or
|
||||
# CDB attaches to it, unless another breakpoint has been set.
|
||||
# -kqm:
|
||||
# Starts CDB/NTSD in quiet mode.
|
||||
# -c "command":
|
||||
# Specifies the initial debugger command to run at start-up. This command
|
||||
# must be surrounded with quotation marks. Multiple commands can be
|
||||
# separated with semicolons.
|
||||
###
|
||||
$debuggerArgs = ' -p %ld -e %ld -g -kqm -c ".lines -e; .symfix+ ; aS /x proc $tpid ; .block {.logappend ' + "$crashdir/crashlog-" + '${proc}.txt} ; lsa $ip ; ~*kP ; !peb ; .logclose ; q "'
|
||||
|
||||
Write-Host "Using cdb (x64): $cdb64"
|
||||
Set-ItemProperty `
|
||||
-Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' `
|
||||
-Name 'Debugger' -Value ('"' + $cdb64 + '"' + $debuggerArgs)
|
||||
New-ItemProperty -Force -PropertyType DWord -Value 1 `
|
||||
-Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' `
|
||||
-Name 'Auto'
|
||||
|
||||
Write-Host "Using cdb (x86): $cdb86"
|
||||
Set-ItemProperty `
|
||||
-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug' `
|
||||
-Name 'Debugger' -Value ('"' + $cdb86 + '"' + $debuggerArgs)
|
||||
New-ItemProperty -Force -PropertyType DWord -Value 1 `
|
||||
-Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug' `
|
||||
-Name 'Auto'
|
||||
|
||||
# Show registered AeDebug values for diagnostics
|
||||
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' |
|
||||
Format-List Debugger,Auto
|
||||
Get-ItemProperty 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug' |
|
||||
Format-List Debugger,Auto
|
||||
Reference in New Issue
Block a user