Просмотр исходного кода

cmake: add SDLTEST_GDB option to run tests under gdb debugger printing stacktraces

Anonymous Maarten 1 день назад
Родитель
Сommit
396eeff350
2 измененных файлов с 42 добавлено и 0 удалено
  1. 6 0
      test/CMakeLists.txt
  2. 36 0
      test/unix/gdbcmds.txt

+ 6 - 0
test/CMakeLists.txt

@@ -54,6 +54,12 @@ if(WIN32)
     else()
         set_property(TARGET sdlprocdump PROPERTY EXCLUDE_FROM_ALL "1")
     endif()
+else()
+    option(SDLTEST_GDB "Run tests using headless gdb" OFF)
+    find_program(GDB_BIN NAMES "gdb")
+    if(SDLTEST_GDB AND GDB_BIN)
+        set(CMAKE_TEST_LAUNCHER "${GDB_BIN};-batch;-nx;-x;${CMAKE_CURRENT_SOURCE_DIR}/unix/gdbcmds.txt;--args")
+    endif()
 endif()
 
 if(EMSCRIPTEN)

+ 36 - 0
test/unix/gdbcmds.txt

@@ -0,0 +1,36 @@
+# Script to run a headless gdb printing a stacktrace on a fatal signal
+# Use it as: `gdb -batch -nx -x gdbcmds.txt --args $PROGRAM_AND_ARGS`
+# Configure CMake with -DSDLTEST_GDB=ON to use with within CTest.
+
+set pagination off
+set confirm off
+set verbose off
+
+# Only stop on real crash signals
+handle SIGSEGV stop print nopass
+handle SIGABRT stop print nopass
+handle SIGILL  stop print nopass
+handle SIGFPE  stop print nopass
+handle SIGBUS  stop print nopass
+
+# Ignore SIGPIPE and SIGTERM signals
+# (SIGTERM is used by testthread)
+handle SIGPIPE nostop noprint pass
+handle SIGTERM nostop noprint pass
+
+define hook-stop
+  if !$_isvoid($_siginfo)
+    printf "\n=== Crash detected (signal %d) ===\n", $_siginfo.si_signo
+    bt full
+    quit 1
+  end
+end
+
+run
+
+# Normal exit path
+if !$_isvoid($_exitcode)
+  quit $_exitcode
+end
+
+quit 0