- Versions of Linux must be identical on all nodes of cluster.
- PGDBG assumes that all processes share the same process image (homogeneous
loads, and memory map).
- PGDBG recognizes shared objects on the initial node only.
- Instruction level debugging of .so shared objects only. Compile program
-Bstatic to set bps in shared objects.
- No support for MPI message queues or groups.
- Process attach is not supported. Initial process is forked from debugger.
- Fortran thread private variables are not available in PGDBG.
- The values of thread private variables are available at the first instruction
of each source line only (line level debugging only).
- Using RH 6.2? You will need to install a patch to use hardware watchpoints
- Stdout is block buffered by all non-initial MPI processes.
- Calling omp_set_num_threads(n) from program may cause all non-initial threads
to exit before creating n-1 new threads. This is expected behavior.
- Calling omp_set_num_threads(n) from hybrid OpenMP/MPI program may employ the
use of the SUGHUP signal off of MPI_Finalize(). This is expected behavior.
- Some IO routines use semaphores and locking. It is therefore possible to
hang some threads off of a stdio routine indefinitely. When your program
appears to hang, it is best to continue all threads to a breakpoint outside of
the stdio routine.
- Socket limit imposed by Linux system. PGDBG uses sockets to communicate with
thin debug servers running on each node of the cluster. If the system runs out
of sockets the following message will be printed after a one minute timeout:
poll: protocol failure in circuit setup
- accept: Bad file descriptor
ERROR: unable to attach to (PID 2763, HOST red2.wil.st.com)
[New Process (PID 26200, HOST red2.wil.st.com) IGNORED]
PGDBG will then ignore the rest of the (unattached) processes. Those ignored
processes will never return from MPI_Init.