title: Get object details from clrstack output in windbg
body: <p>I have a multi-threaded .NET application that hangs on an OnUserPreferenceChanged event. This is typically caused by a UI control or message loop started on a background thread (see e.g. <a href="http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.html" rel="nofollow">http://www.ikriv.com/en/prog/info/dotnet/MysteriousHang.html</a>), but as far as I can tell that isn't the case here. I verified this by setting a breakpoint in the WindowsFormsSynchronizationContext (as suggested here <a href="http://www.aaronlerch.com/blog/2008/12/15/debugging-ui/" rel="nofollow">http://www.aaronlerch.com/blog/2008/12/15/debugging-ui/</a>) and it is only constructed once, in the main UI thread.</p>
  
  <p>Here's the output from !clrstack in windbg:</p>
  
  <blockquote>
    <p>0013eea8 7c90e514 [HelperMethodFrame_1OBJ: 0013eea8]
    System.Threading.WaitHandle.WaitOneNative(Microsoft.Win32.SafeHandles.SafeWaitHandle,
    UInt32, Boolean, Boolean) 0013ef54 792b68af
    System.Threading.WaitHandle.WaitOne(Int64, Boolean) 0013ef70 792b6865
    System.Threading.WaitHandle.WaitOne(Int32, Boolean) 0013ef84 7b6f1a4f
    System.Windows.Forms.Control.WaitForWaitHandle(System.Threading.WaitHandle)
    0013ef98 7ba2d68b
    System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control,
    System.Delegate, System.Object[], Boolean) 0013f038 7b6f33ac
    System.Windows.Forms.Control.Invoke(System.Delegate, System.Object[])
    0013f06c 7b920bd7
    System.Windows.Forms.WindowsFormsSynchronizationContext.Send(System.Threading.SendOrPostCallback,
    System.Object) 0013f084 7a92ed62
    Microsoft.Win32.SystemEvents+SystemEventInvokeInfo.Invoke(Boolean,
    System.Object[]) 0013f0b8 7a92dc8f
    Microsoft.Win32.SystemEvents.RaiseEvent(Boolean, System.Object,
    System.Object[]) 0013f104 7a92e227
    Microsoft.Win32.SystemEvents.OnUserPreferenceChanged(Int32, IntPtr,
    IntPtr) 0013f124 7aaa06ec
    Microsoft.Win32.SystemEvents.WindowProc(IntPtr, Int32, IntPtr, IntPtr)</p>
  </blockquote>
  
  <p>The last method I can get param info on is:</p>
  
  <blockquote>
    <p>0013f084 7a92ed62
    Microsoft.Win32.SystemEvents+SystemEventInvokeInfo.Invoke(Boolean,
    System.Object[])
        PARAMETERS:
            this = 0x01404420
            checkFinalization = 0x00000001
            args = 0x0144a298</p>
  </blockquote>
  
  <p>Here's my question: How can I get more information here? Ultimately, I'd like to know which objects and/or threads this Invoke is for. Something like "!do 0x01404420" or "!do 0x0144a298" but I don't know where to go from there.</p>