एक ICE (इन-सर्किट एमुलेटर) लक्ष्य चिप को बदल देता है। यह बाकी चिप की तरह वास्तविक चिप की तरह काम करता है, लेकिन इसमें सभी प्रकार के हुक होते हैं, ताकि आप देख सकें कि क्या चल रहा है, ब्रेक पॉइंट सेट करें, नया कोड लोड करें, निशान खींचें, आदि ICD (इन-सर्किट डीबगर) का उपयोग करता है विशेष डिबग हार्डवेयर उस उद्देश्य के लिए लक्ष्य चिप में जोड़ा गया और आपको ICE जैसी क्षमता देने की कोशिश करता है। दुर्भाग्य से, मार्केटिंग के लोगों ने ऊर्जा प्राप्त की है और इन लंबे समय से चली आ रही शर्तों को फिर से परिभाषित करने की कोशिश की है ताकि आप सोच सकें कि उनका उत्पाद अगले एक से बेहतर है। माइक्रोचिप का RealIce इसका विशेष रूप से अहम् उदाहरण है। यह वास्तविक है, लेकिन एक चीज यह एक ICE नहीं है।
एक वास्तविक ICE (RealIce नहीं) सर्किट डिबगिंग वातावरण में सबसे अच्छा है। दुर्भाग्य से ये बहुत दूर चले गए हैं क्योंकि ICE में उपयोग के लिए लक्ष्य चिप का एक विशेष बॉन्डआउट संस्करण बनाने की उच्च लागत है, और यह तथ्य कि गति इतनी अधिक हो गई है कि चिप को बंद करके कुछ भी लेना समस्याग्रस्त है। एक और समस्या यह है कि एक ICE को सॉकेट में टारगेट चिप की आवश्यकता होती है, या टारगेट चिप के स्थान पर एक विशेष एडाप्टर की आवश्यकता होती है जिससे ICE उसकी लाइनों से जुड़ सके।
इसलिए आज हम ICDs के साथ फंस गए हैं। सौभाग्य से वे ज्यादातर चीजें आप एक आईसीई के साथ करना चाहते हैं। उनका एक फायदा यह भी है कि कोड वास्तविक लक्ष्य चिप पर चल रहा है, न कि लक्ष्य चिप की तरह कुछ करने की कोशिश में । नकारात्मक पक्ष यह है कि उन्हें ऑन-चिप संसाधनों की आवश्यकता होती है ताकि आपके कोड और हार्डवेयर के लिए पूरी तरह से पारदर्शी न हों जैसे कि ICE है। आईसीडी को डिबगिंग लाइनों तक पहुंच की आवश्यकता होती है, जिसमें अक्सर कई भूमिकाएं हो सकती हैं। आप डिबगिंग करते समय अन्य पिनों में उन पिन का उपयोग नहीं कर सकते। प्रत्येक भाग में निर्मित डिबग सर्किटरी की मात्रा कुल के एक छोटे से अंश तक रखी जानी चाहिए, लागत बहुत अधिक होगी, इसलिए सुविधाओं से समझौता करना होगा। एक अच्छी सुविधा जो हर चिप पर जोड़ने के लिए बहुत महंगी होगी वह सही ट्रेस क्षमता है, क्योंकि इसके लिए एक बड़े रैम बफर की आवश्यकता होती है।
हर समस्या को अंततः विभिन्न उपकरणों के साथ हल किया जा सकता है। यह नहीं है कि आप इसे हल कर सकते हैं, लेकिन यह कितना समय और कितना प्रयास करता है। जब मैं नियमित रूप से ICE (माइक्रोचिप ICE-2000 और ICE-4000) का उपयोग कर रहा था, तो मैंने अक्सर ट्रेस सुविधा का उपयोग नहीं किया, लेकिन जब मैंने अन्य साधन किए तो काफी अधिक महंगा हो गया। कभी-कभी आपके पास एक बग होता है जहां एक चर में अचानक गलत मान होता है। आप कोड को चरणबद्ध करते हैं और सबकुछ ठीक है और चर को हेरफेर करने वाली दिनचर्या सब कुछ ठीक करने लगती है, लेकिन जब आप इसे चलाते हैं तो अंत में चीजें बकवास हो जाती हैं और आपको लगता है कि चर चकरा गया। कारण एक खराब सूचक, बफर अतिप्रवाह, स्टैक मिसमैच या पसंद के साथ कुछ अन्य कोड है। ICE के साथ आप परिवर्तनशील होने पर एक ब्रेकपॉइंट सेट कर सकते हैं,
ज्यादातर समय, एक आईसीडी पर्याप्त रूप से अच्छा करेगा। विशेष रूप से बड़े चिप्स के साथ, डिबगिंग के लिए समर्पित युगल पिन एक समस्या का ज्यादा हिस्सा नहीं है। आजकल मैं ज्यादातर RealIce का उपयोग डिबगिंग के लिए करता हूं। यह ICD2 की तुलना में बहुत अधिक स्थिर और कम परतदार है। तुम इसके साथ जीना सीखो।