agora inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH v13 04/18] ReindexPartitions() to set indisvalid..
114+ messages / 3 participants
[nested] [flat]

* [PATCH v13 04/18] ReindexPartitions() to set indisvalid..
@ 2020-10-31 04:52  Justin Pryzby <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Justin Pryzby @ 2020-10-31 04:52 UTC (permalink / raw)

Something like this should probably have been included in
a6642b3ae060976b42830b7dc8f29ec190ab05e4

See also 71a05b223, which mentioned the absence of any way to validate an
index.
---
 src/backend/commands/indexcmds.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c
index 10d4da136f..b21555b6cf 100644
--- a/src/backend/commands/indexcmds.c
+++ b/src/backend/commands/indexcmds.c
@@ -1643,8 +1643,6 @@ reindex_invalid_child_indexes(Oid indexRelationId)
 	 * CIC needs to mark a partitioned index as VALID, which itself
 	 * requires setting READY, which is unset for CIC (even though
 	 * it's meaningless for an index without storage).
-	 * This must be done only while holding a lock which precludes adding
-	 * partitions.
 	 */
 	CommandCounterIncrement();
 	index_set_state_flags(indexRelationId, INDEX_CREATE_SET_READY);
@@ -1654,9 +1652,6 @@ reindex_invalid_child_indexes(Oid indexRelationId)
 	 * this commits and then starts a new transaction immediately.
 	 */
 	ReindexPartitions(indexRelationId, &params, true);
-
-	CommandCounterIncrement();
-	index_set_state_flags(indexRelationId, INDEX_CREATE_SET_VALID);
 }
 
 /*
@@ -3098,6 +3093,24 @@ ReindexPartitions(Oid relid, ReindexParams *params, bool isTopLevel)
 	 */
 	ReindexMultipleInternal(partitions, params);
 
+	/*
+	 * If indexes exist on all of the partitioned table's children, and we
+	 * just reindexed them, then we know they're valid, and so can mark the
+	 * parent index as valid.
+	 * This handles the case of CREATE INDEX CONCURRENTLY.
+	 * See also: validatePartitionedIndex().
+	 */
+	if (get_rel_relkind(relid) == RELKIND_PARTITIONED_INDEX
+			&& !get_index_isvalid(relid))
+	{
+		Oid	tableoid = IndexGetRelation(relid, false);
+		List	*child_tables = find_all_inheritors(tableoid, ShareLock, NULL);
+
+		/* Both lists include their parent relation as well as any intermediate partitioned rels */
+		if (list_length(inhoids) == list_length(child_tables))
+			index_set_state_flags(relid, INDEX_CREATE_SET_VALID);
+	}
+
 	/*
 	 * Clean up working storage --- note we must do this after
 	 * StartTransactionCommand, else we might be trying to delete the active
-- 
2.17.0


--QTprm0S8XgL7H0Dt
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
 filename="v13-0005-Refactor-to-allow-reindexing-all-index-partition.patch"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* ci: Generate crashlogs on Windows
@ 2026-06-10 12:59  Nazir Bilal Yavuz <[email protected]>
  0 siblings, 1 reply; 114+ messages in thread

From: Nazir Bilal Yavuz @ 2026-06-10 12:59 UTC (permalink / raw)
  To: pgsql-hackers; +Cc: Andres Freund <[email protected]>

Hi,

cdb.exe was available on GHA Windows images but it wasn't configured
to generate crashlogs. Attached patch configures cdb.exe to generate
crashlogs to "<github.workspace>\crashlogs\" in
"crashlog-<pid-in-hex>.txt" format. Current upload logs step already
collects these logs so no change is needed there.

Most of the logic is copied from where (previous) Postgres CI Windows
images were generated [1]. When I use the '!adplusext.adpprocname'
debugger flag, the CI job hangs. It needs 'adplusext.dll' to run but
it isn't available on GHA Windows images.

Example GHA run which crashlogs are generated and collected:
https://github.com/nbyavuz/postgres/actions/runs/27275147059

[1] https://github.com/anarazel/pg-vm-images/blob/main/scripts/windows_install_dbg.ps1

-- 
Regards,
Nazir Bilal Yavuz
Microsoft


Attachments:

  [text/x-patch] v1-0001-ci-Generate-crashlogs-on-Windows.patch (6.7K, ../../CAN55FZ1BgsXSTzOpehnMa4NzWL8Aivsxx-di7-VT6bZ3j2Omow@mail.gmail.com/2-v1-0001-ci-Generate-crashlogs-on-Windows.patch)
  download | inline diff:
From a60a5821352f59ba2ba31330610811eb61e9efe5 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <[email protected]>
Date: Tue, 9 Jun 2026 16:15:30 +0300
Subject: [PATCH v1] ci: Generate crashlogs on Windows

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 step is too long, it is implemented as composite action.

[1] https://github.com/anarazel/pg-vm-images/blob/main/scripts/windows_install_dbg.ps1

Author: Nazir Bilal Yavuz <[email protected]>
Discussion:
---
 .../actions/windows-setup-debugger/action.yml | 82 +++++++++++++++++++
 .github/workflows/pg-ci.yml                   | 12 +--
 2 files changed, 88 insertions(+), 6 deletions(-)
 create mode 100644 .github/actions/windows-setup-debugger/action.yml

diff --git a/.github/actions/windows-setup-debugger/action.yml b/.github/actions/windows-setup-debugger/action.yml
new file mode 100644
index 00000000000..e6e5192db39
--- /dev/null
+++ b/.github/actions/windows-setup-debugger/action.yml
@@ -0,0 +1,82 @@
+name: Setup Windows debugger
+description: >-
+  Setup Windows debugger to log all crashes to
+  <workspace>\crashlogs\crashlog-<pid-in-hex>.txt
+
+runs:
+  using: composite
+  steps:
+    - name: Setup Windows debugger
+      shell: pwsh
+      run: |
+        $crashdir = "${{ 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
diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 5bc5292d2a5..7331b261166 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -990,6 +990,9 @@ jobs:
         shell: cmd
         run: mkdir ${{env.PG_REGRESS_SOCK_DIR}}
 
+      - name: Setup Windows debugger
+        uses: ./.github/actions/windows-setup-debugger
+
       - name: Configure
         run: |
           call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
@@ -1019,9 +1022,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 +1116,9 @@ jobs:
         shell: cmd
         run: mkdir ${{env.PG_REGRESS_SOCK_DIR}}
 
+      - name: Setup Windows debugger
+        uses: ./.github/actions/windows-setup-debugger
+
       - *ccache_restore_default_step
       - *ccache_restore_branch_step
 
@@ -1138,9 +1141,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
 
 
-- 
2.47.3



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* Re: ci: Generate crashlogs on Windows
@ 2026-06-10 13:49  Andres Freund <[email protected]>
  parent: Nazir Bilal Yavuz <[email protected]>
  0 siblings, 1 reply; 114+ messages in thread

From: Andres Freund @ 2026-06-10 13:49 UTC (permalink / raw)
  To: Nazir Bilal Yavuz <[email protected]>; +Cc: pgsql-hackers

Hi,

On 2026-06-10 15:59:20 +0300, Nazir Bilal Yavuz wrote:
> cdb.exe was available on GHA Windows images but it wasn't configured
> to generate crashlogs. Attached patch configures cdb.exe to generate
> crashlogs to "<github.workspace>\crashlogs\" in
> "crashlog-<pid-in-hex>.txt" format. Current upload logs step already
> collects these logs so no change is needed there.
> 
> Most of the logic is copied from where (previous) Postgres CI Windows
> images were generated [1]. When I use the '!adplusext.adpprocname'
> debugger flag, the CI job hangs. It needs 'adplusext.dll' to run but
> it isn't available on GHA Windows images.
> 
> Example GHA run which crashlogs are generated and collected:
> https://github.com/nbyavuz/postgres/actions/runs/27275147059

Thanks for working on this!

> +++ b/.github/actions/windows-setup-debugger/action.yml
> @@ -0,0 +1,82 @@
> +name: Setup Windows debugger
> +description: >-
> +  Setup Windows debugger to log all crashes to
> +  <workspace>\crashlogs\crashlog-<pid-in-hex>.txt
> +
> +runs:
> +  using: composite
> +  steps:
> +    - name: Setup Windows debugger
> +      shell: pwsh
> +      run: |
> +        $crashdir = "${{ github.workspace }}/crashlogs"
> +        New-Item -ItemType Directory -Force -Path $crashdir

Any reason to not just put this into src/tools/ci/<something>.ps1? Given that
we're just talking about a single step, I don't really see the benefit of a
composite action here.

Greetings,

Andres Freund





^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* Re: ci: Generate crashlogs on Windows
@ 2026-06-10 15:54  Nazir Bilal Yavuz <[email protected]>
  parent: Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Nazir Bilal Yavuz @ 2026-06-10 15:54 UTC (permalink / raw)
  To: Andres Freund <[email protected]>; +Cc: pgsql-hackers

Hi,

Thank you for looking into this!

On Wed, 10 Jun 2026 at 16:49, Andres Freund <[email protected]> wrote:
>
> On 2026-06-10 15:59:20 +0300, Nazir Bilal Yavuz wrote:
> > +++ b/.github/actions/windows-setup-debugger/action.yml
> > @@ -0,0 +1,82 @@
> > +name: Setup Windows debugger
> > +description: >-
> > +  Setup Windows debugger to log all crashes to
> > +  <workspace>\crashlogs\crashlog-<pid-in-hex>.txt
> > +
> > +runs:
> > +  using: composite
> > +  steps:
> > +    - name: Setup Windows debugger
> > +      shell: pwsh
> > +      run: |
> > +        $crashdir = "${{ github.workspace }}/crashlogs"
> > +        New-Item -ItemType Directory -Force -Path $crashdir
>
> Any reason to not just put this into src/tools/ci/<something>.ps1? Given that
> we're just talking about a single step, I don't really see the benefit of a
> composite action here.

Not any particular reason. I started implementing that in a pg-ci.yml,
then moved it to composite action when I realized it was too long. I
think having a script is better, so attached v2 uses that way.

-- 
Regards,
Nazir Bilal Yavuz
Microsoft


Attachments:

  [text/x-patch] v2-0001-ci-Generate-crashlogs-on-Windows.patch (6.2K, ../../CAN55FZ3X-PEwnzy_iW1yT9YoAb2u7bfKyoKsKV9_yrUg7rXd=g@mail.gmail.com/2-v2-0001-ci-Generate-crashlogs-on-Windows.patch)
  download | inline diff:
From 5655e2550c1c040955f6b33f28fd3736decffd0f Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <[email protected]>
Date: Tue, 9 Jun 2026 16:15:30 +0300
Subject: [PATCH v2] ci: Generate crashlogs on Windows

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 step is too long, 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.47.3



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread

* [PATCH v13a 1/9] ci: Generate crashlogs on Windows
@ 2026-06-11 13:15  Andres Freund <[email protected]>
  0 siblings, 0 replies; 114+ messages in thread

From: Andres Freund @ 2026-06-11 13:15 UTC (permalink / raw)

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"



^ permalink  raw  reply  [nested|flat] 114+ messages in thread


end of thread, other threads:[~2026-06-11 13:15 UTC | newest]

Thread overview: 114+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2020-10-31 04:52 [PATCH v13 04/18] ReindexPartitions() to set indisvalid.. Justin Pryzby <[email protected]>
2026-06-10 12:59 ci: Generate crashlogs on Windows Nazir Bilal Yavuz <[email protected]>
2026-06-10 13:49 ` Re: ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-10 15:54   ` Re: ci: Generate crashlogs on Windows Nazir Bilal Yavuz <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>
2026-06-11 13:15 [PATCH v13a 1/9] ci: Generate crashlogs on Windows Andres Freund <[email protected]>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox