When the hang analyzer runs, it prints information and address of the LockRequests and Lockers for each thread. If that Locker is owned by an idle, stashed transaction, something like this is printed:
This is pretty useless to a debugger, because the information about which session and transaction own that Locker is not attainable from this output. Instead it requires finding the SessionCatalog and searching through the list of sessions.
When unsetThreadId() is called, we should replace the thread ID with the owning session ID, or just always keep a reference to the session ID on the locker.