私たちのプログラムは、顧客のマシン (ほとんどの場合 Windows 7) でハングします。
プログラムは、別のマシンでサーバーに接続するクライアントです。これは、Win32 プログラミング グラフィカル インターフェイスを備えた C プログラムです。
症状: クライアント アプリケーションをランダムに実行しているときに、突然白っぽくなり、「アプリケーションが応答を停止しました」というダイアログ ボックスが表示され、「アプリケーションを閉じる」、「アプリケーションが応答するのを待つ」などの 2 つのオプションが表示されます。 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が何であるかについての洞察はありますか?