クラッシュダンプデバッグ
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
が無い場所を指定する等) 必要があります。
設定が終了したら、デバッグを開始 をクリックしてください。
メモリやレジスタの内容などが復元され、自動的にビルド済みの実行ファイルのデバッグ情報がロードされます。
制限事項
ステップ実行など、実行制御を伴う操作はできません。