2011-03-27 7 views
10

क्या WinDbg में यह निर्धारित करने के लिए कोई तरीका है कि Windows थ्रेड को WaitForSingleObjects या WaitForMultipleObjects जैसे कार्यों द्वारा अवरुद्ध किया गया है?उपयोगकर्ता-मोड डंप के साथ WinDbg में थ्रेड प्रतीक्षा समय निर्धारित करें

मुझे पता है कि यह कर्नेल डीबगिंग में कैसे करें (!thread का उपयोग करके), लेकिन मुझे नहीं पता कि उपयोगकर्ता-मोड डिबगिंग में इसे कैसे किया जाए।

उत्तर

7

WinDbg में, आप !runaway उपयोग कर सकते हैं धागा समय प्राप्त करने के लिए:

!runaway 
!runaway 1 

(उपयोगकर्ता समय)

!runaway 2 

(कर्नेल समय)

!runaway 4 

(बीता हुआ समय)

(आपको इन्हें 0, 1 और 2 के रूप में प्रलेखित किया जाएगा, लेकिन मेरे अनुभव में वे काम नहीं करते हैं। शायद यह WinDbg संस्करण या कुछ पर निर्भर करता है ...)

आप थ्रेड के उपयोगकर्ता और कर्नेल समय को अपने समय से घटाकर निलंबित किए गए समय की गणना कर सकते हैं, लेकिन दुर्भाग्य से मुझे किसी भी तरह से पता नहीं है (कम WinDbg प्लगइन लिखना) WinDbg को आपके लिए ऐसा करने के लिए।

यदि आप WinDbg पर सेट नहीं हैं, तो आप एक ही जानकारी प्राप्त करने के लिए Process Explorer का उपयोग कर सकते हैं। जब आप किसी प्रक्रिया पर राइट-क्लिक करते हैं और गुण संवाद में थ्रेड टैब का चयन करते हैं, तो आपको प्रक्रिया में सभी थ्रेड की एक सूची मिलती है। किसी विशेष थ्रेड का चयन करना अन्य चीजों के साथ समान समय की जानकारी दिखाएगा।

+0

जो मैं वास्तव में जानना चाहता था वह है: चूंकि प्रतीक्षा दिनांक *() फ़ंक्शन द्वारा अवरुद्ध थ्रेड किस दिनांक और समय है? अपरिचित प्रश्न के लिए खेद है; अब मैंने "कितनी देर" "किस तारीख/समय के बाद" बदल दिया है। वैसे भी, आपके उत्तर के लिए बहुत धन्यवाद। –

+0

जहां तक ​​मुझे पता है कि यह संभव नहीं है। बेशक, यदि यह आपका स्वयं का एप्लीकेशन है तो आप किसी चीज़ पर इंतजार करने से पहले वर्तमान समय रिकॉर्ड कर सकते हैं, फिर वैरिएड का उपयोग करने के लिए वैरिएबल का निरीक्षण करें, या इसे लॉग या किसी चीज़ पर प्रिंट करें। –

संबंधित मुद्दे