An interesting thing happened using gdb on linux today.
If I try to block on poll() in a multithreaded program,
poll wakes up continuously, thanks to SIG32, aka
SIGRTMIN. Seems pthreads is using this to change thread
contexts, and gdb doesn't seem to get it. However if I
block on pthread_cond_timedwait, this isn't a problem, nor
is it unexpected, since pthread_cond_timedwait can't be
interrupted via a signal. Perhaps there is a gdb
handle command I havent tried yet.
I was thinking about writing a signal handler that caught
SIGSEGV and SIGABRT that basically dumped the stack using
the backtrace call in /usr/include/execinfo.h. Too bad the
linux kernel just won't dump core the right way for
multithreaded programs. Too bad the kernel doesn't know
about pthreads.
I've been thinking about using the sgi's
state threads package. It looks interesting, despite
being NPL.