2012-12-16 62 views
0

我試圖調試在Visual Studio中的一個很老的C程序。我是通過線的一些代碼行步,來到一條線DispatchMessage(&msg);我想看看那裏的代碼去下一個,所以我點擊「進入」按鈕,但我並沒有考慮到處理該消息的任何新的代碼,而不是黃色的小箭頭只是一起到下一行的同一頁踩...調試:步入DispatchMessage函數()

這是預期的行爲?我怎樣才能看到DispatchMessage實際上做了什麼? 這可能表明窗口處理程序沒有正確設置?

額外的信息:我是特林調試的任務是鼠標的點擊處理一個特定的窗口。我曾顯示MSG結構,並msg.hwnd是我點擊了(我以前Winspector確認)窗口。 msg.message是513(= WM_LBUTTONDOWN)。

回答

3

這完全是預期的行爲......

DispatchMessage()User32.dll實現的,因此,源代碼是不可用。大多數情況下,您必須將Win32 API調用視爲黑盒子。有時候,這可能會使調試Win32代碼成爲一項挑戰。

請記住,在你的軍火庫一些技巧調試這樣的事情:

  1. 去治療DispatchMessage()作爲一個黑盒子。放置一個斷點在WndProc您希望收到WM_LBUTTONDOWN並繼續調試那裏。

  2. 讓Winspector記錄進入所涉及的所有窗口的消息。這可以幫助確保收到的消息和您所期望的順序。

  3. 如果最壞的情況發生,您可能不得不步入DispatchMessage()或其他API調用,查看其反彙編。大多數時候,沒有什麼好的(但我總是會學到一些東西)。

機會是選項#3沒有必要和你最好將時間花在調試各地DispatchMessage(),而不是在它。