You could try catching the exception in your flow, and then examine the state of the flow. I'm not sure what information can be determined once you catch the exception but at least if you do it inside the flow then the flow state should still exist.
We use the below snippet to catch all uncaught exceptions and then email (inside an action) to operations.
Code:
<!-- GLOBAL TRANSITIONS -->
<global-transitions>
<transition on="cancel" to="cancelledOperation"
validate="false" />
<transition on-exception="java.lang.RuntimeException"
to="catchError" />
</global-transitions>
<!-- ACTION STATE FOR ERROR NOTIFICATION -->
<action-state id="catchError">
<evaluate expression="actions.reportError" />
<transition to="error" />
</action-state>