クラッシュダンプデバッグ

Note

SOLID-2.0.0 以降で使用できます。

概要

SOLIDのスナップショットファイルをロードして、デバッガ上にコンテキスト (レジスタ、メモリ、タスクなど)情報を展開、復元し、問題発生時の状態を解析できます。

ターゲットが接続されていない状態でも、スナップショットファイルがあれば動作するため、 複数人での解析が可能です。


使い方

スナップショットファイルの作成

SOLID OS の スナップショットAPI を使用し、スナップショットファイルを作成します。 このとき、ファイルの拡張子は必ず .sdmp にしてください。詳細は スナップショット を参照してください。

スナップショット生成するサンプルコード(1)

通常実行中のスナップショットの生成

  • アプリケーション固有のエラーハンドラ等での利用を想定しています

  • SOLID_SNAPSHOT_Create()の第2引数 pContext には NULL を指定

スナップショット生成サンプルコード
{
   int snapshot_result;

   snapshot_result =  SOLID_SNAPSHOT_Create(SOLID_SNAPSHOT_ATTR_DEBUG, NULL);

   syslog(LOG_INFO, "SOLID_SNAPSHOT_Create()  = %d", snapshot_result);
}

スナップショット生成するサンプルコード(2)

ユーザー定義例外ハンドラでのスナップショットの生成

  • スナップショットを生成するユーザー定義例外ハンドラ

  • SOLID_SNAPSHOT_Create()の第2引数 pContext にはハンドラに渡された pContextを指定

Note

NULLを指定すると例外発生時のコンテキストではなく、例外ハンドラのコンテキストでのスナップショットになってしまいます

スナップショット生成サンプルコード(データアボートの例)
static int my_dabort_handler(void* param, SOLID_CPU_CONTEXT* pContext)
{
   int snapshot_result;

   /* データアボート時にスナップショットを生成 */
   snapshot_result = SOLID_SNAPSHOT_Create(SOLID_SNAPSHOT_ATTR_DEBUG, pContext);

   return SOLID_ERR_OK;
}
  • ハンドラを、SOLID_VECTOR_Register()で登録します

ユーザー定義例外ハンドラの登録サンプル
  #include <solid_vector.h>
  {
     SOLID_VECTOR_HANDLER myDAbortHandler;

     myDAbortHandler.func = &my_dabort_handler;
     myDAbortHandler.param = NULL;

     SOLID_VECTOR_Register (SOLID_VECTOR_DATAABORT, &myDAbortHandler);

   /* ...他の例外ハンドラの登録 */
}

スナップショットファイルの再生

IDEにスナップショットファイル(*.sdmp)をドラッグ&ドロップすると、スナップショットファイルの概要と、 起動するための設定項目が表示されます。

CFGディレクトリ には、開かれているソリューションの設定値が自動的に入力されます。 ソリューションを開いていない場合、手動での設定が必要です。

クラッシュダンプ読み込み時に、init.mcr を実行するため、通常のデバッグ時に使用されるinit.mcr は実行されないようにディレクトリを指定する(init.mcrが無い場所を指定する等)必要があります。

../_images/SET_CONFIGURE.PNG

設定が終了したら、デバッグを開始 をクリックしてください。

メモリやレジスタの内容などが復元され、自動的にビルド済みの実行ファイルのデバッグ情報がロードされます。

../_images/IN_DEBUGGING.PNG

制限事項

ステップ実行など、実行制御を伴う操作はできません。