Hi Rich, the key one to use is relay. WINEDEBUG=relay tells you every API function that's called. It can be a bit overwhelming, but it's what you fall back on when nothing else is working.
I downloaded and tried it, and scanned backwards in my relay trace a good distance till I saw some failure. Here's what I think it is: 0009:Call kernel32.GetProcAddress(20290000,0052b895 "BlockInput") ret=0052cc6a 0009:Call ntdll.RtlInitAnsiString(73ccfe20,0052b895 "BlockInput") ret=201d2c3e 0009:Ret ntdll.RtlInitAnsiString() retval=00000000 ret=201d2c3e 0009:Call ntdll.LdrGetProcedureAddress(20290000,73ccfe20,00000000,73ccfe1c) ret=201d2c4d 0009:Ret ntdll.LdrGetProcedureAddress() retval=c000007a ret=201d2c4d 0009:Call ntdll.RtlNtStatusToDosError(c000007a) ret=201d2c7d 0009:Ret ntdll.RtlNtStatusToDosError() retval=0000007f ret=201d2c7d 0009:Ret kernel32.GetProcAddress() retval=00000000 ret=0052cc6a 0009:Call kernel32.ExitProcess(0052cb10) ret=0052cc7b
That is, somebody's trying to get the function BlockInput from kernel32.dll, and it isn't there, so the program exits.
I don't know if this is in MFC somewhere, or in the program's source. Luckily the source is available, so you might be able to proceed. Hope that helps, --Juan
__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
I appreciate the tip about falling back on the relay debug channel, but may I ask how you know the problem is with BlockInput not existing? Is there something from the output that I'm not understanding, or do you just know that because you're familiar with the kernel32.dll code?
I'm a long way from ever becoming a Wine developer, but I do want to learn how to either get my programs working, or to be able to accurately identify bugs.
On Thursday 23 February 2006 20:18, Juan Lang wrote:
Hi Rich, the key one to use is relay. WINEDEBUG=relay tells you every API function that's called. It can be a bit overwhelming, but it's what you fall back on when nothing else is working.
I downloaded and tried it, and scanned backwards in my relay trace a good distance till I saw some failure. Here's what I think it is: 0009:Call kernel32.GetProcAddress(20290000,0052b895 "BlockInput") ret=0052cc6a 0009:Call ntdll.RtlInitAnsiString(73ccfe20,0052b895 "BlockInput") ret=201d2c3e 0009:Ret ntdll.RtlInitAnsiString() retval=00000000 ret=201d2c3e 0009:Call ntdll.LdrGetProcedureAddress(20290000,73ccfe20,00000000,73ccfe1c) ret=201d2c4d 0009:Ret ntdll.LdrGetProcedureAddress() retval=c000007a ret=201d2c4d 0009:Call ntdll.RtlNtStatusToDosError(c000007a) ret=201d2c7d 0009:Ret ntdll.RtlNtStatusToDosError() retval=0000007f ret=201d2c7d 0009:Ret kernel32.GetProcAddress() retval=00000000 ret=0052cc6a 0009:Call kernel32.ExitProcess(0052cb10) ret=0052cc7b
That is, somebody's trying to get the function BlockInput from kernel32.dll, and it isn't there, so the program exits.
I don't know if this is in MFC somewhere, or in the program's source. Luckily the source is available, so you might be able to proceed. Hope that helps, --Juan
Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
Rich Gilson wrote:
I appreciate the tip about falling back on the relay debug channel, but may I ask how you know the problem is with BlockInput not existing? Is there something from the output that I'm not understanding, or do you just know that because you're familiar with the kernel32.dll code?
I'll give it a shot (I'm a chronic newbie so this might be wrong).
0009:Call kernel32.GetProcAddress(20290000,0052b895 "BlockInput")
There's the call asking for an address for BlockInput.
0009:Ret kernel32.GetProcAddress() retval=00000000 ret=0052cc6a 0009:Call kernel32.ExitProcess(0052cb10) ret=0052cc7b
There the application exits, right after GetProcAddress returns 00000000.
Look up GetProcAddress in MSDN: http://www.google.com/search?q=GetProcAddress&btnI
It says: "If the function fails, the return value is NULL." Which seems to be what we're seeing.
It also says: "To get extended error information, call GetLastError." Luckily, the source code is LGPL and we know that there are bits and pieces missing of it, so an easier way than calling GetLastError is to just grep the sources for kernel32 and see if BlockInput might be missing (probably not a bad guess)...
HTH, hope I'm not way off.