我们的程序挂在客户的计算机上(主要在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->消息0x325
的任何信息提前致谢
以下问题的更多信息和答案
感谢您的回复 是的我必须将GetMessage循环更改为
while ( (ret = GetMessage(&msg,NULL,0,0) != 0 ) {
if (ret == -1)
{
我会这样做
@Lundin它不是一个多线程应用程序。
有关Hang的更多信息......当我们将其他应用程序中的Alt Tab添加到我们的客户端时,就会发生Hang。虽然它可能随时发生...... 有关msg 0x325可能是什么的任何见解?