मैं वीबी 6 में निम्नलिखित सी कोड के समान कुछ कैसे कर सकता हूं?डीबग मोड?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
मैं वीबी 6 में निम्नलिखित सी कोड के समान कुछ कैसे कर सकता हूं?डीबग मोड?
#ifdef _DEBUG_
// do things
#else
// do other things
#end if
यह आपके द्वारा उपयोग की जाने वाली अन्य भाषाओं के समान ही है। वाक्य रचना इस तरह दिखता है:
#If DEBUG = 1 Then
' Do something
#Else
' Do something else
#End If
यह याद रखना महत्वपूर्ण है, तो आप सिर्फ याद रखें कि वाक्य रचना वास्तव में वीबी 6 में अन्य प्रवाह नियंत्रण बयानों के समान ही है, सिवाय इसके कि संकलन समय सशर्त, एक पाउंड के साथ शुरू आसान है साइन (#
)।
चाल वास्तव में DEBUG
(या जो कुछ भी) निरंतर परिभाषित कर रही है क्योंकि मुझे पूरा यकीन है कि डिफ़ॉल्ट रूप से परिभाषित नहीं किया गया है।
प्रत्येक स्रोत फ़ाइल के शीर्ष पर लगातार परिभाषित करने के लिए #Const
कीवर्ड का प्रयोग करें: वहाँ यह करने के दो मानक तरीके हैं। इस तरह से परिभाषित परिभाषा पूरे स्रोत मॉड्यूल में मान्य है। यह कुछ ऐसा दिखाई देगा:
#Const DEBUG = 1
प्रोजेक्ट की गुणों में निरंतर सेट करें। यह एक निरंतर परिभाषित करेगा जो पूरे प्रोजेक्ट में मान्य है (और शायद आप "डीबग" मोड संकेतक के लिए क्या चाहते हैं)।
ऐसा करने के लिए, "प्रोजेक्ट गुण" संवाद बॉक्स के "बनाओ" टैब पर "सशर्त संकलन स्थिरांक" पाठ बॉक्स में निम्नलिखित की तरह कुछ दर्ज करें:
DEBUG = 1
आप कर सकते हैं
DEBUG = 1 : VERSION2 = 1
:
) के साथ उनमें से प्रत्येक को अलग करके इस संवाद में कई स्थिरांक को परिभाषित
याद रखें कि किसी भी स्थिर है जो नहीं परिभाषित 0.
कोड़ी सशर्त संकलन बारे में बताया गया है माना जाता है। मैं यह जोड़ना चाहता हूं कि यदि आप आईडीई पर डिबगिंग करते समय अलग-अलग व्यवहार चाहते हैं (उदा। अपनी खुद की त्रुटि हैंडलिंग बंद करें ताकि आईडीई जाल त्रुटियों को बंद कर दें) तो आप सशर्त संकलन की आवश्यकता नहीं है। आप इस तरह रनटाइम पर आईडीई का पता लगा सकते हैं।
On Error Resume Next
Debug.Print 1/0
If Err=0 then
'Compiled Binary
Else
'in the IDE
End if
यह काम करता है क्योंकि डीबग.प्रिंट संकलित EXE में छोड़ा जाता है।
यह एक अच्छी टिप है, लेकिन शायद आप किसी बिंदु पर 'त्रुटि फिर से शुरू करें' बंद करना चाहते हैं, आह? :-) –
क्यों? त्रुटि फिर से शुरू करें अगला सबसे अच्छा त्रुटि हैंडलिंग रणनीति है - उपयोगकर्ता को इस तरह से कोई त्रुटि नहीं दिखाई देती है :) ठीक है, कम से कम जब तक वह वास्तविक डेटा नहीं देखता है ... अधिक गंभीरता से, हम केवल वैश्विक चर का उपयोग कर रहे हैं (inEXE) और कार्यक्रम शुरू होने पर इसे प्रारंभ करना; डीबग और ट्रेस ध्वज के लिए एक ही है। हां, यह दृष्टिकोण प्रीप्रोसेसर निर्देशों का उपयोग नहीं करता है, लेकिन रन-टाइम ओवरहेड (विभिन्न झंडे की जांच से) डेटाबेस पहुंच या यहां तक कि सरल यूआई ड्राइंग की तुलना में नगण्य है। – Arvo
आप वैश्विक झंडा घोषित करना बेहतर होगा, और उप मेन की शुरुआत की ओर कहीं भी यह जांच करें। इस तरह आप न्यूनतम ओवरहेड के साथ डीबग की जांच कर सकते हैं। –
MarkJ रूप में एक ही प्रभाव को प्राप्त करने के लिए, लेकिन त्रुटि हैंडलिंग के साथ, आप निम्न कोड का उपयोग कर सकते हैं।
Public Function GetRunningInIDE() As Boolean
Dim x As Long
Debug.Assert Not TestIDE(x)
GetRunningInIDE = x = 1
End Function
Private Function TestIDE(x As Long) As Boolean
x = 1
End Function
जब आप आईडीई के भीतर से चल रहे हैं, वहाँ एक समारोह (जो हास्यास्पद छोटा है) को कॉल करने का एक अतिरिक्त भूमि के ऊपर हो जाएगा। संकलित होने पर, यह एक साधारण संख्या तुलना में मूल्यांकन करता है।
+1 के बाद किया जाता है। यह वास्तव में काम पर हम वास्तव में उपयोग करते हैं, लेकिन मैंने उस कोड को पोस्ट नहीं किया है, क्योंकि यह मेरे नियोक्ता से संबंधित है। – MarkJ
यह मेरा छोटा और स्थिर कोड है। मुझे लगता है कि यह सशर्त स्थिरांक से बेहतर है, क्योंकि आपको इसे हर जटिल समय में बदलने की जरूरत नहीं है।
Public Function InIDE() As Boolean
On Error Resume Next
Debug.Print 0/0
InIDE = Err.Number <> 0
End Function
+1 सर्वश्रेष्ठ उत्तर क्योंकि यह छोटा और प्यारा है और जब भी आपको पुन: संकलित करने की आवश्यकता होती है तो परियोजना गुणों को बदलने की आवश्यकता नहीं होती है। – Keith
यह शानदार है, बस एक सवाल लग रहा है, जब आप exe के रिलीज़ संस्करण संकलन मैं तुम्हें डीबग = 0 सेट करना होगा या वीबी ऑटो यह पता लगाता है यह सोचते हैं रहा हूँ और किसी भी तरह सुनिश्चित करने के लिए डिबग सामान है का प्रबंधन करता है संकलित नहीं किया गया है (मैं इसे इकट्ठा करने में सक्षम होने के लिए कंपाइलर में आंतरिक रूप से हार्डकोड किया जाना चाहिए, असंभव लेकिन बस सुनिश्चित करना चाहता था)। तो रिलीज से पहले बस DEBUG = 0 सेट करें और आप संकलित करने के लिए तैयार हैं? –
@Erx: नहीं, कंपाइलर द्वारा कोई ऑटो-डिटेक्शन नहीं किया गया है। 'DEBUG' प्रतीक स्वचालित रूप से परिभाषित नहीं किया गया है, आपको इसे स्वयं करना है। तो "रिलीज" मोड में स्विच करना एक मैन्युअल कार्रवाई है। हां, इस उदाहरण में, आप संकलन-समय 'DEBUG' स्थिरांक को 0 –
में बदल देंगे यदि आप DEBUG = 1 को अपने कोड सामान्य घोषणा मॉड्यूल क्षेत्र में डाल देंगे तो क्या होगा ...? क्या यह अभी भी काम करेगा या असफल होगा? –