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 でアドレスを明示的に指定する必要があり、フラグパラメタに DCMD_ADDRSPEC を設定する必要があることを示す。用法文字列が "?" で始まっている場合、dcmd はオプションでアドレスを受け付けることを示す。これらのヒントに従って、用法メッセージも変更される

const char *dc_descr

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

mdb_dcmd_f *dc_funcp

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

void (*dc_help)(void)

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