Now that the latest latrace version has fixed the process stack handling crashes and the output can be toggled on & off, it's more useful than ltrace.
 The latrace based tracing downside is that you need to start the process under latrace as it's depending on dynamic linker (LD_AUDIT-feature) whereas ltrace can be attached to an already running process.
Downsides of ptrace() based ltrace are that it doesn't work for threaded processes and that it cannot trace library -> library calls, only binary -> library calls. Both are pretty huge downsides.
 ltrace toggles the breakpoints to let programs continue, this means that it can miss other threads calling same functions at the same time. Whereas e.g. functracer executes the instruction that was under breakpoint out-of-line (i.e. needs arch-specific code to emulate code using relative addressing) so that it doesn't need to be disabled.
One more problem with ltrace & functracer are that Linux ptrace() is somewhat broken for tracing. Utrace is supposed to fix/make ptrace() robust, but unfortunately it's still not in mainline.