Solaris モジューラデバッガ

dcmd の定義

int dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv);

dcmd は dcmd() の宣言に似た関数によって実装されます。この関数は次の 4 つの引数を受け取り、整数のステータスを返します。

addr

現在のアドレス。ドットともいう。dcmd の開始時点では、このアドレスはデバッガのドット「.」変数の値に対応しています。

flags

次のフラグの 1 つ以上の論理和を含む整数

DCMD_ADDRSPEC

明示的なアドレスが ::dcmd の左に指定された

DCMD_LOOP

dcmd が count 構文を使ってループの中で呼び出されたか、またはパイプラインによってループの中で呼び出された

DCMD_LOOPFIRST

この dcmd 関数の呼び出しは、最初のループまたはパイプラインの呼び出しに対応している

DCMD_PIPE

dcmd がパイプラインからの入力に伴って呼び出された

DCMD_PIPE_OUT

dcmd がパイプラインに出力するよう設定されて呼び出された

便利な DCMD_HDRSPEC() マクロが用意されており、dcmd はフラグをテストしてヘッダーラインを出力するかどうかを決定できます。ヘッダーラインを出力するのは、ループの一部として呼び出されていない、あるいはループまたはパイプラインの繰り返しの最初の場合です。

argc

argv 配列内の引数の数

argv

コマンド行の ::dcmd の右側に指定された引数の配列。この引数は文字列の場合と整数値の場合があります。

dcmd 関数は、<sys/mdb_modapi.h> に定義されている、次の整数値のいずれかを返します。

DCMD_OK

dcmd は正常に完了しました。

DCMD_ERR

何らかの理由により dcmd は失敗しました。

DCMD_USAGE

無効な引数が指定されたため、dcmd は失敗しました。この値が返される場合は、以降に述べるように dcmd の使用に関するメッセージが自動的に出力されます。

DCMD_NEXT

次の dcmd 定義がある場合は、同じ引数で自動的に呼び出されます。

DCMD_ABORT

dcmd が失敗したため、現在のループまたはパイプラインは強制終了されます。この戻り値は DCMD_ERR に似ていますが、現在のループまたはパイプラインを続行できないことを示しています。

各 dcmd は <sys/mdb_modapi.h> に定義されているように、サンプルの dcmd() プロトタイプに従って定義された関数と、それに対応する mdb_dcmd_t 構造体から構成されています。この構造体は、次のフィールドから構成されています。

const char *dc_name

dcmd の文字列名。先頭に「::」が付きません。この名前には、$ または ` などの MDB メタキャラクタを含めることはできません。

const char *dc_usage

dcmd に対するオプションの用法文字列。dcmd が DCMD_USAGE を返すとこの文字列が出力されます。たとえば、dcmd がオプション -a-b を受け付ける場合、dc_usage は「[-ab]」と設定されます。dcmd が引数を受け付けない場合、dc_usage は NULL に設定されます。用法文字列が「:」で始まっている場合、dcmd でアドレスを明示的に指定する、つまり flags パラメータに DCMD_ADDRSPEC を設定する必要があることを示します。用法文字列が「?」で始まっている場合、dcmd がオプションアドレスを受け付けることを示します。これらのヒントに従って、用法メッセージも変更されます。

const char *dc_descr

dcmd の目的を簡単に説明する、必須の記述文字列。この文字列は単一行のテキストで構成されます。

mdb_dcmd_f *dc_funcp

dcmd を実行するために呼び出される関数を指すポインタ。

void (*dc_help)(void)

dcmd のヘルプ関数を指すオプションの関数ポインタ。このポインタが NULL 以外の値の場合、ユーザーが ::help dcmd を実行すると、この関数が呼び出されます。この関数では mdb_printf() を使用して詳細情報や例を表示できます。