2011-05-24 23 views
5

मैं डीबगिंग (विजुअल स्टूडियो 2008 में) एक उपयोगिता जिसे मैंने सी ++ में लिखा है। मेरी धीमी मशीन के साथ भारी इनपुट फाइलों का संयोजन करना और उस बिंदु तक पहुंचने में 6 घंटे का समय लग सकता है जहां मुझे अनियमितताओं के लिए प्रोग्राम निष्पादन देखने की आवश्यकता है।बचत कार्यक्रम स्थिति (दृश्य स्टूडियो 2008)

मैं शायद यहां स्ट्रॉ पर पकड़ रहा हूं, लेकिन क्या किसी को फीचर या प्लगइन या विजुअल स्टूडियो के भीतर कुछ या किसी ऐसे प्रोग्राम की जानकारी है जहां मैं प्रोग्राम निष्पादन स्थिति को सहेज सकता हूं ताकि मैं उस समय को बाईपास कर सकूं जहां मैं इसे प्राप्त कर सकता हूं होने की जरूरत?

+0

मुझे आशा है कि आपने [यूनिट परीक्षण] (http://en.wikipedia.org/wiki/Unit_testing) के बारे में सुना होगा? बेशक – Xeo

+0

। कार्यक्षमता का परीक्षण करने के लिए स्व-लगाए गए परीक्षण मामलों से निपटने और 1.8 गीगा लाइव डेटा के लायक दो अलग जानवर हैं – basil

उत्तर

5

मुझे ऐसी चीज करने के लिए विजुअल स्टूडियो के भीतर संभावनाओं की जानकारी नहीं है, लेकिन अगर आपको कुछ भी नहीं मिल रहा है तो मैं वर्चुअल मशीन का उपयोग करने और मशीन की स्थिति को सहेजने का प्रयास करूंगा। यह शायद बहुत धीमा हो जाएगा लेकिन लंबे समय तक मदद कर सकता है। गुड लक

+1

यह विचार आधा बुरा नहीं है, मुझे लगता है कि यह संभवतः "प्रोग्राम स्थिति को सहेजने" के करीब है। – Xeo

-1

आप की जरूरत क्या एक conditional breakpoint है ... अधिक जानकारी के लिए इस यूआरएल देखें:

http://msdn.microsoft.com/en-us/library/7sye83ce%28v=VS.90%29.aspx

विचार आप जानते हैं कि स्थिति सत्य हैं क्या ब्रेकप्वाइंट वैध बनने के लिए है, तो जब वे स्थितियां सत्य होती हैं तो ब्रेकपॉइंट ट्रिगर होगा, निष्पादन को रोक देगा। फिर आप सुबह के साथ आ सकते हैं और कोड के माध्यम से कदम उठाना शुरू कर सकते हैं।

यदि आप DO एक सटीक बिंदु है कि आप एक प्रोग्राम ब्रेक प्वाइंट डेबगब्रैक() में ब्रेक का कारण बनना चाहते हैं तो एक ब्रेक प्वाइंट अपवाद फेंक दिया जाएगा। विजुअल स्टूडियो डीबगर इसे पकड़ लेगा और उस बिंदु पर निष्पादन रोक देगा।

वैकल्पिक रूप से, gflags सक्षम करें ADPlus के साथ प्रोग्राम चलाएं और उस कोड के बिंदु पर जो आपको लगता है कि समस्या ने अपवाद को फेंक दिया है जो संभाला नहीं गया है। प्रोग्राम क्रैश होने दें और एडीप्लस प्रक्रिया मेमोरी का पूर्ण क्रैश डंप उत्पन्न करेगा। तथ्य यह है कि आपके पास gflags सक्षम था, इसका मतलब है कि आपको आसान डिबगिंग के लिए उनके आसपास अच्छी सीमाओं के साथ मेमोरी आवंटन (0xCDCDCDCD) मिलेगा।

अंत में आप भी Microsoft से DbgHelp.dlllibrary का उपयोग एक मिनी डंप (के रूप में समाधान ऊपर जरूरत पर जोर देता एक दुर्घटना के बिना) जो प्रोग्राम के रूप में जानकारी के विभिन्न स्तरों पर कब्जा कर सकते हैं उत्पन्न करने के लिए कर सकते हैं। जो फ़ंक्शन आप चाहते हैं वह MiniDumpWriteDump है। आप पैरामीटर का उपयोग कर एक सामान्य मिनी-डंप या पूर्ण मेमोरी डंप लिख सकते हैं। यदि संभव हो तो यह एक अलग प्रक्रिया से किया जाना चाहिए (आप अपनी प्रक्रिया में हैंडल का इंतजार कर सकते हैं)।

+0

मूल रूप से मैं अभी क्या कर रहा हूं। रात में देर से निष्पादन शुरू करें, जब मैं कार्यालय में जाता हूं तो इसे जांचें। इसे फिर से शुरू करें, प्रतीक्षा करें और अन्य चीजें करें, दिन के अंत में फिर से जांचें और फिर इसे शुरू करें और बाद में घर पर रिमोट करें ताकि प्रक्रिया को जांच और दोहराया जा सके। – basil

+2

मामूली नकारात्मकता है हालांकि यह स्थिति परिमाण के क्रम से धीमी निष्पादन को धीमा कर देती है, इसलिए उन 6 घंटे 24 हो सकते हैं। यदि आपके पास उस कोड में कोई विशेष बिंदु है जिसे आप किसी शर्त तक पहुंचने के लिए संलग्न करना चाहते हैं तो मुझे लगता है कि यह है 'जबकि (सत्य) नींद() को बेहतर रखना;' टाइप लूप ताकि आप सुबह –

+0

@ बेसिल में मिलने पर डीबगर के साथ तोड़ सकें यदि आपके पास एक सटीक बिंदु है जिसे आप बनाना चाहते हैं आप पर एक प्रोग्रामेटिक ब्रेक पॉइंट 'डीबगब्रैक()' में डाल सकते हैं जो ब्रेक पॉइंट अपवाद फेंकने का कारण बनता है।विजुअल स्टूडियो डीबगर इसे पकड़ लेगा और उस बिंदु पर निष्पादन रोक देगा। – Dennis