2

我们的程序挂在客户的机器上(主要是在 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可能是什么的任何见解?

4

0 回答 0