#include #include #include void foo (void); void bar (void); void subroutine (int); void handler (int); void have_a_very_merry_interrupt (void); main () { puts ("Starting up"); foo (); /* Put a breakpoint on foo() and call it to see a dummy frame */ have_a_very_merry_interrupt (); puts ("Shutting down"); } void foo (void) { puts ("hi in foo"); } void bar (void) { char *nuller = 0; puts ("hi in bar"); *nuller = 'a'; /* try to cause a segfault */ } void handler (int sig) { subroutine (sig); } /* The first statement in subroutine () is a place for a breakpoint. Without it, the breakpoint is put on the while comparison and will be hit at each iteration. */ void subroutine (int in) { int count = in; while (count < 100) count++; } void have_a_very_merry_interrupt (void) { puts ("Waiting to get a signal"); signal (SIGALRM, handler); alarm (1); sleep (2); /* We'll receive that signal while sleeping */ }