diff --git a/src/lephisto.c b/src/lephisto.c
index 0f988a8..8520d0e 100644
--- a/src/lephisto.c
+++ b/src/lephisto.c
@@ -615,22 +615,31 @@ static void print_SDLversion(void) {
 static const char* debug_sigCodeToStr(int sig, int sig_code) {
   if(sig == SIGFPE)
     switch(sig_code) {
-      case FPE_INTDIV: return "SIGFPE (integer divide by zero)";
-      case FPE_INTOVF: return "SIGFPE (integer overflow)";
-      case FPE_FLTDIV: return "SIGFPE (floating-point divide by zero)";
-      case FPE_FLTOVF: return "SIGFPE (floating-point overflow)";
-      case FPE_FLTUND: return "SIGFPE (floating-point underflow)";
-      case FPE_FLTRES: return "SIGFPE (floating-point inexact result)";
-      case FPE_FLTINV: return "SIGFPE (floating-point invalid operation)";
-      case FPE_FLTSUB: return "SIGFPE (subscript out of range)";
-      default: return "SIGFPE";
+      case SI_USER:     return "SIGFPE (raised by program)";
+      case FPE_INTDIV:  return "SIGFPE (integer divide by zero)";
+      case FPE_INTOVF:  return "SIGFPE (integer overflow)";
+      case FPE_FLTDIV:  return "SIGFPE (floating-point divide by zero)";
+      case FPE_FLTOVF:  return "SIGFPE (floating-point overflow)";
+      case FPE_FLTUND:  return "SIGFPE (floating-point underflow)";
+      case FPE_FLTRES:  return "SIGFPE (floating-point inexact result)";
+      case FPE_FLTINV:  return "SIGFPE (floating-point invalid operation)";
+      case FPE_FLTSUB:  return "SIGFPE (subscript out of range)";
+      default:          return "SIGFPE";
     }
   else if(sig == SIGSEGV)
     switch(sig_code) {
+      case SI_USER:     return "SIGSEGV (raised by program)";
       case SEGV_MAPERR: return "SIGEGV (address not mapped to object)";
       case SEGV_ACCERR: return "SIGEGV (invalid permissions for mapped object)";
       default: return "SIGSEGV";
     }
+  else if(sig == SIGTRAP)
+    switch(sig_code) {
+      case SI_USER:     return "SIGTRAP (raised by program)";
+      case TRAP_BRKPT:  return "SIGTRAP (process breakpoint)";
+      case TRAP_TRACE:  return "SIGTRAP (process trace trap)";
+      default:          return "SIGTRAP";
+    }
   /* No suitable code found. */
   return strsignal(sig);
 }
@@ -681,6 +690,9 @@ static void debug_sigInit(void) {
   sigaction(SIGFPE, &sa, &so);
   if(so.sa_handler == SIG_IGN)
     DEBUG("Unable to set up SIGFPE signal handler.");
+  sigaction(SIGTRAP, &sa, &so);
+  if(so.sa_handler == SIG_IGN)
+    DEBUG("Unable to get set up SIGTRAP signal handler.");
 #endif /* #if defined(LINUX) && !defined(NODEBUG) */
 }