Hedef çipin yerini bir ICE (In-Circuit Emulator) alır. Devrenin geri kalanına gerçek çip gibi davranır, ancak içeride her türlü kancaya sahiptir, böylece neler olduğunu görebilir, kırılma noktaları ayarlayabilir, yeni kod yükleyebilir, izleri kapabilirsiniz, vb. ICD (In-Circuit Debugger) kullanır bu amaç için hedef çipe özel hata ayıklama donanımı eklendi ve size ICE benzeri bir yetenek vermeye çalışıyor. Ne yazık ki, pazarlama insanları dahil oldular ve bu uzun süredir devam eden terimleri sizi, ürünlerinin bir sonrakinden daha iyi olduğunu düşünmeye kandırmak için yeniden tanımlamaya çalıştılar. Microchip'in RealIce'i bunun özellikle berbat bir örneğidir. Gerçek, ama olmayan tek şey bir ICE.
Gerçek bir ICE (RealIce değil) en iyi devre içi hata ayıklama ortamıdır. Ne yazık ki, ICE'de kullanım için hedef çipin özel bir bağlanma versiyonunu yapmanın yüksek maliyeti ve hızların o kadar yüksek olması, çipten bir şey almanın sorunlu olması nedeniyle bunlar neredeyse ortadan kalktı. Başka bir sorun, bir ICE'nin hedef çipin bir sokette olmasını veya ICE'nin hatlarına bağlanabilmesi için hedef çipin yerine monte edilmiş özel bir adaptör gerektirmesidir.
Bugün ICD'lerle takılmışız. Neyse ki bir ICE ile yapmak istediğiniz şeylerin çoğunu yapıyorlar. Kodun hedef çip gibi olmaya çalışan bir şey değil, gerçek hedef çip üzerinde çalışmasının bir avantajı var . Dezavantajı, yonga üzerindeki kaynaklara ihtiyaç duymalarıdır, bu nedenle kodunuz ve donanımınız için bir ICE gibi tamamen şeffaf değildir. ICD'nin, genellikle birden fazla rolü olabilen hata ayıklama hatlarına erişmesi gerekir. Hata ayıklama sırasında bu iğneleri diğer rollerde kullanamazsınız. Her parçaya yerleştirilen hata ayıklama devresi miktarı, toplamın küçük bir kısmına kadar tutulmalıdır, aksi takdirde maliyet çok yüksek olacaktır, bu nedenle özelliklerden taviz verilmelidir. Her çip üzerine eklemek için çok pahalı olacak güzel bir özellik, gerçek izleme yeteneğidir, çünkü büyük bir RAM tamponu gerektirir.
Her sorun sonunda çeşitli araçlarla çözülebilir. Çözüp çözemeyeceğiniz değil, ne kadar ve ne kadar çaba gerektirdiği. Düzenli olarak ICE'leri (Microchip ICE-2000 ve ICE-4000) kullanırken, izleme özelliğini sık kullanmadım, ancak diğer araçları yaptığımda önemli ölçüde daha maliyetli olurdu. Bazen bir değişkenin aniden yanlış değere sahip olduğu bir hata vardır. Kod adım adım ve her şey yolunda ve değişkeni manipüle eden rutin her şeyi doğru yapıyor gibi görünüyor, ama sonunda çalıştırdığınızda işler bok ve o değişkeni çöpe. Nedeni, kötü bir işaretçi, arabellek taşması, yığın uyuşmazlığı veya benzeri başka bir kod. Bir ICE ile değiştirilen değişken üzerinde bir kesme noktası ayarlayabilirsiniz,
Çoğu zaman bir ICD yeterince başarılı olacaktır. Özellikle büyük yongalarda, hata ayıklamaya adanmış çift pimler o kadar da sorun değil. Bugünlerde RealIce'i hata ayıklamak için kullanıyorum. ICD2'den çok daha kararlı ve daha az lapa lapa. Onunla yaşamayı öğreniyorsun.