ICE (In-Circuit Emulator) menggantikan chip target. Kerjanya seperti chip nyata ke seluruh rangkaian, tetapi memiliki semua jenis kait di dalamnya sehingga Anda dapat melihat apa yang terjadi, mengatur titik istirahat, memuat kode baru, mengambil jejak, dll. ICD (In-Circuit Debugger) menggunakan perangkat keras debug khusus ditambahkan ke chip target untuk tujuan itu dan mencoba memberi Anda kemampuan seperti ICE. Sayangnya, orang-orang pemasaran telah terlibat dan mencoba mendefinisikan kembali istilah-istilah lama dalam upaya mereka untuk menipu Anda agar berpikir produk mereka lebih baik daripada yang berikutnya. RealIce Microchip adalah contoh yang sangat mengerikan dari ini. Itu nyata, tetapi satu hal yang bukan ICE.
ICE nyata (bukan RealIce) adalah lingkungan debugging terbaik di sirkuit. Sayangnya ini sudah cukup banyak hilang karena biaya tinggi membuat versi bondout khusus dari chip target untuk digunakan di ICE, dan fakta bahwa kecepatan sudah begitu tinggi sehingga mengambil apa pun dari chip bermasalah. Masalah lain adalah bahwa ICE membutuhkan chip target berada dalam soket, atau membutuhkan adaptor khusus yang dipasang di tempat chip target sehingga ICE dapat terhubung ke jalurnya.
Jadi hari ini kita terjebak dengan ICD. Untungnya mereka melakukan sebagian besar hal yang ingin Anda lakukan dengan ICE. Mereka bahkan memiliki satu keuntungan karena kode tersebut berjalan pada chip target sebenarnya, bukan sesuatu yang mencoba menjadi seperti chip target. Kelemahannya adalah mereka membutuhkan sumber daya on-chip sehingga tidak sepenuhnya transparan untuk kode dan perangkat keras Anda seperti ICE. ICD membutuhkan akses ke jalur debug, yang seringkali dapat memiliki banyak peran. Anda tidak dapat menggunakan pin itu di peran lain saat debugging. Jumlah sirkuit debug yang dibangun ke dalam setiap bagian harus dijaga agar tetap sedikit dari total yang lain sehingga biayanya terlalu tinggi, sehingga fitur harus dikompromikan. Salah satu fitur bagus yang akan terlalu mahal untuk ditambahkan pada setiap chip adalah kemampuan penelusuran yang benar, karena itu membutuhkan buffer RAM yang besar.
Setiap masalah pada akhirnya dapat diselesaikan dengan berbagai alat. Ini bukan apakah Anda bisa menyelesaikannya, tetapi berapa lama dan berapa banyak usaha yang diperlukan. Ketika saya secara teratur menggunakan ICE (Microchip ICE-2000 dan ICE-4000), saya tidak sering menggunakan fitur jejak, tetapi ketika saya melakukan cara lain akan secara signifikan lebih mahal. Terkadang Anda memiliki bug di mana variabel tiba-tiba memiliki nilai yang salah di dalamnya. Anda melangkah melalui kode dan semuanya baik-baik saja dan rutinitas yang memanipulasi variabel tampaknya melakukan segalanya dengan benar, tetapi ketika Anda menjalankannya akhirnya hal-hal buruk dan Anda menemukan variabel tersebut dibuang. Penyebabnya adalah beberapa kode lain dengan pointer buruk, buffer overflow, stack mismatch, atau sejenisnya. Dengan ICE Anda dapat mengatur breakpoint pada variabel yang diubah,
Sebagian besar waktu, ICD akan cukup baik. Terutama dengan chip besar, pin pasangan yang didedikasikan untuk debugging tidak terlalu menjadi masalah. Saat ini saya lebih banyak menggunakan RealIce untuk debugging. Ini jauh lebih stabil dan kurang serpihan dari ICD2. Anda belajar hidup dengannya.