So, if you've got to debug a small's program semantics, then you're best off using ltrace. If you need to debug some misbehaviour in medium-sized applications, then have a try with strace. All other variants will either require GDB, or are just not debugable if you aren't into that program's source code.
Debugging heavy graphical applications (things like Mozilla or OpenOffice) is a real pain in the a*s. They'll do tons of useless I/O (eg. writing things to the X11 server or getting X11 events), but this massive amount of data can simply hide the small number of interesting calls...