If you've never asked or been asked the question, read no further.
However, I'm guessing the fact you're reading this blog at all means you're more familiar with the question than you'd like to be.
Working out what happened to "lost" messages is a topic that comes up frequently in my conversations with customers (we all know they're not really lost of course).
Often it's an MQ infrastructure team that is tired of having the finger pointed at MQ, and is looking for tools and approaches that can help them explain what really happened to the messages.
I'm afraid I don't have a magic bullet for all cases, but for your critical persistent messages on distributed platforms there is one great source of information you might not have looked at before - the MQ recovery log.
I like to think of the recovery log as if MQ is an Engineer - it writes a journal of everything it does, which under normal circumstances it never reads, but it knows it can go back and get hold of the data if it needs to.
So why can't you use it to look back in time and see what happened to your messages?
Or even look at a transaction that's still running, and see what messages were sent/received so far?
The answer is you can*, and the MQ information center shows you how to do so via output from the dmpmqlog tool. However, it's not especially easy.
So on my todo list for a couple of years has been to write a simple tool to make the process of reading dmpmqlog output easier.
I've finally got round to it, and here it is: http://ibm.co/1eybPRy
Give it a try, and see what you think.
* Be aware that operations on nonpersistent messages are not logged, and operations on persistent messages performed outside of syncpoint (a global XA or local transaction) might not be logged.