DDB
Section: Devices and Network Interfaces (4)
索引
jman
BSD mandoc
FreeBSD
索引
名称
ddb
- 対話型カーネルデバッガ
索引
書式
options DDB
索引
解説
カーネルデバッガは古い kdb のほとんどの機能を、
gdb(1)
の影響を受けた合理的なシンタックスでサポートしています。
現在のロケーションは `dot' と呼ばれます。
`dot' はプロンプトに 16 進数の形式で表示されます。
検査と書き込みコマンドは、
最後に検査したか最後に変更したロケーションに `dot' を更新します。
そして、`next' を次に検査もしくは変更するロケーションのアドレスにセットします。
他のコマンドは `dot' を変更せず、`next' を `dot' と同じにします。
一般的なコマンドシンタックスは
command [/ modifier
]
address [, count
]
となります。
空白行は直前のコマンドをアドレス `next' からカウントを 1、
修飾子 (modifier) なしとして繰り返し実行します。
address
を指定すると `dot' はそのアドレスに設定されます。
address
を省略すると `dot' がアドレスとして使われます。
count
が指定されないと、表示コマンドに対しては 1 が指定されたものとされ、
スタックトレースに対しては無限が指定されたものとなります。
デバッガは出力に対し
more(1)
のような機能をサポートしています。
出力行が変数
$lines
で指定されている数を越えると、
``--db_more--
''
を表示し応答を待ちます。
これに対する有効な応答は以下の通りです。
- SPC
-
次の 1 ページを表示します
- RET
-
次の 1 行を表示します
- q
-
現在のコマンドを中断し、コマンド入力モードに戻ります
は小さい (現在は 10 項目) コマンドヒストリや、
簡単な Emacs 風のコマンド行編集機能を提供しています。
Emacs のコントロールキーに加え、
通常の ANSI の矢印キーでもヒストリバッファをブラウズしたり、
現在行の中でカーソルを動かしたりすることができるでしょう。
索引
コマンド
- examine
-
- x
-
修飾子のフォーマットによって、
指定されたアドレスロケーションの内容を表示します。
複数の修飾子を指定すると、複数のロケーションが表示されます。
フォーマットが指定されないと、
このコマンドに最後に使われたフォーマットが使われます。
フォーマット文字は以下の通りです。
- b
-
バイト (8 ビット) で表示します。
- h
-
ハーフワード (16 ビット) で表示します。
- l
-
ロングワード (32 ビット) で表示します。
- a
-
表示されたロケーションを表示します。
- A
-
可能ならばロケーションを行番号で表示します。
- x
-
符号無しの 16 進数で表示します。
- z
-
符号付きの 16 進数で表示します。
- o
-
符号無しの 8 進数で表示します。
- d
-
符号付きの 10 進数で表示します。
- u
-
符号無しの 10 進数で表示します。
- r
-
現在の基数を符号付きで表示します。
- c
-
下位 8 ビットを文字として表示します。
表示できない文字は 8 進数のエスケープコード (例: `\000')
で表示されます。
- s
-
そのロケーションをナル文字で終了する文字列として表示します。
表示できない文字は 8 進数のエスケープコードで表示されます。
- m
-
各行末に文字ダンプをつけて符号無しの 16 進数で表示します。
各行頭にロケーションも 16 進数で表示されます。
- i
-
命令として表示します。
- I
-
マシンに依存したおそらく別のフォーマットで命令として表示します。
- VAX
-
外部ラベルを手続きのエントリマスクとして想定しません。
- i386
-
続くロングワードの境界の丸めを行いません。
- MIPS
-
レジスタの内容を表示します。
- xf
-
前方検査:
最後に指定されたパラメータを使って、検査コマンドを実行します。
最後に実行されたコマンドによって表示されたアドレスが
開始アドレスとして使われます。
- xb
-
後方検査:
最後に指定されたパラメータを使って、検査コマンドを実行します。
最後に実行されたコマンドによって表示されたアドレスから
表示されたもののサイズを引いた結果が開始アドレスとして使われます。
- print [/acdoruxz
]
-
指定された修飾子文字 (上述の
examine
参照) にしたがって、
addr
を表示します。
有効なフォーマットは
a
x
z
o
d
u
r
c
です。
修飾子が指定されないと、最後に指定されたものが使われます。
addr
は文字列で指定することができます。
その場合はその通りに表示されます。
例えば、
print/x "eax = " $eax "\necx = " $ecx "\n"
は次のように表示されます。
eax = xxxxxx
ecx = yyyyyy
-
write [/bhl
]
addr expr1 [expr2 ...
]
-
コマンド行で
addr
の後に指定された式を
addr
からはじまるロケーションに書き込みます。
書き込みサイズの単位は修飾子として文字
b
(バイト),
h
(ハーフワード),
l
(ロングワード) としてそれぞれ指定できます。
これが省略されると、ロングワードが指定されたものとみなされます。
警告
式の間にはデリミタがないので、奇妙なことが起こり得ます。
各式は括弧で括ったほうがいいでしょう。
-
set
$ variable
[=
]
expr
-
名前つき変数やレジスタに
expr
の値をセットします。
有効な変数名は後述します。
- break [/u
]
-
addr
にブレークポイントをセットします。
count
が指定されたら、ブレークポイントで停止するまで、
count
- 1 回継続します。
ブレークポイントがセットされたら、ブレークポイント番号が
`#
'
で表示されます。
この数字はブレークポイントを削除したり、
それに条件を追加するのに使うことができます。
修飾子
u
が指定されると、
このコマンドはユーザ空間アドレスにブレークポイントをセットします。
u
オプションが指定されない場合は、
アドレスはカーネル空間のものであると判断され、
空間アドレスが間違っていると、
それは受け付けられずエラーメッセージが表示されます。
この修飾子は
マシン依存ルーチンによってサポートされているときのみ使うことができます。
警告
ユーザテキストが通常のユーザ空間デバッガによってシャドウされている場合は、
ユーザ空間のブレークポイントは正しく動作しません。
また、低レベルのコードパスにおいてブレークポイントをセットすると
奇妙なことも起こるかもしれません。
- delete addr
-
- delete # number
-
ブレークポイントを削除します。
削除対象のブレークポイントは
#
でブレークポイント番号を指定するか、
元の
break
コマンドで指定したものと同じ
addr
によって指定します。
- step [/p
]
-
count
回シングルステップで実行します
(ここではコンマは必ず付けなければなりません)。
修飾子
p
が指定されると、各ステップ毎に命令を表示します。
これが指定されない場合は、最後の命令のみを表示します。
警告
マシンのタイプによって異なります。
いくつかの低レベルのコードパスやユーザコードのシングルステップ実行は
できないかもしれません。
ソフトウェアによってシングルステップをエミュレートしているマシン
(例: pmax) では、割り込みハンドラで実行されているコードからの
ステップ実行はおそらく間違ったことを行うことになるでしょう。
- continue [/c
]
-
ブレークポイントかウォッチポイントまで実行を継続します。
修飾子
c
が指定されると、実行中の命令をカウントします。
- pmax のようないくつかのマシンでは load と store もカウントします。
警告
カウント中はデバッガは何も表示せずにシングルステップを実行しています。
これは低レベルのコードでのシングルステップ実行が奇妙な振舞いを引き起こす
かもしれないことを意味しています。
- until [/p
]
-
次の call か return 命令で止まります。
修飾子
p
が指定されると、
深くネストした call と命令の累積カウントを各 call もしくは return
で表示します。
この指定がなければ、マッチする return にヒットした時にのみ表示します。
- next [/p
]
-
- match [/p
]
-
マッチする return 命令で止まります。
修飾子
p
が指定されると、
深くネストした call と命令の累積カウントを各 call もしくは return
で表示します。
この指定がなければ、マッチする return にヒットした時にのみ表示します。
-
trace [/u
]
[frame
]
[,count
]
-
スタックトレース。
オプション
u
を指定すると、ユーザ空間をトレースします。
これがなければ、
trace
はカーネル空間のみをトレースします。
count
はトレースされるフレーム数です。
count
が省略されると、全てのフレームが表示されます。
警告
ユーザ空間スタックトレースは、
マシン依存コードによってサポートされている場合のみ有効となります。
-
search [/bhl
]
addr
value
[mask
]
[,count
]
-
メモリ中で
value
を検索します。
もし検索した値が見つからなければ、
このコマンドは興味深い方法で失敗するでしょう。
これは ddb がメモリを不正にアクセスした場合に常にリカバーしているわけでは
ないことに起因しています。
オプションの引数
count
によって検索を制限します。
- show all procs [/m
]
-
- ps [/m
]
-
全てのプロセスの情報を表示します。
プロセスの情報はマシンによってサポートされていない場合や、
ターゲットのプロセスのスタックの底がその時にメインメモリにない場合は
表示されないかもしれません。
修飾子
m
によって、プロセスの VM マップアドレスを表示し、
他の情報を表示しないようにできます。
- show registers [/u
]
-
レジスタセットを表示します。
オプション
u
が指定されると、カーネルか現在セーブされているものの代わりに
ユーザレジスタが表示されます。
警告
修飾子
u
のサポートはマシンに依ります。
サポートされていない場合は、正しくない情報が表示されるでしょう。
-
show map [/f
]
addr
-
addr
における VM マップを表示します。
修飾子
f
が指定されると、完全なマップが表示されます。
-
show object [/f
]
addr
-
addr
における VM オブジェクトを表示します。
オプション
f
が指定されると、完全なオブジェクトが表示されます。
- show watches
-
全てのウォッチポイントを表示します。
-
watch
addr , size
-
ある領域にウォッチポイントをセットします。
その領域への変更が試みられた時に、実行は停止します。
引数
size
のデフォルトは 4 です。
間違った空間アドレスを指定すると、その要求は拒否されエラーメッセージが
表示されます。
警告
ハードコーディングされたカーネルメモリをウォッチポイントにセットすると、
- i386 のようないくつかのシステムでは復旧不可能なエラーが発生することがあります。
ユーザアドレスでのウォッチポイントがもっともうまく動作します。
- gdb
-
リモート GDB モードと DDB モードを切り替えます。
リモート GDB モードでは、
リモートデバッグ機能を使って
gdb(1)
を実行するためにターゲットマシンのシリアルコンソールに接続されているもう
1 台のマシンが必要となります。
現在は
i386
アーキテクチャでのみ利用することができます。
- help
-
利用可能なコマンドとコマンドの短縮形の要約を表示します。
索引
変数
デバッガはレジスタと変数を
$ name
としてアクセスします。
レジスタ名は
``show registers
''
コマンドで示されるものです。
変数には変数名の頭に数字を付加したり、
変数名の直後にコロンに続いていくつかの修飾子を指定することができます。
たとえば、レジスタ変数は
$eax:u
のように修飾子
u
をつけてユーザレジスタを表すことができます。
現在サポートされているビルトイン変数には次のものがあります。
- radix
-
入力と出力の基数
- maxoff
-
offset が maxoff より大きくなければ、
アドレスは 'symbol'+offset として表示されます。
- maxwidth
-
表示行の幅
- lines
-
行数。"more" 機能で使われます。
- tabstops
-
タブストップ幅。
- work xx
-
ワーク変数。
xx
は 0 から 31 の値をとることができます。
索引
式
`~
'
と
`^
'
と
単項演算子の
`&
'
を除き、C 言語のほとんど全ての式の演算子がサポートされています。
での特別ルールは以下の通りです。
- 識別子
-
シンボルの名称はシンボルの値に翻訳されます。
それは対応するオブジェクトのアドレスとなります。
`.
'
と
`:
'
は識別子に使うことができます。
オブジェクトフォーマット依存ルーチンによってサポートされていれば、
[filename :
]
func : lineno
と
[filename :
]
variable
と
[filename :
]
lineno
はシンボルとして受け入れられます。
- 数字
-
基数は最初の 2 文字で決定されます。
0x
は 16 進数,
0o
は 8 進数,
0t
は 10 進数となり、これらの他は現在の基数にしたがいます。
- .
-
`dot'
- +
-
`next'
- ..
-
検査した最後の行の始めのアドレス。
`dot' や `next' とは違い、これは
``examine
''
か
``write
''
コマンドでのみ変更されます。
- '
-
明示的に指定した最後のアドレス。
- $ variable
-
指定された変数の値に翻訳されます。
これに
:
と修飾子を前述したように続けることができます。
- a # b
-
左側を右側の次の倍数に切り上げる 2 項演算子。
- * expr
-
間接。
これに
`:
'
と修飾子を前述したように続けることができます。
索引
関連項目
gdb(1)
索引
歴史
デバッガは Mach 用に開発され、386BSD 0.1 に移植されました。
このマニュアルページは Garrett Wollman によって
-man
マクロから書き換えられました。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- コマンド
-
- 変数
-
- 式
-
- 関連項目
-
- 歴史
-
Time: 07:07:21 GMT, January 12, 2009