int dcmd(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv);
dcmd は dcmd() の宣言に似た関数によって実装されます。この関数は次の 4 つの引数を受け取り、整数のステータスを返します。
現在のアドレス。ドットともいう。dcmd の開始時点では、このアドレスはデバッガのドット「.」変数の値に対応しています。
次のフラグの 1 つ以上の論理和を含む整数
便利な DCMD_HDRSPEC() マクロが用意されており、dcmd はフラグをテストしてヘッダーラインを出力するかどうかを決定できます。ヘッダーラインを出力するのは、ループの一部として呼び出されていない、あるいはループまたはパイプラインの繰り返しの最初の場合です。
argv 配列内の引数の数
コマンド行の ::dcmd の右側に指定された引数の配列。この引数は文字列の場合と整数値の場合があります。
dcmd 関数は、<sys/mdb_modapi.h> に定義されている、次の整数値のいずれかを返します。
無効な引数が指定されたため、dcmd は失敗しました。この値が返される場合は、以降に述べるように dcmd の使用に関するメッセージが自動的に出力されます。
dcmd が失敗したため、現在のループまたはパイプラインは強制終了されます。この戻り値は DCMD_ERR に似ていますが、現在のループまたはパイプラインを続行できないことを示しています。
各 dcmd は <sys/mdb_modapi.h> に定義されているように、サンプルの dcmd() プロトタイプに従って定義された関数と、それに対応する mdb_dcmd_t 構造体から構成されています。この構造体は、次のフィールドから構成されています。
dcmd の文字列名。先頭に「::」が付きません。この名前には、$ または ` などの MDB メタキャラクタを含めることはできません。
dcmd に対するオプションの用法文字列。dcmd が DCMD_USAGE を返すとこの文字列が出力されます。たとえば、dcmd がオプション -a と -b を受け付ける場合、dc_usage は「[-ab]」と設定されます。dcmd が引数を受け付けない場合、dc_usage は NULL に設定されます。用法文字列が「:」で始まっている場合、dcmd でアドレスを明示的に指定する、つまり flags パラメータに DCMD_ADDRSPEC を設定する必要があることを示します。用法文字列が「?」で始まっている場合、dcmd がオプションアドレスを受け付けることを示します。これらのヒントに従って、用法メッセージも変更されます。
dcmd の目的を簡単に説明する、必須の記述文字列。この文字列は単一行のテキストで構成されます。
dcmd を実行するために呼び出される関数を指すポインタ。
dcmd のヘルプ関数を指すオプションの関数ポインタ。このポインタが NULL 以外の値の場合、ユーザーが ::help dcmd を実行すると、この関数が呼び出されます。この関数では mdb_printf() を使用して詳細情報や例を表示できます。