2009-08-27 11 views
18

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

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

अभी, अगर Application.ExecutablePath में बिन रिपोर्ट डीबग या बिन \ रिलीज़ शामिल है, तो मैं बग रिपोर्ट अक्षम कर रहा हूं, लेकिन मुझे लगता है यह पता लगाने का शायद एक और मजबूत तरीका है कि प्रोग्राम वीएस के माध्यम से लोड किया गया था या नहीं।

जाहिर है, हम कुछ प्रीप्रोसेसर मैक्रोज़ के साथ एक अलग निर्माण स्थापित कर सकते हैं, लेकिन सवाल के लिए, मान लीजिए कि यह संभावना नहीं है - मुझे कोड जोड़ने में कोई फर्क नहीं पड़ता है, लेकिन मैं इसे बनाने की कोशिश कर रहा हूं निर्माण प्रक्रिया में सबसे कम संशोधन, यही कारण है कि कमांड लाइन विकल्प एक अंतिम उपाय भी हैं।

यदि यह महत्वपूर्ण है, तो मैं वीएस2003/.NET 1.1 का उपयोग कर रहा हूं।

उत्तर

40

आप अगर यह किसी भी डीबगर (द्वारा स्पष्ट किया @JaredPar) में है निर्धारित करने के लिए यह कर रहे हैं, तो आप अपवाद संचालक में Debugger.IsAttached उपयोग कर सकते हैं।

try 
{ 
    // ... 
} 
catch(Exception ex) 
{ 
    if (!Debugger.IsAttached) 
    { 
     ExceptionHandler.Frob(ex); 
    } 
    else 
    { 
     throw; 
    } 
} 
वैकल्पिक रूप से

:

public static void Frob(Exception ex) 
{ 
    if (Debugger.IsAttached) 
    { 
     Debugger.Break(); 
    } 
} 
+1

यह उन लोगों में से एक है "मुझे नहीं पता कि मैं क्या हूं" मैं देख रहा हूं, लेकिन जब मैं इसे देखता हूं तो मुझे पता चलेगा "जवाब के प्रकार - सही, धन्यवाद! –

+1

सिस्टम। डायग्नोस्टिक्स में बहुत रसदार भलाई है। – user7116

+2

सावधान रहना एक बात यह है कि यह बताएगा कि कोई डीबगर संलग्न है या नहीं, अगर विजुअल स्टूडियो संलग्न है। WinDbg को जोड़ना वही व्यवहार करेगा। – JaredPar

1

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

+0

मैं जितना संभव हो सके बिल्ड/रन प्रक्रिया को संशोधित करने से बचने की कोशिश कर रहा हूं, लेकिन हाँ, आप .NET में कमांड लाइन विकल्प भी पढ़ सकते हैं :) –

2

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

0

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

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