¿Cómo puedo saber qué hace una llamada UnsafeNativeMethods.DispatchMessageA usando windbg?
Pregunta
He rastreado mi punto muerto hasta que este hilo ya no envía mensajes, pero ¿cómo puedo ir un paso más allá y descubrir qué está haciendo el hilo actualmente? Estoy usando windbg y caminatas aleatorias usando! Do no me ha dado nada hasta ahora
muchas gracias
Oskar
0:057> !clrstack
OS Thread Id: 0x17f8 (57)
ESP EIP
1393f1ac 2070a64a [NDirectMethodFrameStandalone: 1393f1ac] System.Windows.Forms.UnsafeNativeMethods.DispatchMessageA(MSG ByRef)
1393f1bc 04851c91 System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32, Int32, Int32)
1393f258 04851276 System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
1393f2a0 048507e3 System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
1393f2d0 0485062f System.Windows.Forms.Application.Run()
Solución
!dumpstack
hace el truco, bonito seguimiento detallado de la pila en el dll no administrado
Otros consejos
kn100 le dará la pila nativa, pero parece que está llamando a DispatchMessage , lo que significa que probablemente esté atascado en el controlador de la ventana de la ventana de destino (es decir, un evento" OnSize "o algo en su código)
Abra la estructura MSG para que pueda ver la ventana y el mensaje que está tratando de enviar, luego busque el controlador de eventos correspondiente en su código.