簡體   English   中英

Windbg闖入需要很長時間

[英]Windbg break-in takes very long time

我想捕獲一個有時會停止響應幾分鍾的應用程序的堆棧跟蹤。

當應用程序停止響應時,Windows桌面也將停止響應鼠標單擊,盡管當時其他一些已經在運行的應用程序運行良好(例如,windbg運行正常,ProcessExplorer刷新其屏幕,但不響應鼠標事件)。 盡管應用程序沒有響應,但實際上占用了一個CPU內核的80%。 這就是為什么我想獲得一個堆棧跟蹤的原因。

行為異常的應用程序通常需要大約2-3分鍾才能完成其奇怪的工作,或者如果按Ctrl + Esc,它將立即響應(當然開始菜單也會打開...)

我將WinDbg附加到行為異常的應用程序上,當我發出Break命令時,只有在應用程序開始再次響應之前,闖入才會發生。

據我了解,入侵實際上創建了一個遠程線程,該線程不久將調用DbgBreakPoint

是什么導致調試器的線程無法執行?

編輯 :首先感謝您的幫助!

我還認為這可能是由於設備驅動程序錯誤或在某個地方安裝了系統范圍內的鈎子引起的。

我當時正在考慮啟用內核調試功能,並從內核獲取有問題的線程的堆棧跟蹤信息,或者啟用手動藍屏觸發器來產生轉儲,然后再進行查看。

Process Explorer和Process Monitor不會顯示任何有趣的內容。 當觸發錯誤時,它們也變得不可用(更新其窗口,但對鼠標或鍵盤無響應)。

EDIT2 :背景信息:應用程序使用QT,OpenGL和DirectSound並在Windows 7 SP1 x64上運行我目前懷疑圖形部分。

奇怪的是,如果采取了系統范圍的鎖定(如GDI鎖定),這將阻止繪制其他Windows,但這不會發生。 在同一台計算機上的WinDbg可以正常工作。 ProcessExplorer更新,但是沒有鼠標單擊,Desktop更新,但是沒有鼠標單擊。

我目前附有一個內核調試器...

EDIT3 ETW對調試最有用。 事實證明,Qt的主事件處理循環變得瘋狂。 在緊密循環中調用PeekMessage和MsgWaitForMultipleObjectsEx(超時為0)。 那就是高CPU使用率的來源。 看起來該應用當時正在生成/獲取大量消息。 但是要查看消息是什么並不容易(或者我不知道如何訪問ETW中的函數參數)。 使用調試器也無濟於事,但是,由於QT的事件循環中有一個斷點,因此使我相信WM_TIMER消息是罪魁禍首。

考慮到桌面在這段時間內也表現不佳,這聽起來好像您的應用並不一定表現異常,而只是加重了其他地方的錯誤(例如,在設備驅動程序中或一些偽劣的反惡意軟件代碼已將其自身注入到其他進程中)。 應用程序中的堆棧跟蹤可能會或可能不會非常明顯。

如果問題很容易重現,則可以在應用程序“中間”的某個位置設置斷點,然后查看問題是在此之前還是之后發生。 然后移動斷點,直到找到最終執行您的應用的最后一條指令。 弄清楚您的應用程序觸發了此行為的行為,可能會為正在發生的事情提供線索。

另一個選擇是嘗試使用一些系統范圍的調試工具。 首先,我會在“事件查看器”中查看峰值,以查看在機器出現混亂時附近是否有可疑的錯誤或警告事件發布。 然后,我嘗試使用Sysinternal的Process Monitor或Process Explorer之類的工具來更好地了解正在發生的事情。 您也可以嘗試使用ETW捕獲整個系統的跟蹤信息,以便事后研究。 (ETW可能很難使用,因此請查看Bruce Dawson的UIforETW。)

使用ETW查找原因。 安裝Windows Performance Toolkit(Win10 v1511 SDK的一部分: https ://go.microsoft.com/fwlink/p/?LinkID = 698771(這是Win7中可用的最新版本)),運行WPRUI.exe,選擇“ CPU Usage然后點擊Start

捕獲掛起后,單擊“ Save 等待WPRUI完成,在WPA中打開ETL,在WPA中設置並加載調試符號

拖放“ CPU Usage (Precise)圖以分析窗格,並為您的進程尋找WAIT (µs) max ,以查看長時間掛起並擴展堆棧以查看發生的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM