agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Andres Freund <[email protected]>
Subject: [PATCH v13a 1/9] ci: Generate crashlogs on Windows
Date: Thu, 11 Jun 2026 09:15:11 -0400
cdb.exe is configured to log all crashes to
"<workspace>\crashlogs\crashlog-<pid-in-hex>.txt". Upload logs step
already configured to collect these logs, so no change is needed on
there.
Logic is copied from where Postgres CI Windows images are generated [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 <[email protected]>
Discussion: https://postgr.es/m/CAN55FZ1BgsXSTzOpehnMa4NzWL8Aivsxx-di7-VT6bZ3j2Omow%40mail.gmail.com
---
.github/workflows/pg-ci.yml | 13 ++--
src/tools/ci/gha_setup_windows_debugger.ps1 | 75 +++++++++++++++++++++
2 files changed, 82 insertions(+), 6 deletions(-)
create mode 100644 src/tools/ci/gha_setup_windows_debugger.ps1
diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 5bc5292d2a5..742a8431782 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -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
diff --git a/src/tools/ci/gha_setup_windows_debugger.ps1 b/src/tools/ci/gha_setup_windows_debugger.ps1
new file mode 100644
index 00000000000..babfbe76278
--- /dev/null
+++ b/src/tools/ci/gha_setup_windows_debugger.ps1
@@ -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
--
2.54.0.450.g9ac3f193c0
--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v13a-0002-ci-Use-meson-for-most-of-CompilerWarnings-it-s-.patch"
view thread (5+ messages)
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v13a 1/9] ci: Generate crashlogs on Windows
In-Reply-To: <no-message-id-12216@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox