我们的程序挂在客户的机器上(主要是在 Windows 7 中)。
该程序是一个客户端,它连接到我们在另一台机器上的服务器。它是一个带有Win32编程图形界面的C程序。
现象:在随机执行我们的客户端应用程序时,突然变白,出现“应用程序已停止响应”对话框,有两个选项:“关闭应用程序”、“等待应用程序响应”等。客户计算机说AppHang-B1。
我们无法在我们的系统中重现此问题。但是一旦我重现了这个问题并进行了故障转储。
调用堆栈显示以下内容。
0012fa20 76accde0 76ac18d9 0012fcb0 00000000 ntdll!KiFastSystemCallRet
0012fa24 76ac18d9 0012fcb0 00000000 00000000 user32!NtUserGetMessage+0xc
0012fa48 00442dfc 0012fcb0 00000000 00000000 user32!GetMessageA+0x8d
0012fef8 00469b87 00400000 00000000 0334efed OurApp32!WinMain+0x12ec [e:\mswnt\api55a\OurAppFolder\term\wbtmain.c @ 1350]
0012ff88 7589ee1c 7ffde000 0012ffd4 774237eb OurApp32!__tmainCRTStartup+0x113 [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c @ 263]
0012ff94 774237eb 7ffde000 7eb0a7fe 00000000 kernel32!BaseThreadInitThunk+0xe
0012ffd4 774237be 00469bf2 7ffde000 00000000 ntdll!__RtlUserThreadStart+0x70
0012ffec 00000000 00469bf2 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b
下面崩溃处的源代码。请注意,它挂在 GetMessage 行。
/* Handle messages - until were done */
while (GetMessage(&msg,NULL,0,0)) { /* CRASH POINTS HERE */
MenuWindow = GetAccelerators(&msg);
if (!TranslateAccelerator(MenuWindow.hWnd, MenuWindow.WinAccel, &msg)) {
if ((MenuWindow.hWnd != 0 && MenuWindow.hWnd != hMainWnd) ||
!TransmitFromMain(&msg)) { /* Screen to avoid key translation )*/
TranslateMessage(&msg); /* Translates virtual key codes */
DispatchMessage(&msg); /* Dispatches message to window */
}
}
}
来自windbg的局部变量
hInstance 0x00400000 struct HINSTANCE__ * 0012ff00
hPrevInstance 0x00000000 struct HINSTANCE__ * 0012ff04
lpCmdLine 0x0334efed "-dMapper.msf" 0012ff08
nCmdShowz 0n1 0012ff0c
Alertmsg char [256] "" 0012fdf0
bstatus 0n1 0012fef4
hData 0x045b29c8 0012fbac
hTDC 0xc6013534 struct HDC__ * 0012fccc
i 0n39 0012fdec
lpCtrlData 0x045b29c8 struct ctrldata * 0012fba8
msg struct tagMSG 0012fcb0
hwnd 0x001e0fe4 struct HWND__ * 0012fcb0
message 0x325 0012fcb4
wParam 0 0012fcb8
lParam 0n0 0012fcbc
time 0x9ee0b98 0012fcc0
pt struct tagPOINT 0012fcc4
MsgHdr char [256] "" 0012fcd0
scm struct CHARMETRIC 0012fdd4
sectionname char [256] "MPC" 0012fbb0
任何想法为什么它挂起?我无法获得有关 msg->message 0x325 的任何信息
提前致谢
更多信息和以下问题的答案
感谢您的回复是的,我必须将 GetMessage 循环更改为类似
while ( (ret = GetMessage(&msg,NULL,0,0) != 0 ) {
if (ret == -1)
{
我会这样做
@Lundin 它不是多线程应用程序。
更多关于挂起的信息......挂起主要发生在我们从其他应用程序的 Alt Tab 进入我们的客户端时。虽然它可能随时发生......关于味精0x325可能是什么的任何见解?