2012-05-10 11 views
9

में ट्रिगर नहीं करता है, मुझे लगता है कि डिबग। एस्र्ट मेट्रो ऐप्स में ट्रिगर नहीं होता है, हालांकि, अगर यह प्रोजेक्ट कंसोल या विनफॉर्म जैसा पारंपरिक है, तो यह ट्रिगर होता है। और हाँ, मैं डीबग मोड में हूं।Debug.Assert (false) Win8 मेट्रो ऐप्स

क्या यह एक सेटिंग विजुअल स्टूडियो (11 बीटा) में ठीक से सेट नहीं है? या Debug.Assert मेट्रो ऐप्स में अक्षम होने का इरादा है?

मुझे पता है कि मेट्रो ऐप्स के निष्पादन के दौरान कई अपवाद निगल गए हैं, लेकिन डीबग.एस्र्ट इतना आसान है कि मैं इस कारण से नहीं सोच सकता कि इसे अक्षम क्यों किया जाना चाहिए।

उत्तर

2

यह करता ट्रिगर, आउटपुट विंडो में लग रहे हो। यह आपको स्वचालित रूप से यह पूछने के लिए संकेत नहीं देता है कि क्या आप डीबगर ब्रेक चाहते हैं और इस प्रकार मोटरिंग रखता है।

DefaultTraceListener.AssertUIEnabled गुण गलत है। यह एक कार्यान्वयन समस्या है, मेट्रो यूआई के शीर्ष पर एक संदेश बॉक्स प्रदर्शित नहीं कर सकता है। जो वास्तव में काम करता है लेकिन मॉनिटर डेस्कटॉप पर स्विच करता है, बहुत अवांछनीय है जब आप हल करने के लिए हार्ड नंबर पर क्लिक करना पसंद करते हैं और टोडो सूची में कोई संदेह नहीं है। आप संपत्ति को आसानी से सेट करने के लिए आसानी से नहीं पहुंच सकते हैं, यह मेटाडेटा से पहुंच योग्य नहीं है। फिलिप का कामकाज आधा सभ्य लगता है।

+0

शायद यह पोस्ट मेट्रो के वर्तमान संस्करण से पहले किया गया था, लेकिन डिफ़ॉल्ट ट्रेस लिस्टर मेट्रो ऐप्स के लिए अब मौजूद नहीं है। – James

+0

@ जेम्स - यही वह है "यह मेटाडेटा से पहुंच योग्य नहीं है" का अर्थ है। और नहीं, यह वास्तव में VS2010 आरसी में समान व्यवहार करता है। अपने लिए प्रयास करना आसान है, कृपया उत्तर देने से पहले ऐसा करें। –

+0

मैंने इसे आजमाया और DefaultTraceListener.AssertUIEnabled को कोड में सेट नहीं किया जा सकता क्योंकि यह अस्तित्व में नहीं है। – James

6

एक बग की तरह लगता है। मैं अपना खुद का जोरदार तरीका तैयार करूंगा। कुछ की तरह:

[Conditional("DEBUG")] 
public static void Assert(bool condition) 
{ 
    if (!condition) 
     System.Diagnostics.Debugger.Break(); 
} 
+0

मेरे लिए काम करता है :) – kennyzx

0

वीएस2013 में, WinRT में F # के साथ एक ही समस्या है। assert कथन, जो System.Diagnostics.Debug.Assert के लिए उपनाम है, अपवाद नहीं बढ़ाता है, इसलिए जब तक आप आउटपुट विंडो नहीं देख रहे हैं तो आपके दावे बिना किसी ध्यान दिए विफल हो सकते हैं। यहां तक ​​कि यदि आप देख रहे हैं, तो उस स्थान को ढूंढना मुश्किल है जहां दावा उठाया गया था।

namespace MyProj.Infrastructure 

module Diagnostics = 

    let Assert condition = if not condition then 
           System.Diagnostics.Debugger.Break() 

मैं क्योंकि यह जगह दावे विफल रहता है पर डिबगर बंद हो जाता है एक अपवाद को ऊपर उठाने से अधिक Debugger.Break चुना है:

मैं इस प्रकार फ़िलिप के सुझाव का पालन किया और एक छोटी उपयोगिता लिखा था,। हालांकि, अपवाद उठाना एक स्वीकार्य विकल्प है।

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

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