Help tracing WINE funcion..

Rick Romero rick at valeoinc.com
Fri Feb 22 09:09:54 CST 2002


On Thu, 2002-02-21 at 19:31, lawson_whitney at juno.com wrote:
> On 21 Feb 2002, Rick Romero wrote:
> 
> > Nope. No joy :/
> 
> What no native msvcrt?  Not a viral Crud++ app?

I have no idea.  It's the Visual Foxpro development environment.  It
could very well have been written in C++ at Microsoft.

> > >
> > > Or try winedbg and set a breakpoint.
> >
> > That's probably beyond me.. but I have some time :)
> >
> > Thanks
> > Rick
> >
> Did I mention that sometimes when you don't have a clue
hehe I KNOW I don't have a clue, but you didn't have to point it out :D

> --debugmsg +relay
> can give you a good starting point to see what it is you have to contend
> with?  Sure, it makes a big trace file, but it has pretty near all the
> interaction between the app and Wine.  Actually, I am more likely to use
> 
> --debugmsg $relay
> 
> echo $relay
> -relay=rtlentercriticalsection:RTLleavecriticalsection:rtldeletecriticalsection:initializecriticalsection:interlockedincrement:interlockeddecrement
> 
> That weeds out a lot of the more repetitive and often meaningless relay
> messages.
> 
> cat .bashrc|grep relay
> export relay="-relay=rtlentercriticalsection:RTLleavecriticalsection:rtldeletecriticalsection:initializecriticalsection:interlockedincrement:interlockeddecrement"
> 
Wonderful.. I'll try this in a bit...

> I'd much rather debug a crash than wrong results.  In effect, a crash is
> a problem with a builtin breakpoint.
Exactly my thoughts.  My interpretation of the results, is SetCapture()
is exectuted (button down), and a SetCapture() button up is never
re-executed, maybe because of some while loop that's not being triggered
because of some weird FoxPro usage...

Well, I decided to do the relay before I sent the mail, and I do see
something.. but nothing too peculiar..

Working (wine 2001-05-10)
trace:win:SetCapture SetCapture calling EVENT_Capture
trace:win:EVENT_Capture (0x0138)
trace:win:EVENT_Capture Releasing wndPtr - Prev (0)  Wnd(312)
080651c0:Ret  user32.SetCapture() retval=00000000 ret=0065fe45
080651c0:Call user32.GetQueueStatus(00000006) ret=0049df89
080651c0:Ret  user32.GetQueueStatus() retval=00060002 ret=0049df89
080651c0:Call
user32.PeekMessageA(40626a34,00000000,00000200,00000209,00000003)
ret=0049e0f0
080651c0:Ret  user32.PeekMessageA() retval=00000001 ret=0049e0f0
080651c0:Call user32.TranslateMessage(40626a34) ret=00508594
080651c0:Ret  user32.TranslateMessage() retval=00000000 ret=00508594
080651c0:Call user32.DispatchMessageA(40626a34) ret=0049e411
080651c0:Call window proc 0x4a0786
(hwnd=00000138,msg=WM_MOUSEMOVE,wp=00000001,lp=0015001e)
080651c0:Call user32.ClientToScreen(00000138,40626838) ret=0050aea1
080651c0:Ret  user32.ClientToScreen() retval=00000001 ret=0050aea1
080651c0:Call kernel32.GetTickCount() ret=0049df02
<snip bunch of WM_MOUSEMOVEs>
user32.PeekMessageA(40626a34,00000000,00000200,00000209,00000003)
ret=0049e0f0
080651c0:Ret  user32.PeekMessageA() retval=00000001 ret=0049e0f0
080651c0:Call user32.TranslateMessage(40626a34) ret=00508594
080651c0:Ret  user32.TranslateMessage() retval=00000000 ret=00508594
080651c0:Call user32.DispatchMessageA(40626a34) ret=0049e411
080651c0:Call window proc 0x4a0786
(hwnd=00000138,msg=WM_LBUTTONUP,wp=00000000,lp=0015001e)
080651c0:Call user32.ClientToScreen(00000138,40626838) ret=0050afce
080651c0:Ret  user32.ClientToScreen() retval=00000001 ret=0050afce
080651c0:Call kernel32.GetTickCount() ret=0049df02
080651c0:Ret  kernel32.GetTickCount() retval=0000b1ab ret=0049df02
080651c0:Call user32.GetKeyState(00000011) ret=0049df3b
080651c0:Ret  user32.GetKeyState() retval=00000000 ret=0049df3b
080651c0:Call user32.GetKeyState(00000010) ret=0049df48
080651c0:Ret  user32.GetKeyState() retval=00000000 ret=0049df48
080651c0:Call user32.GetKeyState(00000012) ret=0049df55
080651c0:Ret  user32.GetKeyState() retval=00000000 ret=0049df55
080651c0:Call user32.GetCursorPos(406267cc) ret=0049dfa1
080651c0:Ret  user32.GetCursorPos() retval=00000001 ret=0049dfa1
080651c0:Call user32.DefWindowProcA(00000138,00000202,00000000,0015001e)
ret=004a088b
080651c0:Ret  user32.DefWindowProcA() retval=00000000 ret=004a088b
080651c0:Ret  window proc 0x4a0786
(hwnd=00000138,msg=WM_LBUTTONUP,wp=00000000,lp=0015001e) retval=00000000
080651c0:Ret  user32.DispatchMessageA() retval=00000000 ret=0049e411
080651c0:Call user32.GetQueueStatus(00000006) ret=0049df89
080651c0:Ret  user32.GetQueueStatus() retval=00060000 ret=0049df89
080651c0:Call
user32.PeekMessageA(40626a34,00000000,00000200,00000209,00000003)
ret=0049e0f0
080651c0:Ret  user32.PeekMessageA() retval=00000001 ret=0049e0f0
080651c0:Call user32.TranslateMessage(40626a34) ret=00508594
080651c0:Ret  user32.TranslateMessage() retval=00000000 ret=00508594
080651c0:Call user32.DispatchMessageA(40626a34) ret=0049e411
080651c0:Call window proc 0x4a0786
(hwnd=00000138,msg=WM_MOUSEMOVE,wp=00000000,lp=0016001e)

-----------------------------------
Non-Working (wine-2002-02-20 cvs)
trace:win:SetCapture Calling Event_Capture
trace:win:EVENT_Capture (0x20021) Window #!! -Maybe?
trace:win:EVENT_Capture About to Return from Event Capture!!!  
Prev(0)   Wnd(131105)

0806d550:Ret  user32.SetCapture() retval=00000000 ret=0065fe45
0806d550:Call user32.GetQueueStatus(00000006) ret=0049df89
0806d550:Ret  user32.GetQueueStatus() retval=00040000 ret=0049df89
0806d550:Call
user32.PeekMessageA(405b6a0c,00000000,00000200,00000209,00000003)
ret=0049e0f0
0806d550:Call
x11drv.MsgWaitForMultipleObjectsEx(00000000,00000000,00000000,00000000,00000000) ret=40685c14
0806d550:Ret  x11drv.MsgWaitForMultipleObjectsEx() retval=00000102
ret=40685c14
0806d550:Ret  user32.PeekMessageA() retval=00000001 ret=0049e0f0
0806d550:Call user32.TranslateMessage(405b6a0c) ret=00508594
0806d550:Ret  user32.TranslateMessage() retval=00000000 ret=00508594
0806d550:Call user32.DispatchMessageA(405b6a0c) ret=0049e411
0806d550:Call window proc 0x4a0786
(hwnd=00020021,msg=WM_LBUTTONUP,wp=00000000,lp=0025005c)
0806d550:Call user32.ClientToScreen(00020021,405b67f0) ret=0050afce
0806d550:Ret  user32.ClientToScreen() retval=00000001 ret=0050afce
0806d550:Call kernel32.GetTickCount() ret=0049df02
0806d550:Ret  kernel32.GetTickCount() retval=00012124 ret=0049df02
0806d550:Call user32.GetKeyState(00000011) ret=0049df3b
0806d550:Ret  user32.GetKeyState() retval=00000000 ret=0049df3b
0806d550:Call user32.GetKeyState(00000010) ret=0049df48
0806d550:Ret  user32.GetKeyState() retval=00000000 ret=0049df48
0806d550:Call user32.GetKeyState(00000012) ret=0049df55
0806d550:Ret  user32.GetKeyState() retval=00000000 ret=0049df55
0806d550:Call user32.GetCursorPos(405b6784) ret=0049dfa1
0806d550:Call x11drv.GetCursorPos(405b6784) ret=406ca191
0806d550:Ret  x11drv.GetCursorPos() retval=000001fd ret=406ca191
0806d550:Ret  user32.GetCursorPos() retval=00000001 ret=0049dfa1
0806d550:Call user32.DefWindowProcA(00020021,00000202,00000000,0025005c)
ret=004a088b
0806d550:Ret  user32.DefWindowProcA() retval=00000000 ret=004a088b
0806d550:Ret  window proc 0x4a0786
(hwnd=00020021,msg=WM_LBUTTONUP,wp=00000000,lp=0025005c) retval=00000000
0806d550:Ret  user32.DispatchMessageA() retval=00000000 ret=0049e411
0806d550:Call user32.GetQueueStatus(00000006) ret=0049df89
0806d550:Ret  user32.GetQueueStatus() retval=00040000 ret=0049df89
0806d550:Call
user32.PeekMessageA(405b6a0c,00000000,00000200,00000209,00000003)
ret=0049e0f0
0806d550:Call
x11drv.MsgWaitForMultipleObjectsEx(00000000,00000000,00000000,00000000,00000000) ret=40685c14
0806d550:Ret  x11drv.MsgWaitForMultipleObjectsEx() retval=00000000
ret=40685c14
0806d550:Ret  user32.PeekMessageA() retval=00000001 ret=0049e0f0
0806d550:Call user32.TranslateMessage(405b6a0c) ret=00508594
0806d550:Ret  user32.TranslateMessage() retval=00000000 ret=00508594
0806d550:Call user32.DispatchMessageA(405b6a0c) ret=0049e411
0806d550:Call window proc 0x4a0786


Maybe someone can get something out of that.. I've been comparing them
for the past 30 minutes and I can't see anything significant...
Interesting x11drv returns a different GetCurPos()
The 2nd Get QueueStatus after the 2nd WM_LBUTTONUP has a different
reval=00040000 on the "bad", where the "good" is reval=00060000"

I wouldn't know where to go from here, but maybe it'll help someone
else. I can run comparisons for anyone if they'd like, though I never
figured out how to save a trace to a file, > didn't work, so I'm just
scrolling now :/

Thanks for your time Lawson.

Rick


> Oh well.  Wine build complete.  Have to see if it will run my VC++ app
> with builtin msvcrt yet.
> 
> Lawson
> 
-- 
Rick Romero
IT Manager	ph: 262.685.4841
Valeo, Inc.	fax: 262.695.4850
rick at valeoinc.com





More information about the wine-users mailing list