अक्सर मुझे विंडोज़ पर क्रैशिंग सी ++ प्रोग्राम डीबग करना पड़ता है जहां मैं क्रैश को पुन: उत्पन्न कर सकता हूं, लेकिन यह निर्धारित करना मुश्किल है कि कोड में निर्देशों के अनुक्रम में क्रैश का कारण बनता है (उदाहरण के लिए क्रैशिंग थ्रेड की एक और थ्रेड ओवरराइटिंग मेमोरी)। यहां तक कि एक कॉल स्टैक भी उस मामले में मदद नहीं करता है। आम तौर पर मैं स्रोत कोड के अनुभागों पर टिप्पणी करके क्रैश कारण को कम करने का सहारा लेता हूं, लेकिन यह बहुत कठिन है।क्रैश से पहले तुरंत निष्पादित लाइनों या निर्देशों को लॉग या रीप्ले कैसे करें
क्या किसी को विंडोज के लिए एक उपकरण पता है जो किसी भी दुर्घटना से ठीक पहले सभी धागे में निष्पादित अंतिम कुछ स्रोत कोड लाइनों या मशीन कोड निर्देशों की रिपोर्ट या दोबारा चला सकता है? अर्थात। जीडीबी की रिवर्स डीबगिंग क्षमता या म्यूटेक बगट्रैपर जैसे कुछ (जो अब उपलब्ध नहीं है) की तरह कुछ। मैं एक रिलीज और स्थिर उपकरण की तलाश में हूं (मुझे सॉफ़्टवेयर वेरिफ़ी के 'बग वैलिडेटर' और हेक्सरे के आईडीए प्रो 6.3 ट्रेस रीप्लेयर के बारे में पता है, जिनमें से दोनों अभी भी बंद बीटा प्रोग्राम में हैं)।
जो मैंने पहले ही कोशिश की है वह WinDbg ट्रेस कमांड wt
और ta @$ra
था, लेकिन दोनों कमांडों का नुकसान यह है कि वे कुछ सेकंड के बाद स्वचालित रूप से बंद हो जाते हैं। मुझे ट्रेस आदेशों की आवश्यकता होती है जो क्रैश होने तक चलती हैं, और यह चल रहे प्रोग्राम के सभी धागे का पता लगाती है।
नोट: मैं कर रहा हूँ नहीं एक विशेष समस्या को ठीक करने, gflags, pageheap, मेमोरी सत्यापनकर्ता, शुद्ध, आदि मैं का पता लगाने या कम से पुनः चलाने के लिए जारी किया गया है और स्थिर उपकरण रहा हूँ की तरह डिजाइन एक डिबग उपकरण की तलाश में निर्देश स्तर।
बस अपना कोड डीबगर में चलाएं और इसे आपको स्रोत डू में स्थान को इंगित करना चाहिए जो क्रैश को ट्रिगर करता है। –
@ एएलएस: दुर्घटना का स्थान ढूंढना आम तौर पर कोई समस्या नहीं है; समस्या यह है कि * क्यों * दुर्घटना हुई है निर्धारित करने के लिए। उदाहरण के लिए, एक क्रैश हो सकता है क्योंकि किसी अन्य थ्रेड ने क्रैशिंग थ्रेड के मेमोरी क्षेत्रों को ओवरराइट कर दिया है (उदा। अस्थायी रूप से ढेर में या स्टैक क्षेत्र में लिखते हैं)। फिर, प्रोग्राम द्वारा निष्पादित अंतिम कुछ पंक्तियों या निर्देशों को देखना वास्तव में उपयोगी होगा ताकि यह निर्धारित किया जा सके कि किस धागे ने दूषित स्मृति क्षेत्र में कुछ लिखा है। मैंने यह स्पष्ट करने के लिए ऊपर दिए गए मेरे प्रश्न को अनुकूलित किया है। –
संभावित डुप्लिकेट [पीछे की ओर डीबगिंग] (http://stackoverflow.com/questions/221806/debugging-backwards) – Ferruccio