I'm not really that familiar with Carp, I'll see what I can figure out to make it give a more complete backtrace.
The problem wasn't that the backtrace was unacceptable. The problem was that you simply failed to log @_ (really just $_), which is the most important thing to log when logging inside of a __DIE__ handler.
Luckily, the backtrace also happened to include a truncated version of that message. But the solution isn't to try to get the backtrace to not truncate. The solution is to log $_ directly (along with the backtrace).
In this particular case, the interesting backtrace is the C backtrace, but that isn't as easy to get (you'd likely need a non-stripped build and gcc and...).