2014-04-28 8 views
5

यह सुंदर नंगे हड्डियों, सिर्फ कार्यक्रम के लिए जा रहा तो मैं और अधिक जटिल भागों डीबग कर सकते हैं पाने के लिए होती है:वीएस2013 में डीबगिंग करते समय मेरा प्रोग्राम फ़ाइल क्यों नहीं खोल सकता?

//open file 
cout << "Input File Name: "; 
string fileName;  
cin >> fileName; 
ifstream file; 
file.open(fileName, ios_base::in); 
if (!(file.good())){ 
    cout << "File Open Error\n";   
    return 0; 
} 

कार्यक्रम ठीक संकलित करता है। यदि मैं \ Projects \ [इस प्रोजेक्ट] \ Debug \ [program] .exe से डीकग निष्पादन योग्य निष्पादन योग्य करता हूं तो cmd के माध्यम से डबल-क्लिक करके या ब्राउज़ करके, यह फ़ाइल खोल देगा (जो उसी निर्देशिका में संग्रहीत है) और शेष कार्यक्रम अच्छी तरह से hums (जब तक यह छोटी गाड़ी भागों में मिलता है मैं वास्तव में डीबग करना चाहता हूँ, वैसे भी)।

हालांकि, अगर मैं VS2013 के भीतर से 'डिबगिंग प्रारंभ करना' करने का प्रयास करता हूं, तो उपरोक्त विफल रहता है; यह त्रुटि प्रिंट करता है और तुरंत बंद हो जाता है। प्रोग्राम की डीबगिंग मोड में जब प्रोग्राम निष्पादित हो रहा है, तो cmd विंडो शीर्षक क्षेत्र में निर्देशिका दिखाती है, और यह निश्चित रूप से एक ही निर्देशिका है, लेकिन मुझे लगता है कि यह कहीं और फ़ाइल की तलाश में है। मैंने इसे वॉल्यूम रूट पर भी कॉपी करने की कोशिश की, कोई खुशी नहीं। मुझे यकीन है कि यह वीएस के पुराने संस्करणों में ठीक काम करता है, लेकिन हो सकता है कि मैं सिर्फ मस्तिष्क-फटकार कर रहा हूं। कोई विचार?

+0

दृश्य स्टूडियो डीबगर के तहत चल रहे किसी प्रोग्राम के स्टार्टअप के लिए डिफ़ॉल्ट कार्य निर्देशिका * प्रोजेक्ट * निर्देशिका है (जहां आपकी vcprojx फ़ाइल स्थित है)। शीर्षक जो आप देखते हैं वह निष्पादन योग्य का मार्ग है; कामकाजी निर्देशिका नहीं। या तो अपने इनपुट में पूरी तरह से योग्य पथ निर्दिष्ट करें या प्रोजेक्ट सेटिंग्स को अपनी इच्छित निर्देशिका निर्देशिका में बदलें, * फिर * डीबगर में प्रक्रिया को फायर करें। – WhozCraig

+0

जब आप विजुअल स्टूडियो से प्रोग्राम चलाते/डीबग करते हैं, तो वर्तमान निर्देशिका प्रोजेक्ट निर्देशिका है। –

+1

क्योंकि यह माइक्रोसॉफ्ट है। वे डेवलपर्स को बाधित करने और लोगों को कोडिंग करने के बारे में खुफिया जानकारी इकट्ठा करने के लिए सॉफ्टवेयर लिखते हैं। डेवलपर्स को सक्षम करने में उन्हें कोई रूचि नहीं है, अगर उन्होंने अपना एकाधिकार खो दिया है। विजुअल स्टूडियो को अपंग होने के रूप में डिजाइन किया गया है और यह संभवतः एक पर्यावरण वातावरण के रूप में असंभव हो सकता है। मेमोरी लीक को शिकार करने के लिए यहां तक ​​कि किसी भी सीन मेमोरी लीक टूल्स/वाल्ग्रिंड या इलेक्ट्रिक बाड़ सिस्टम भी नहीं हैं। विंडोज़ विकास नरक है। – Owl

उत्तर

5

विजुअल स्टूडियो में प्रोजेक्ट गुणों में, आप वर्तमान निर्देशिका सेट कर सकते हैं जिसमें डीबग किए गए प्रोग्राम को शुरू किया जाए। डिफ़ॉल्ट रूप से, यह .vcxproj फ़ाइल के स्थान पर सेट किया गया है, यानी यह निष्पादन योग्य स्थान का स्थान है।

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

>cd some\random\dir 
>C:\path\to\your\Projects\[this project]\Debug\[program].exe 

यह बिल्कुल उसी तरह विफल हो जाएगा: आप के बजाय कार्यक्रम इन cmd कमांड का प्रयोग शुरू किया है।

डिबगिंग करते समय विजुअल स्टूडियो द्वारा उपयोग की जाने वाली स्टार्टअप निर्देशिका को संशोधित करने के लिए, Project > Properties > Configuration Properties > Debugging > Working Directory पर जाएं। ध्यान दें कि सेटिंग कॉन्फ़िगरेशन-विशिष्ट है (यानी आप प्रत्येक कॉन्फ़िगरेशन के लिए एक अलग स्टार्टअप डीआईआर कर सकते हैं)। यदि आप इसे निष्पादन योग्य वाली निर्देशिका में सेट करना चाहते हैं, तो आप मैक्रो $(OutDir) का उपयोग कर सकते हैं।

शायद अधिमानतः, आप डेटा फ़ाइल को प्रोजेक्ट स्रोत निर्देशिका में ले जाना चाहते हैं, क्योंकि यह एक बिल्ड आर्टिफैक्ट नहीं है।

+0

बहुत बढ़िया, धन्यवाद। मुझे पता था कि इसे ऐसा कुछ आसान होना था, लेकिन Google ने मुझे नीचे जाने दिया। मुझे यकीन है कि मुझे वीएस के पूर्व संस्करणों में ऐसा करने की ज़रूरत नहीं है (या शायद मुझे यह फ़ाइल \ Debug \\ [file] के रूप में देने के लिए पता चला है, जो जानता है ...) वैसे भी, प्राप्त करने के लिए धन्यवाद मुझे इस मस्तिष्क में असफल रहा। – jmassey

+0

@jmassey तो आप फ़ाइलों को कहीं और रखना होगा। डिफ़ॉल्ट कार्यशील निर्देशिका हमेशा '$ (ProjectDir)' रही है, यानी '.vc [x] proj' का स्थान। – Angew

+0

हाँ, मैंने ऊपर एक संपादन जोड़ा; यह हो सकता है कि अतीत में मैंने यह पता लगाया है कि इसे अपने आप कैसे करें।मुझे आधे साल या उससे भी ज्यादा समय तक वीएस को पोक नहीं करना पड़ा, और मैंने आखिरी बार 2010 का इस्तेमाल किया। शायद सभी चमकदार ने मुझे अंधेरा कर दिया। फिर भी धन्यवाद, हालांकि। – jmassey

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