यह एक अच्छा सवाल है और यह एक बहुत ऊपर आता है। लेकिन सबसे पहले, चलो एक सेकंड के लिए वापस कदम।
"लाइन द्वारा लाइन" डीबग करने का विचार कुछ प्रोग्रामिंग भाषाओं से आता है। "अनिवार्य" से मेरा मतलब है कि एक कार्यक्रम केवल निर्दिष्ट क्रम में किए जाने वाले निर्देशों का अनुक्रम है।
जब कोई जावा या पायथन को डीबग करता है, तो यह "रेखा से रेखा" दृष्टिकोण समझ में आता है क्योंकि कथन मौलिक तरीके से व्यवहार का प्रतिनिधित्व किया जाता है। यह "रेखा से रेखा" दृष्टिकोण को ब्लॉक आरेखों (उदा। सिमुलिंक) जैसे मॉडलिंग औपचारिकताओं के लिए भी बढ़ाया जा सकता है क्योंकि ग्राफिकल के दौरान, वे भी अनिवार्य हैं (यानी वे एक निर्दिष्ट क्रम में किए जाने वाले कदम हैं)।
लेकिन मॉडलिका एक अनिवार्य भाषा नहीं है। कदम, बयान या निर्देशों की कोई धारणा नहीं है। इसके बजाए, हमारे पास सर्वव्यापी समीकरण हैं। तो डिबगिंग के बारे में सोचने से लाइनरी मॉडलिका में काम नहीं करती है। यह सच है कि आप मॉडलिका से उत्पन्न सी कोड को डीबग करने के बारे में सोच सकते हैं, लेकिन यह आम तौर पर बहुत उपयोगी नहीं है क्योंकि यह समीकरणों के लिए केवल आंशिक समानता है।
तो आप मॉडलिका कोड को कैसे डिबग करते हैं? खैर, मॉडलिंग कोड डीबगिंग वास्तव में मॉडेलिका समीकरण डीबग कर रहा है। आम तौर पर, मॉडलिका मॉडल घटकों से बना होते हैं। घटकों को कनेक्ट होने पर जेनरेट किए गए समीकरण स्वचालित रूप से जेनरेट किए जाते हैं, इसलिए यह निर्धारित करें कि मॉडलिका कंपाइलर उनको सही तरीके से उत्पन्न करता है। तो घटक मॉडलों में समीकरण क्या बचा है।
इस तक पहुंचने का सबसे आसान तरीका प्रत्येक घटक को अलग-अलग परीक्षण करना है (या कम से कम संभवतः छोटे संभव मॉडल में)। मैं अक्सर कहता हूं कि मॉडलका घटकों को एक बड़े मॉडल में एक साथ फेंककर उन्हें डीबग करने की कोशिश करना एक ऑर्केस्ट्रा को सुनना और धुन से बाहर एक उपकरण को समझने की कोशिश करना है। तथ्य यह है कि मॉडलिका में ये समीकरण समीकरणों के एक साथ सिस्टम बनाने के लिए होते हैं, इसका मतलब है कि जब त्रुटियां होती हैं, तो वे कई चरों पर तुरंत प्रचार कर सकती हैं।
तो आपकी सबसे अच्छी शर्त है कि प्रत्येक व्यक्ति के लिए परीक्षण करें और घटक के व्यवहार को सत्यापित करें। मेरा अनुभव यह है कि जब आप ऐसा करते हैं, तो आप आसानी से बग को ट्रैक और खत्म कर सकते हैं।
अद्यतन: आपको अन्य लोगों के घटक मॉडल में आउटपुट जोड़ने की आवश्यकता नहीं है, उन्हें डीबग करने के लिए। एक आउटपुट किसी भी स्तर पर बनाया जा सकता है, उदा।
model SystemModel
SomeoneElsesComponent a;
SomeOtherGuysComponent b;
end SystemModel;
model SystemModel_Debug
extends SystemModel;
output Real someNestedSignalFromA = a.someSubsystem.someSubcomponent.someSignal;
output Real someOtherNestedSignalFromB = b.anotherSubsystem.anotherSignal;
end SystemModel_Debug;
बेशक, यह सिग्नल घटक के एकाधिक तत्काल होने पर अव्यवहारिक हो जाता है। उन मामलों में, मैं स्वीकार करता हूं कि अंतर्निहित मॉडल को संशोधित करना आसान है। लेकिन अगर वे अपने मॉडल replaceable
बनाते हैं, तो आप उपरोक्त के समान चाल का उपयोग कर सकते हैं (उनके मॉडल को बढ़ाते हैं, कस्टम आउटपुट का एक गुच्छा जोड़ते हैं और फिर redeclare
मूल के स्थान पर आपका मॉडल)।
यह भी देखें पेपर: http://dx.doi.org/10.3384/ecp12076443 – matth