2010-09-18 8 views
5

मैंने नीचे कोड का उपयोग किया और F10 दबाकर विजुअल स्टूडियो 2008 में डीबग करने का प्रयास किया।#लाइन नियंत्रण का उपयोग किया जाता है जब डीबगर का अजीब व्यवहार

//test.cpp 
#include<iostream> 
using namespace std; 

int main(void) 
{ 
#line 100 "test.cpp" 
    cout<<"Inside main()"<<endl; 
    return 0; 
} 

नीचे डीबगर स्क्रीन शॉट है।

alt text

#line 100 संकलक बताता 100 लाइन के लिए अपनी अगली पंक्ति प्राप्त करने के लिए जाने के लिए। जैसा कि 100 वीं पंक्ति मौजूद नहीं है, यह स्क्रीनशॉट में दिखाए गए मुख्य कार्य के बाहर जाता है। यदि मैं F10 के साथ कोड डीबग करने का प्रयास करता हूं, तो नियंत्रण कभी भी मुख्य फ़ंक्शन पर वापस नहीं आता है। यह मुख्य कार्य के बाहर पॉइंटर को दिखाता रहता है भले ही यह मुख्य() को निष्पादित कर रहा हो।

तो मैं test.cpp के स्थान पर अन्य फ़ाइल का नाम देना, सूचक है कि फाइल करने के लिए चला जाता है, लेकिन यह वापस नहीं आती है

किसी भी विचार test.cpp क्यों डिबगर इस तरह बर्ताव कर रही है?

+0

संक्षिप्त उत्तर: #line का उपयोग न करें जब तक कि आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं :- डी –

उत्तर

8

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

जो आपने यहां नहीं किया है, आप निर्देश में बकवास जानकारी दे रहे हैं। और जब आप डीबग करते हैं तो स्पष्ट रूप से बकवास परिणाम मिलते हैं। गिगो, कचरा, कचरा बाहर। निर्देश हटाएं।

+1

+1 - जिस मामले में मैंने यह देखा है, वह है जहां सी ++ पार्सर जनरेटर को मेटाकोड इनपुट से संबंधित कोड मेटाकोड में मूल रेखा संख्याओं के संदर्भ में संदर्भ शामिल हैं। –

1

निर्देश नियंत्रण के वास्तविक प्रवाह को परिवर्तित नहीं करता है। यह संकलन के दौरान संकलक द्वारा उत्पन्न आउटपुट को बदल देता है। docs पढ़ें - क्या यह समझाता है कि आप ऊपर वर्णित व्यवहार की अपेक्षा क्यों करेंगे?

C# के लिए डीबगर से कोड की छिपाने के संदर्भ में संदर्भ है लेकिन यह अभी भी नियंत्रण के अपेक्षित प्रवाह को नहीं बदलता है।

दोनों भाषाओं में आपको कोड की आवश्यक अगली पंक्ति चुनने के बाद "Set Next Statement" का उपयोग करके मैन्युअल रूप से निष्पादन प्रवाह को बदलना होगा। वर्तमान दायरे के बाहर निष्पादित किए जाने वाले कोड की अगली पंक्ति सेट करने से प्रोग्राम खराब हो सकता है - संदर्भित दस्तावेज़ों में और चेतावनी भी हैं।

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