Solaris モジューラデバッガ

付録 A オプション

この付録では、MDB コマンド行オプションについて説明します。

コマンド行オプションの概要


mdb [ -fkmuwyAFMS ]  [ +o option ]  [ -p pid ]  [ -s distance]   
     [ -I path ]  [ -L path ]  [ -P prompt ]  [ -R root ]  
     [ -V dis-version ]  [ object  [ core ]  | core  | suffix ]

次のオプションがサポートされています。

-A

mdb モジュールの自動読み込みを無効にします。デフォルトでは、mdb は、ユーザープロセスまたはコアファイルのアクティブな共用ライブラリに対応しているデバッガモジュール、または稼働中のオペレーティングシステムかオペレーティングシステムのクラッシュダンプにある読み込み済みのカーネルモジュールに対応しているデバッガモジュールを読み込もうとします。

-F

必要に応じて、指定されたユーザープロセスに強制的に接続します。デフォルトでは、mdb は、すでに truss(1) など別のデバッグ用ツールの制御下にあるユーザープロセスへの接続を拒否します。-F オプションを指定すると、mdb はこれらのプロセスに接続します。これによって、mdb とプロセスを制御しようとしているほかのツールとの間で予期しない相互作用が発生する可能性があります。

-f

強制的に raw ファイルデバッギングモードに入ります。デフォルトでは、mdb は、オブジェクトとコアファイルのオペランドがユーザーの実行可能ファイルとコアダンプを参照しているのか、または 1 組のオペレーティングシステムのクラッシュダンプファイルを参照しているのかを判断しようとします。ファイルのタイプを推測できない場合、デバッガはデフォルトでそのファイルをプレーンなバイナリデータとして調査します。-f オプションを使用すると、mdb は引数を調査すべき raw ファイルセットとして解釈します。

-I

マクロファイルを検出するためのデフォルトのパスを設定します。マクロファイルは、 $< または $<< dcmd を使用して読み取ります。このときのパスは、一連のディレクトリ名をコロン (:) 文字で区切ったものです。-I include パスと -L library パス (以降を参照) には、次のトークンを含めることができます。

%i

現在の命令セットアーキテクチャー (ISA) の名前に展開されます。sparc、sparcv9、i386、または amd64 です。

%o

変更対象のパスの古い値まで展開されます。これは、既存のパスの前または後ろにディレクトリを追加するときに有用です。

%p

現在のプラットフォーム文字列 (uname -i またはプロセスのコアファイルあるいはクラッシュダンプに格納されているプラットフォーム文字列) に展開されます。

%r

ルートディレクトリのパス名まで展開されます。-R オプションを使用すると、代替ルートディレクトリを指定できます。-R オプションを指定しないと、ルートディレクトリは mdb 実行可能ファイル自体へのパスから動的に決定されます。たとえば、/bin/mdb を実行した場合、ルートディレクトリは / です。/net/hostname/bin/mdb 実行した場合、ルートディレクトリは /net/hostname となります。

%t

現在のターゲット名まで展開されます。これはリテラル文字列「proc」(ユーザープロセスまたはユーザープロセスのコアファイル)、あるいは「kvm」(カーネルクラッシュダンプまたは稼働中のオペレーティングシステム) のどちらかです。

32 ビットの mdb に対するデフォルトのインクルードパスは、次のとおりです。%r/usr/platform/%p/lib/adb:%r/usr/lib/adb

64 ビットの mdb に対するデフォルトのインクルードパスは、次のとおりです。%r/usr/platform/%p/lib/adb/%i:%r/usr/lib/adb/%i

-k

強制的にカーネルデバッギングモードにします。デフォルトでは、mdb は、オブジェクトとコアファイルのオペランドがユーザーの実行可能ファイルとコアダンプを参照しているのか、または 1 組のオペレーティングシステムのクラッシュダンプファイルを参照しているのかを判断しようとします。-k オプションを指定すると、mdb は、これらのファイルがオペレーティングシステムのクラッシュダンプファイルであるとみなします。オブジェクトまたはコアオペランドを指定せずに -k オプションを指定すると、mdb は、オブジェクトファイルを /dev/ksyms に、コアファイルを /dev/kmem にデフォルト設定します。/dev/kmem にアクセスできるのはグループ sys だけです。

-K

kmdb を読み込み、実行中のオペレーティングシステムカーネルを停止して、kmdb デバッガプロンプトを表示します。このオプションは、システムコンソールでしか使用してはなりません。それに続く kmdb プロンプトがシステムコンソールに表示されます。

-L

デバッガモジュールを検索するためのデフォルトのパスを設定します。モジュールは起動時に自動的に読み込まれるか、または ::load dcmd を使用して読み込まれます。このときのパスは一連のディレクトリ名をコロン (:) 文字で区切ったものです。-L ライブラリパスには、上記の -I オプションで示したトークンも含めることができます。

-m

カーネルモジュールシンボルのデマンドローディングを無効にします。デフォルトでは、mdb は読み込まれたカーネルモジュールのリストを処理し、モジュールごとにシンボルテーブルのデマンドローディングを実行します。-m オプションを指定すると、mdb はカーネルモジュールのリストを処理したり、モジュールごとにシンボルテーブルを提供したりしなくなります。したがって、アクティブなカーネルモジュールに対応する mdb モジュールは起動時に読み込まれません。

-M

すべてのカーネルモジュールシンボルを事前に読み込みます。デフォルトでは、mdb はカーネルモジュールシンボルのデマンドローディングを実行します。アドレスがそのモジュールのテキストであるとき、またはデータセクションが参照されているとき、モジュールのシンボルテーブルが完全に読み取られます。-M オプションを指定すると、mdb は起動時にすべてのカーネルモジュールのシンボルテーブルを完全に読み込みます。

-o option

指定したデバッガオプションを有効にします。+o 形式のオプションを使用した場合は、指定したオプションが無効になります。次に掲載しているものを除いて、各オプションともデフォルトでは無効になっています。mdb は次のオプション引数を認識します。

adb

より厳密な adb(1) との互換性を有効にする。プロンプトは空の文字列に設定され、出力ページャーなどの多数の mdb 機能が無効になる

array_mem_limit=limit

::print が表示する配列のメンバー数に対してデフォルトの制限を設定する。limit が特別なトークン none である場合、デフォルトで配列のすべてのメンバーが表示される

array_str_limit=limit

::printchar 型の配列を出力するときに ASCII 文字列として表示する文字数に対してデフォルトの制限を設定する。limit が特別なトークン none である場合、デフォルトで char 配列全体が string として表示される

follow_exec_mode=mode

exec(2) システムコールに従って動作するようにデバッガを設定する。mode は次の名前付き定数の 1 つである必要がある

ask 

stdout が端末デバイスである場合、デバッガは exec(2) システムコールが返ったあとに停止して、exec または stop のどちらに従うかをユーザーに尋ねる。stdout が端末デバイスではない場合、ask モードはデフォルトで stop になる

follow 

デバッガは自動的にターゲットプロセスを継続し、新しい実行可能ファイルに基づいて、ターゲットプロセスのマッピングとシンボルテーブルをすべてリセットし、exec に従うfollow の動作の詳細については、exec との対話」を参照

stop 

exec システムコールから戻ったあと、デバッガは exec システムコールに従うことを停止する。stop の動作の詳細については、exec との対話」を参照

follow_fork_mode=mode

fork(2)fork1(2)、または vfork(2) システムコールの動作に従って動作するようにデバッガを設定する。mode は次の名前付き定数の 1 つである必要がある

ask 

stdout が端末デバイスである場合、デバッガは fork システムコールが返ったあとに停止して、親プロセスまたは子プロセスのどちらに従うかをユーザーに尋ねる。stdout が端末デバイスではない場合、ask モードはデフォルトで親プロセスになる

parent 

デバッガは親プロセスに従って、子プロセスを切り離し、「動作中 (running)」に設定する 

child 

デバッガは子プロセスに従って、親プロセスを切り離し、「動作中 (running)」に設定する 

ignoreeof

端末に EOF シーケンス (^D) が入力されても、デバッガは終了しない。終了するには ::quit dcmd を使用する必要がある

nostop

-p オプションを指定したか、::attach または :A dcmd を適用した場合、ユーザープロセスと接続しているときには、そのユーザープロセスを停止しない。nostop の動作の詳細については、「プロセスの接続と解放」を参照

pager

出力ページャーが有効になる (デフォルト設定)

repeatlast

復帰改行文字がコマンドとして端末に入力された場合、mdb は前のコマンドを現在のドットの値で繰り返す。-o adb を指定した場合、このオプションも自動的に指定されている

showlmid

MDB は LM_ID_BASE と LM_ID_LDSO 以外のリンクマップを使用するユーザーアプリケーションでシンボルの命名と識別をサポートする (「シンボルの名前解決」を参照)。LM_ID_BASE または LM_ID_LDSO 以外のリンクマップ上のシンボルは LMlmid`library`symbol のように表示される (このとき、lmid はデフォルトの出力基数 (16 進数) のリンクマップ ID)。showlmid オプションを有効にすると、すべてのシンボルとオブジェクト (LM_ID_BASE と LM_ID_LDSO に関連するものも含む) のリンクマップ ID 有効範囲を表示するように MDB を構成できる。オブジェクトファイル名を扱う組み込み dcmd (::nm::mappings$m::objects など) は、上記 showlmid の値に従ってリンクマップ ID を表示する

-p pid

指定されたプロセス ID に接続し、そのプロセスを停止します。mdb は、/proc/pid/object/a.out ファイルを実行可能ファイルのパス名として使用します。

-P

コマンドプロンプトを設定します。デフォルトのプロンプトは、「>」です。

-R

パス名を拡張するためのルートディレクトリを設定します。デフォルトでは、ルートディレクトリは mdb 実行可能ファイル自体のパス名から導かれます。ルートディレクトリは、パス名の展開の際に %r トークンと置き換えられます。

-s distance

アドレスからシンボル名への変換用のシンボルマッチングディスタンスを、指定した distance に設定します。デフォルトでは、mdb はこの距離をゼロに設定し、スマートマッチングモードを有効にします。ELF シンボルテーブルのエントリには値 V とサイズ S が含まれ、関数またはデータオブジェクトのサイズがバイト単位で示されます。スマートモードでは、mdb は、A が [ V, V + S ) の範囲にある場合、アドレス A と与えられたシンボルとを一致させます。ゼロ以外の距離を指定した場合も同じアルゴリズムが使用されますが、式に S を指定した場合、常に絶対距離が指定され、シンボルのサイズは無視されます。

-S

ユーザーの ~/.mdbrc ファイルの処理を抑制します。デフォルトでは、mdb は、$HOME で定義されているユーザーのホームディレクトリにマクロファイル .mdbrc があれば、それを読み取って処理します。-S オプションを指定すると、このファイルは読み取られません。

-u

強制的にユーザーデバッギングモードにします。デフォルトでは、mdb は、オブジェクトとコアファイルのオペランドがユーザーの実行可能ファイルとコアダンプを参照しているのか、または 1 組のオペレーティングシステムのクラッシュダンプファイルを参照しているのかを判断しようとします。-u オプションを使用すると、mdb は、これらのファイルがオペレーティングシステムのクラッシュダンプファイルではないとみなします。

-U

kmdb が読み込まれた場合は、それを読み込み解除します。kmdb が使用中でない場合は、それを読み込み解除し、カーネルデバッガで使用されたメモリーを解放してオペレーティングシステムが利用できるようにします。

-V

逆アセンブラのバージョンを設定します。デフォルトでは、mdb は、デバッグターゲットに対する適切な逆アセンブラのバージョンを判断しようとします。-V オプションを使用すると、逆アセンブラを明示的に設定できます。::disasms dcmd によって、使用可能な逆アセンブラのバージョンが一覧表示されます。

-w

指定したオブジェクトとコアファイルを書き込み用に開きます。

-y

tty モードに対する明示的な端末初期化シーケンスを送信します。端末には、tty モードに切り換えるために明示的な初期化シーケンスを必要とするものがあります。この初期化シーケンスがないと、mdb からスタンドアウトモードなどの端末機能を使用できない場合があります。

オペランド

次のオペランドがサポートされています。

object

調査する ELF 書式のオブジェクトファイルを指定します。mdb が調査および編集できるのは、ELF 書式の実行可能ファイル (ET_EXEC)、ELF 動的ライブラリファイル (ET_DYN)、ELF 再配置可能オブジェクトファイル (ET_REL)、およびオペレーティングシステムのシンボルテーブル (unix.X ファイル) です。

core

ELF プロセスコアファイル (ET_CORE) またはオペレーティングシステムのクラッシュダンプ (vmcore.X ファイル) を指定します。ELF コアファイルオペランド (core) を指定する場合、対応するオブジェクトファイルを指定しないと、mdb はいくつかの異なるアルゴリズムを使用して、コアファイルを生成した実行可能ファイルの名前を推測しようとします。このような実行可能ファイルが見つからなかった場合、mdb は動作し続けますが、いくつかのシンボル情報が利用できなくなっている可能性があります。

suffix

オペレーティングシステムのクラッシュダンプファイルのペアを表す数値の接尾辞を指定します。たとえば、接尾辞が「3」である場合、mdb は「unix.3」や「vmcore.3」などの名前のファイルを調査すると推測します。同じ名前の実際のファイルが現在のディレクトリに存在する場合、この数字文字列は接尾辞としては解釈されません。

終了ステータス

次の終了値が返されます。

0

デバッガは正常に実行を終了しました。

1

致命的なエラーが発生しました。

2

無効なコマンド行オプションが指定されました。

環境変数

次の環境変数がサポートされます。

HISTSIZE

この変数は、コマンド履歴リストの最大の長さを決定するために使用されます。この変数が存在しない場合、デフォルトの長さは 128 です。

HOME

この変数は、ユーザーのホームディレクトリ (.mdbrc ファイルが存在する場所) のパス名を決定するために使用されます。この変数が存在しない場合、.mdbrc は処理されません。

SHELL

この変数は、! メタキャラクタを使用して要求されたシェルエスケープを処理するシェルのパス名を決定するために使用されます。この変数が存在しない場合、/bin/sh が使用されます。