1.5 概要:Linux アプリケーションのリワインド

アプリケーションリワインドは、Linux アプリケーションの実行を通じて、順方向だけでなく逆方向にもデバッグできるようにする DS-5デバッガの機能です。

この機能を使用すると、ブレークポイントとウォッチポイントへの到達など、実行とステップの両方を行うことができます。アプリケーション実行のどの時点でも、記録されたメモリ、レジスタ、および変数の内容を表示できます。非確定的なバグの場合、クラッシュの原因となった同じステップを再作成するのは困難な場合があります。逆方向のデバッグではその必要がなく、バグを見つけるのにかかる時間を数時間から数分にまで短縮できます。

未初期化の配列インデックスや範囲外の配列インデックスのように単純なエラーの場合や、NULL ポインタによって生じたアプリケーションクラッシュの場合、アプリケーションリワインド機能が非常に役立ちます。特に、バグがあるのと同じソースファイルでクラッシュが起こらないためです。

注:

アプリケーションリワインドは、DS-5 Professional Edition と DS-5 Ultimate Edition でのみサポートされています。

アプリケーションリワインドと従来のデバッグ方法

トレースは実行の全体像を記録でき、非侵入型であるため、システム問題のデバッグに非常に効果的なツールです。ベアメタルやカーネルのデバッグでは、一定時間にプロセッサ上で実行される命令を記録することによって、この目的にトレースを使用します。

ただし、デバッガの観点からは、Linux アプリケーションでトレースを使用するのは実際的でありません。その理由は以下のとおりです。

  • 実稼働システムでは、トレースが公開されないためアクセスできない場合がある。
  • コア間で切り替わるアプリケーションの追跡に時間がかかる場合がある。
  • マルチコア SoC では、トレースバッファがすぐに満杯になる可能性があり、プログラム実行を記録できる時間が限られる。また、アプリケーションのクラッシュよりずっと前にバグが発生した場合は、トレースバッファの大きさがイベント全体をキャプチャするには十分でない可能性がある。

従来の printf デバッグ方法にはさまざまな課題があります。printf ステートメントのステージングが必要な頻度や、ステートメントがコードに対する"プローブ効果"を持つ可能性があることを知るのは困難です。また、アノテーションが追加されるたびにアプリケーションを再構築するのは、時間がかかります。

このため、TCP/IP または USB を介してユーザー空間アプリケーションをデバッグする場合には、別のアプローチが必要です。

アプリケーションリワインドの動作

アプリケーションリワインドのデバッグセッションは、デバッグコンフィギュレーションパネルから起動され、グラフィカルデバッガ、コマンドラインデバッガのいずれかから制御できます。

アプリケーションリワインドは、gdbserver の代わりにカスタムデバッグエージェントを使用しますが、TCP/IP または USB 接続を使用した Linux アプリケーションの標準のデバッグと類似した方法で動作します。このカスタムデバッグエージェントは、非確定的な入力と共に、デバッグされているアプリケーションのコピーオンライトスナップショットを記録します。これにより、デバッガはプログラム実行の完全な写真を再構築することができます。

注:

アプリケーションリワインドを使用してアプリケーションをデバッグすると、ターゲットのメモリ消費量が増加し、アプリケーションの速度が低下する場合があります。正確な影響は、アプリケーションの動作によって異なります。大量の I/O を実行するアプリケーションでは、記録処理中にメモリ消費が増加します。

バグが記録されると、再生は確定的になり、それぞれの巻き返しと再生で見られたのとまったく同じ動作になります。

非機密扱いPDF file icon PDF 版ARM DUI0446ZJ
Copyright © 2010–2016 ARM.All rights reserved.