It is a very common question, how to debug the BizTalk applications.
Have you ever tried to use the BizTalk Orchestration Debugger? So painful experience. Never see the BizTalk developer who is using it in real work.
All sent and received messages go through the MessageBox. When they pass MessageBox you can create additional subscription to these messages and intercept copies of these messages.
The subscription can be to the message type or to the publisher parameters like Receive port name.
This technique has great benefits:
As a matter of fact I use two methods on the regular basis. (The second one is the old good Trace.WriteLine(..) with DebugView.exe as a receiver of the debug output.) That means I always create the orchestrations with the Expression shapes (for Trace.WriteLine)) after all message receives/transformations, in the begin/end all branches, plus I create the test send ports for almost ALL messages.
Yes, for ALL output messages.
It is easy and fast to create the test send ports in the binding file without using UI.
And I always deploy these test ports to the production. It saved me a lot of time in deployment and maintain.