std.posix.abort: only trigger breakpoint on Windows if being debugged

Processes should reasonably be able to expect their children to abort
with typical exit codes, rather than a debugger breakpoint signal. This
flag in the PEB is what would be checked by `IsDebuggerPresent` in
kernel32, which is the function you would typically use for this
purpose.

This fixes `test-stack-trace` failures on Windows, as these tests were
expecting exit code 3 to indicate abort.
This commit is contained in:
mlugg 2025-09-18 15:03:45 +01:00
parent 2ab650b481
commit dae703d3c0
No known key found for this signature in database
GPG key ID: 3F5B7DCCBF4AF02E

View file

@ -689,7 +689,7 @@ pub fn abort() noreturn {
// even when linking libc on Windows we use our own abort implementation.
// See https://github.com/ziglang/zig/issues/2071 for more details.
if (native_os == .windows) {
if (builtin.mode == .Debug) {
if (builtin.mode == .Debug and windows.peb().BeingDebugged != 0) {
@breakpoint();
}
windows.kernel32.ExitProcess(3);