2009-09-02 15 views
13

मैं विजुअल स्टूडियो डीबगर के तहत चल रहे .NET अनुप्रयोग के लिए वर्तमान निर्देशिका कैसे पा सकता हूं?विजुअल स्टूडियो डीबगिंग सत्र के दौरान वर्तमान निर्देशिका ढूँढना?

अद्यतन 1। स्पष्ट होने के लिए: मैं कोड को बदलना नहीं चाहता हूं या प्रोग्राम में जानकारी प्राप्त नहीं करना चाहता हूं - मैं बस डीबग किए गए एप्लिकेशन के बारे में जानकारी प्राप्त करना चाहता हूं।

एक .NET Windows Forms आवेदन (मिश्रित VB.NET और सी #) डिबगिंग जबकि मुझे यकीन है कि जो स्थान से एक एक्सएमएल फ़ाइल होने से पढ़ा गया था नहीं था। मुझे उम्मीद है कि वर्तमान निर्देशिका एप्लिकेशन की निर्देशिका होगी। हालांकि, प्रोसेस एक्सप्लोरर, में प्रक्रिया परिणाम के लिए गुणों का उपयोग करके:

डी: \ Program Files (x86) \ माइक्रोसॉफ्ट विजुअल स्टूडियो 9.0 \ Common7 \

(सही पर क्लिक करें प्रक्रिया/गुण/टैब छवि/वर्तमान निर्देशिका)।

डी:: \ dproj \ DTASCall \ DTASuperCharge \ बिन \

प्रोसेस एक्सप्लोरर का मुख्य ध्यान में रखते हुए प्रक्रिया पर कर्सर होवर करने के लिए एक अलग परिणाम (स्क्रीनशॉट के लिए नीचे देखें) से पता चला

सही क्या है?

उम्मीद वर्तमान निर्देशिका,

डी शुरू आवेदन स्टैंडअलोन प्रदर्शित करता है: \ dproj \ DTASCall \ DTASuperCharge \ बिन प्रोसेस एक्सप्लोरर प्रक्रिया गुण विंडो में \


एनोटेट प्रोसेस एक्सप्लोरर का स्क्रीन-शॉट:

Alt text http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

उत्तर

4

अपने कोड के भीतर, समारोह,

System.IO.Directory.GetCurrentDirectory() 

फोन डिफ़ॉल्ट रूप से जब तक आप की डिबग गुण बदल दिया है आपकी प्रोजेक्ट, वर्तमान निर्देशिका आपकी प्रोजेक्ट की बिन \ डीबग निर्देशिका के रूप में शुरू होगी (जहां से .exe चलाता है)।

+0

वास्तविक प्रोग्राम द्वारा चलने का आपका क्या मतलब है? जब स्क्रीनशॉट लिया गया था तो कार्यक्रम को ब्रेकपॉइंट पर रोक दिया गया था। –

+0

हमम, मैं देखता हूं कि आपका क्या मतलब है। मैं .vshost के बारे में गलत था - मैंने अभी एक ही चीज़ की जांच की है और procexp मेरी वर्तमान कार्यशील निर्देशिका को बिना किसी समस्या के ट्रैक करता है। System.IO.Directory.GetCurrentDirectory() के आउटपुट की तुलना करने का प्रयास करें - डिफ़ॉल्ट प्रोजेक्ट सेटिंग्स के साथ यह आपके एप्लिकेशन की bin \ Debug निर्देशिका होना चाहिए। यदि आप जिस XML फ़ाइल को पढ़ने की कोशिश कर रहे हैं वह एक प्रोजेक्ट आइटम है, तो बिल्ड एक्शन प्रॉपर्टी को "सामग्री" पर सेट करना और आउटपुट निर्देशिका संपत्ति को कॉपी करना सुनिश्चित करें। वर्तमान डीआईआर की बजाय आपके आवेदन की मूल निर्देशिका से पढ़ने के लायक भी हो सकता है। – Richard

+0

डीबग पेज पर फ़ील्ड "वर्किंग डायरेक्टरी" खाली है। लेकिन संकलन पृष्ठ पर फ़ील्ड "बिल्ड आउटपुट पथ" में "bin \" है। क्या यह खाली होना चाहिए? यह प्रोजेक्ट 2003 में विजुअल स्टूडियो द्वारा बनाया गया था और उसके बाद से दो विजुअल स्टूडियो अपडेट्स के माध्यम से किया गया है। वर्तमान में एप्लिकेशन बिन निर्देशिका से शुरू होता है, बिन/डीबग –

22

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

कोड में वर्तमान कार्यशील निर्देशिका निर्धारित करने के लिए या एक ब्रेकप्वाइंट में तत्काल विंडो में,

System.IO.Directory.GetCurrentDirectory() 
+1

तत्काल विंडो के लिए: यह नहीं है "डीबग.प्रिंट (System.IO.Directory.GetCurrentDirectory())"? –

+2

तत्काल विंडो के लिए वैकल्पिक: मेनू डीबग/क्विकवॉच/<अभिव्यक्ति फ़ील्ड में प्रवेश करें>/पुनर्मूल्यांकन दबाएं। या नियमित घड़ी विंडो के नाम कॉलम की अंतिम पंक्ति में दर्ज करें, उसके बाद रिटर्न कुंजी। –

+4

या तत्काल विंडो में, आप हमेशा "? System.IO.Directory.GetCurrentDirectory()" –

-3

सबसे अच्छा तरीका है WinDbg (विंडोज डिबगर) में आवेदन को चलाने के लिए है की कोशिश, तो प्रक्रिया में संलग्न और !handle कमांड चलाएं। प्रत्येक खुली फ़ाइल में एक संबद्ध हैंडल होगा।इसी प्रक्रिया के लिए सभी हैंडल डंप करके, आप संबंधित फ़ाइल पथ देखेंगे।

!handle 0 f process-id 

अपनी प्रक्रिया आईडी के मूल्य के साथ प्रक्रिया आईडी बदलें:

यहाँ एक उदाहरण है। प्रक्रिया आईडी के स्थान पर आप प्रक्रिया पते का भी उपयोग कर सकते हैं। यदि यह फ़ाइल ऑब्जेक्ट नहीं दिखाता है, तो फ़ाइल हैंडल पहले ही बंद कर दिया गया है। इस मामले में आपको हैंडल का पता लगाने की जरूरत है। यह !htrace कमांड के साथ किया जा सकता है।

+0

फिलिप रिक का पद नीचे सही उत्तर है: "System.IO.Directory.GetCurrentDirectory()" –

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