On Thu, May 1, 2025 at 12:59 PM Jonathan Wakely <jwak...@redhat.com> wrote: > > This includes the P2810R4 (is_debugger_present is_replaceable) changes, > allowing std::is_debugger_present to be replaced by the program. > > It would be good to provide a macOS definition of is_debugger_present as > per https://developer.apple.com/library/archive/qa/qa1361/_index.html > but that isn't included in this change. > > The src/c++26/debugging.cc file defines a global volatile int which can > be set by debuggers to indicate when they are attached and detached from > a running process. This allows std::is_debugger_present() to give a > reliable answer, and additionally allows a debugger to choose how > std::breakpoint() should behave. Setting the global to a positive value > will cause std::breakpoint() to use that value as an argument to > std::raise, so debuggers that prefer SIGABRT for breakpoints can select > that. By default std::breakpoint() will use a platform-specific action > such as the INT3 instruction on x86, or GCC's __builtin_trap(). > > On Linux the std::is_debugger_present() function checks whether the > process is being traced by a process named "gdb", "gdbserver" or > "lldb-server", to try to avoid interpreting other tracing processes > (such as strace) as a debugger. There have been comments suggesting this > isn't desirable and that std::is_debugger_present() should just return > true for any tracing process (which is the case for non-Linux targets > that support the ptrace system call). > > libstdc++-v3/ChangeLog: > > * config.h.in: Regenerate. > * configure: Regenerate. > * configure.ac: Check for facilities needed by <debugging>. > * include/Makefile.am: Add new header. > * include/Makefile.in: Regenerate. > * include/bits/version.def (debugging): Add. > * include/bits/version.h: Regenerate. > * include/precompiled/stdc++.h: Add new header. > * src/c++26/Makefile.am: Add new file. > * src/c++26/Makefile.in: Regenerate. > * include/std/debugging: New file. > * src/c++26/debugging.cc: New file. > * testsuite/19_diagnostics/debugging/breakpoint.cc: New test. > * testsuite/19_diagnostics/debugging/breakpoint_if_debugging.cc: > New test. > * testsuite/19_diagnostics/debugging/is_debugger_present.cc: New > test. > * testsuite/19_diagnostics/debugging/is_debugger_present-2.cc: > New test. > ---
> +#elif defined(__i386__) || defined(__x86_64__) > + __asm__ volatile ("int3; nop"); Just a small nit - can this be written as: "int3\n\tnop" And perhaps add a small comment about "nop", that is added due to gdb issues. Thanks, Uros.