Linuxは従来から組込み機器で使用されていたµITRONのようなタスク・モデルのOSとは違って、アプリケーション(プロセス)が同じ仮想アドレス(多重仮想記憶方式)で動作します。その為、組込みLinuxに対応したデバッガでは仮想アドレスを認識してマルチプロセスのデバッグが行えます。
一般的な組込みデバッグはすべてのソフトウェアを実行/ブレークさせて行いますが、LinuxのようなOSではアプリケーション(プロセス)ごとのデバッグも要求されます。その為、プロセスのデバッグはカーネルや他のプロセスを動作させた状態で対象プロセスだけを実行/ブレークさせてデバッグすることもできます。
アプリケーションはカーネルによって動的にロードされ、仮想メモリに配置された時がデバッグ可能な状態となります。その為、デバッガはカーネルからアプリケーションに制御が移行した時を認識してアプリケーションの先頭からのデバッグが行えます。
アプリケーションがメモリ・アクセス違反などの致命的な終了をした場合、カーネルはメモリの一部をコアダンプという形でファイルに残します。コアダンプからアクセス違反のアドレスを確認し、デバッガのリアルタイム・トレース機能で実行履歴を解析してメモリの破壊箇所を調べることができます。
メモリの確保と開放を頻繁に繰り返すシステムでは、メモリの開放漏れ(メモリ・リーク)が原因でシステムのパフォーマンス低下やOSのハングアップを発生させる場合があります。このような現象をデバッグするにはメモリの確保と開放を監視して、正しくメモリの開放が行われているかを調べることができます。
アプリケーションが目標のスペックを満たさない場合、Linuxのトレース・ツール機能「Linux Trace Toolkit(LTT)」で詳細な計測を行ってボトル・ネックを調べます。例えば、プロセスの切り替わりや実行時間、システム・コール、イベント発生時の情報等からプロセスの遷移を把握してアプリケーションの最適化が行えます。
Linuxでは、LANを経由してファイルの操作が自由に行えますが、LANを実装していない組込みターゲットではファイルの操作が行えません。その為、デバッガではJTAGインターフェースを経由してターゲットのファイルシステムに対するアップロード/ダウンロード/ファイルの削除/ディレクトリの作成・削除が行えます。
カーネルやユーザランド等の大きなファイルをターゲットに転送する場合、低速なJTAGインターフェース経由での転送スピードが問題とされます。そこで、高速な専用インターフェースを用いたり、ターゲットのフラッシュメモリを代替メモリに置き換えることで、ファイル転送を高速化してデバッグ効率のアップが行えます。
不安定な要素が多い組込みLinuxのソフトウェア開発では、カーネルからアプリケーションまでのトータル的なデバッグが要求されます。その為、JTAGエミュレータは組込みLinux開発のさまざまな問題点をクリアし最適なデバッグ・ツールとして進化しました。 また、アプリケーション開発ではLinux PC上にUser Mode Linuxやシミュレータ等で仮想的なターゲット環境を構築して効率の良いデバッグが行えます。