agora inbox for [email protected]  
help / color / mirror / Atom feed
[PATCH v1 5/7] Row pattern recognition patch (docs).
117+ messages / 3 participants
[nested] [flat]

* [PATCH v1 5/7] Row pattern recognition patch (docs).
@ 2023-06-25 11:48 Tatsuo Ishii <[email protected]>
  0 siblings, 0 replies; 117+ messages in thread

From: Tatsuo Ishii @ 2023-06-25 11:48 UTC (permalink / raw)

---
 doc/src/sgml/advanced.sgml   | 51 ++++++++++++++++++++++++++
 doc/src/sgml/func.sgml       | 69 ++++++++++++++++++++++++++++++++++++
 doc/src/sgml/ref/select.sgml | 18 ++++++++--
 3 files changed, 136 insertions(+), 2 deletions(-)

diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml
index 755c9f1485..23ee285b40 100644
--- a/doc/src/sgml/advanced.sgml
+++ b/doc/src/sgml/advanced.sgml
@@ -537,6 +537,57 @@ WHERE pos &lt; 3;
     <literal>rank</literal> less than 3.
    </para>
 
+   <para>
+    Window function <function>rpr</function> can be used with row pattern
+    common syntax to perform row pattern recognition in a query. Row pattern
+    common syntax includes two sub clauses. <literal>DEFINE</literal> defines
+    definition variables along with an expression. The expression must be a
+    logical expression, which means it must
+    return <literal>TRUE</literal>, <literal>FALSE</literal>
+    or <literal>NULL</literal>. Moreover if the expression comprises a column
+    reference, it must be the argument of <function>rpr</function>. An
+    example of <literal>DEFINE</literal> is as follows.
+
+<programlisting>
+DEFINE
+ LOWPRICE AS price &lt;= 100,
+ UP AS price &gt; PREV(price),
+ DOWN AS price &lt; PREV(price)
+</programlisting>
+
+    Note that <function>PREV</function> returns price column in the previous
+    row if it's called in a context of row pattern recognition. So in the
+    second line means the definition variable "UP" is <literal>TRUE</literal>
+    when price column in the current row is greater than the price column in
+    the previous row. Likewise, "DOWN" is <literal>TRUE</literal> when when
+    price column in the current row is lower than the price column in the
+    previous row.
+   </para>
+   <para>
+    Once <literal>DEFINE</literal> exists, <literal>PATTERN</literal> can be
+    used. <literal>PATTERN</literal> defines a sequence of rows that satisfies
+    certain conditions.  For example following <literal>PATTERN</literal>
+    defines that a row starts with the condition "LOWPRICE", then one or more
+    rows satisfy "UP" and finally one or more rows satisfy "DOWN". If a
+    sequence of rows found, rpr returns the column at the starting row.
+    Example of a <literal>SELECT</literal> using the <literal>DEFINE</literal>
+    and <literal>PATTERN</literal> clause is as follows.
+
+<programlisting>    
+SELECT company, tdate, price, rpr(price) OVER w FROM stock
+ WINDOW w AS (
+ PARTITION BY company
+ ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
+ INITIAL
+ PATTERN (LOWPRICE UP+ DOWN+)
+ DEFINE
+  LOWPRICE AS price &lt;= 100,
+  UP AS price &gt; PREV(price),
+  DOWN AS price &lt; PREV(price)
+);
+</programlisting>
+   </para>
+
    <para>
     When a query involves multiple window functions, it is possible to write
     out each one with a separate <literal>OVER</literal> clause, but this is
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 5a47ce4343..8069c58ca5 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -21648,6 +21648,22 @@ SELECT count(*) FROM sometable;
         returns <literal>NULL</literal> if there is no such row.
        </para></entry>
       </row>
+
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>rpr</primary>
+        </indexterm>
+        <function>rpr</function> ( <parameter>value</parameter> <type>anyelement</type> )
+        <returnvalue>anyelement</returnvalue>
+       </para>
+       <para>
+        Perform row pattern recognition using column specified
+        by <parameter>value</parameter> and returns the value of the column if
+        current row is the first matching row;
+        returns <literal>NULL</literal> otherwise.
+       </para></entry>
+      </row>
      </tbody>
     </tgroup>
    </table>
@@ -21687,6 +21703,59 @@ SELECT count(*) FROM sometable;
    Other frame specifications can be used to obtain other effects.
   </para>
 
+  <para>
+   Row pattern recognition navigation functions are listed in
+   <xref linkend="functions-rpr-navigation-table"/>.  These functions
+   can be used to describe DEFINE clause of Row pattern recognition.
+  </para>
+
+   <table id="functions-rpr-navigation-table">
+    <title>Row Pattern Navigation Functions</title>
+    <tgroup cols="1">
+     <thead>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        Function
+       </para>
+       <para>
+        Description
+       </para></entry>
+      </row>
+     </thead>
+
+     <tbody>
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>prev</primary>
+        </indexterm>
+        <function>prev</function> ( <parameter>value</parameter> <type>anyelement</type> )
+        <returnvalue>anyelement</returnvalue>
+       </para>
+       <para>
+        Returns the column value at the previous row;
+        returns NULL if there is no previous row in the window frame.
+       </para></entry>
+      </row>
+
+      <row>
+       <entry role="func_table_entry"><para role="func_signature">
+        <indexterm>
+         <primary>next</primary>
+        </indexterm>
+        <function>next</function> ( <parameter>value</parameter> <type>anyelement</type> )
+        <returnvalue>anyelement</returnvalue>
+       </para>
+       <para>
+        Returns the column value at the next row;
+        returns NULL if there is no next row in the window frame.
+       </para></entry>
+      </row>
+
+     </tbody>
+    </tgroup>
+   </table>
+
   <note>
    <para>
     The SQL standard defines a <literal>RESPECT NULLS</literal> or
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml
index 0ee0cc7e64..c0fc16d773 100644
--- a/doc/src/sgml/ref/select.sgml
+++ b/doc/src/sgml/ref/select.sgml
@@ -966,8 +966,8 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl
     The <replaceable class="parameter">frame_clause</replaceable> can be one of
 
 <synopsis>
-{ RANGE | ROWS | GROUPS } <replaceable>frame_start</replaceable> [ <replaceable>frame_exclusion</replaceable> ]
-{ RANGE | ROWS | GROUPS } BETWEEN <replaceable>frame_start</replaceable> AND <replaceable>frame_end</replaceable> [ <replaceable>frame_exclusion</replaceable> ]
+{ RANGE | ROWS | GROUPS } <replaceable>frame_start</replaceable> [ <replaceable>frame_exclusion</replaceable> ] [row_pattern_common_syntax]
+{ RANGE | ROWS | GROUPS } BETWEEN <replaceable>frame_start</replaceable> AND <replaceable>frame_end</replaceable> [ <replaceable>frame_exclusion</replaceable> ] [row_pattern_common_syntax]
 </synopsis>
 
     where <replaceable>frame_start</replaceable>
@@ -1074,6 +1074,20 @@ EXCLUDE NO OTHERS
     a given peer group will be in the frame or excluded from it.
    </para>
 
+   <para>
+    The
+    optional <replaceable class="parameter">row_pattern_common_syntax</replaceable>
+    defines the <firstterm>row pattern recognition condition</firstterm> for
+    this
+    window. <replaceable class="parameter">row_pattern_common_syntax</replaceable>
+    includes following subclauses.
+
+<synopsis>
+PATTERN <replaceable class="parameter">pattern_variable_name</replaceable>[+] [, ...]
+DEFINE <replaceable class="parameter">definition_varible_name</replaceable> AS <replaceable class="parameter">expression</replaceable> [, ...]
+</synopsis>    
+   </para>
+
    <para>
     The purpose of a <literal>WINDOW</literal> clause is to specify the
     behavior of <firstterm>window functions</firstterm> appearing in the query's
-- 
2.25.1


----Next_Part(Sun_Jun_25_21_05_09_2023_126)--
Content-Type: Text/X-Patch; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="v1-0006-Row-pattern-recognition-patch-tests.patch"



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

* ci: Generate crashlogs on Windows
@ 2026-06-10 12:59 Nazir Bilal Yavuz <[email protected]>
  2026-06-10 13:49 ` Re: ci: Generate crashlogs on Windows Andres Freund <[email protected]>
  0 siblings, 1 reply; 117+ 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] 117+ messages in thread

* Re: ci: Generate crashlogs on Windows
  2026-06-10 12:59 ci: Generate crashlogs on Windows Nazir Bilal Yavuz <[email protected]>
@ 2026-06-10 13:49 ` Andres Freund <[email protected]>
  2026-06-10 15:54   ` Re: ci: Generate crashlogs on Windows Nazir Bilal Yavuz <[email protected]>
  0 siblings, 1 reply; 117+ 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] 117+ messages in thread

* Re: ci: Generate crashlogs on Windows
  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   ` Nazir Bilal Yavuz <[email protected]>
  0 siblings, 0 replies; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ 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; 117+ 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] 117+ messages in thread


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

Thread overview: 117+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2023-06-25 11:48 [PATCH v1 5/7] Row pattern recognition patch (docs). Tatsuo Ishii <[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]>
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