2008-09-18 9 views
5

में डेडलॉक्स का निदान Win32 उत्पादन प्रक्रिया में डेडलॉक के कारण एक स्पष्ट लटकने के लिए चरण और तकनीक क्या हैं। मैंने सुना है कि इस उद्देश्य के लिए WinDbg का उपयोग किया जा सकता है, लेकिन क्या आप कृपया यह सुनिश्चित कर सकते हैं कि यह कैसे पूरा किया जा सकता है?Win32 प्रोग्राम

उत्तर

8

यह post मिलना चाहिए आप पोस्ट के साथ टैग विभिन्न options..Check पर शुरू डिबगिंग ..

debugging deadlocks पर एक और उपयोगी लेख ..

0

आप किस भाषा/आईडीई का उपयोग कर रहे हैं?

नेट में आप एक आवेदन के धागे देख सकते हैं: Debug-> Windows-> धागे या Ctrl + Alt + एच

0

डिबगिंग गतिरोध मुश्किल हो सकता है। मैं आमतौर पर लॉगिंग का कुछ प्रकार करता हूं और देखता हूं कि लॉग कहां बंद हो जाता है। मैं या तो आउटपुटडिबगस्ट्रिंग() का उपयोग कर फ़ाइल या डीबग कंसोल पर लॉग ऑन करता हूं।

4

एक सच्चे डेडलॉक को डिबग करना वास्तव में आसान है, अगर आपके पास स्रोत और मेमोरी डंप (या लाइव डिबगिंग सत्र) तक पहुंच है।

आप जो कुछ करते हैं वह थ्रेड को देखता है, और उन लोगों को ढूंढता है जो किसी प्रकार के साझा संसाधन पर प्रतीक्षा कर रहे हैं (उदाहरण के लिए WaitForSingleObject में प्रतीक्षा कर रहे हैं)। आम तौर पर वहां से बात करना यह पता लगाने की बात है कि दो या दो से अधिक धागे एक-दूसरे को बंद कर चुके हैं, और फिर आपको यह पता लगाना होगा कि किसने लॉक विरासत को तोड़ दिया।

यदि आप आसानी से पता नहीं लगा सकते कि कौन से थ्रेड लॉक हैं, तो प्रत्येक थ्रेड के लिए लॉक चेन का पता लगाने के लिए this post here में दिखाए गए विधि का उपयोग करें। जब आप लूप में जाते हैं, तो लूप में धागे वे हैं जो डेडलॉक होते हैं।

-1

लॉगिंग स्टेटमेंट जोड़कर शुरू करना सबसे अच्छी बात है। आम तौर पर मैं केवल उन साझा संसाधनों के बारे में अनुशंसा करता हूं जो डेडलॉकिंग हैं लेकिन उन्हें सामान्य रूप से जोड़ने से आप उन स्थितियों या उन क्षेत्रों के क्षेत्रों को इंगित कर सकते हैं जिनकी आप अपेक्षा नहीं कर रहे थे। अधिक प्रचारित stackoverflow.com डेटाबेस समस्या वास्तव में log4net होने के लिए बाहर निकला! स्टैकओवरफ्लो टीम ने लॉग 4नेट पर कभी संदेह नहीं किया, और केवल लॉगिंग (विडंबनात्मक) की जांच करके यह दिखाया गया। मैं शुरू में किसी जटिल उपकरण को छोड़ दूंगा, उदाहरण के लिए, WinDgb उनका उपयोग करने के बाद से बहुत सहज ज्ञान युक्त IMHO नहीं है।

1

यदि आप बहुत आलसी हैं, तो आप एप्लिकेशन सत्यापनकर्ता स्थापित कर सकते हैं, फिर आपको मॉड्यूल जोड़ सकते हैं और मूल परीक्षण से केवल "ताले" का चयन कर सकते हैं। तो आप किसी भी डीबगर के तहत अपना आवेदन चला सकते हैं।
यदि कोई महत्वपूर्ण अनुभाग डेडलॉक आपको तुरंत कारण ढूंढने के साथ होता है।