Debugging is not something I enjoy doing but sometimes I cannot avoid doing… Therefore I thought that a short overview on some of the available tools will be helpful.
- TotalView: is probably the most widely used debugger for parallel programs. It can be used with C, C++ and Fortran programs and it supports all common forms of parallelism (pthreads, penMP and MPI). The vendor behind, TotalView, was acquired by Rogue Wave in December 2009.
- DDT: Distributed Debugging Tool, a product of Allinea Software. DDT is a graphical debugger for debugging complex parallel codes. It is supported on a variety of platforms for C, C++ and Fortran. DDT is a strong competitor to TotalView.
- PGDBG: The Portland Group Compiler Technology symbolic debugger for F77, F90, C, C++ and assembly language programs. It is capable of debugging parallel programs on clusters, including threaded, MPI and hybrid MPI/threads.
- GDB: the GNU GDB debugger is a relatively powerful, command-line, single-process debugger. It is text-based, easy to learn, and suitable for a quick debug. C, C++ and Fortran programs are supported. GDB is not a parallel debugger, and not particularly well-suited to debugging threaded codes. GDB can be used with the graphical DDD debugger. GDB can also be used to debug a single process in a parallel job.
- DDD: the GNU DDD debugger is a graphical front-end for command-line debuggers such as GDB, DBX, WDB, Ladebug, JDB, XDB, the Perl debugger, the bash debugger and the Python debugger. DDD is not really a parallel debugger, but like GDB, it can be used to debug a single process of a parallel program.
- STAT: the Stack Trace Analysis Tool gathers and merges stack traces from a parallel processes. It produces call graphs 2D spatial and 3D spatial-temporal. The 2D spatial call prefix tree represents a single snapshot of the entire application, and the 3D spatial-temporal call prefix tree represents a series of snapshots from the application taken over time.
If you are using others, please feel free to add.