Solaris モジューラデバッガ

第 4 章 対話

この章では、MDB の対話型コマンド行編集機能と履歴機能、出力ページャー、およびデバッガのシグナル処理について説明します。

コマンド行の再入力

端末デバイスから入力した最後の HISTSIZE (デフォルトは 128) 個のコマンドのテキストはメモリーに保存されます。次に説明するインライン編集機能が提供するキーマッピングを使用すると、この履歴リストから以前入力したコマンドを検索および取得できます。

インライン編集機能

標準入力が端末デバイスである場合、コマンド行を編集するために、MDB が提供するいくつかのシンプルな emacs スタイルの機能を使用できます。編集モードの searchprevious、および next コマンドを使用すると、履歴リストにアクセスできます。検索するときに一致するのは、パターンではなく、文字列だけです。次に示すリストにおいて、制御記号はキャレット文字 (^) とそれに続く大文字の英字で表記されます。エスケープシーケンスは M- とそれに続く文字で表記されます。たとえば、M-f (「メタエフ」と呼ぶ) を入力するには、まず <ESC> を押して、次に「f」を押すか、あるいは Meta キーをサポートしているキーボード上では、まず Meta キーを押して、次に「f」を押します。コマンド行を発行および実行するには、復帰改行文字 (RETURN または NEWLINE) を使用します。編集コマンドは次のとおりです。

^F

カーソルを 1 文字だけ前方 (右) に移動します。

M-f

カーソルを 1 単語だけ前方に移動します。

^B

カーソルを 1 文字だけ後方 (左) に移動します。

M-b

カーソルを 1 単語だけ後方に移動します。

^A

カーソルを行の先頭に移動します。

^E

カーソルを行の末尾に移動します。

^D

カーソルのある行が空でない場合、カーソル位置の文字を削除します。カーソルのある行が空である場合、^D は EOF を意味し、デバッガは終了します。

M-^H

(メタ - バックスペース) 直前の単語を削除します。

^K

カーソルから行の末尾までを削除します。

^L

カーソルのある行を出力し直します。

^T

現在の文字と次の文字を入れ換えます。

^N

履歴リストから次のコマンドを取得します。^N を入力するたびに、さらに次のコマンドが取得されます。

^P

履歴リストから前のコマンドを取得します。^P を入力するたびに、さらに前のコマンドが取得されます。

^R[string]

履歴リストから文字列を含むコマンドを後方に検索します。文字列は復帰改行文字 (RETURN または NEWLINE) で終了する必要があります。文字列を省略した場合、前回入力した文字列を含むコマンドを検索します。

編集モードはまた、次のようなユーザー定義シーケンスも編集コマンドとして解釈します。ユーザー定義シーケンスを読み取ったり、変更したりするには、stty(1) コマンドを使用します。

erase

ユーザー定義の消去文字 (通常は ^H または ^?)。前の 1 文字を削除します。

intr

ユーザー定義の割り込み文字 (通常は ^C)。現在のコマンドを中断して、新しいプロンプトを出力します。

kill

ユーザー定義の強制終了文字 (通常は ^U)。現在のコマンド行全体を強制終了します。

quit

ユーザー定義の終了文字 (通常は ^\)。デバッガを終了します。

suspend

ユーザー定義の中断文字 (通常は ^Z)。デバッガを中断します。

werase

ユーザー定義の単語消去文字 (通常は ^W)。直前の単語を消去します。

矢印キーのある拡張キーパッドをサポートするキーボード上では、mdb は次のようなキーストロークも編集コマンドとして解釈します。

up-arrow

履歴リストから前のコマンドを取得します (^P と同じ)。

down-arrow

履歴リストから次のコマンドを取得します (^N と同じ)。

left-arrow

カーソルを 1 文字だけ後方に移動します (^B と同じ)。

right-arrow

カーソルを 1 文字だけ前方に移動します (^F と同じ)。

キーボードショートカット

MDB には、1 組のキーボードショートカットが用意されており、下の表に示すキーストロークが、MDB プロンプトに続く最初の文字として入力されたときに、個々のキーストロークが一般的な MDB コマンドに結合されます。キーボードショートカットは次のとおりです。

[

コマンド ::step over を実行します

]

コマンド ::step を実行します

出力ページャー

mdb には出力ページャーが組み込まれています。出力ページャーを使用できるのは、デバッガの標準出力が端末デバイスである場合だけです。コマンドを実行するたびに、mdb は 1 画面分の出力を生成してから中断し、次のようなページャーのプロンプトを表示します。


>> More [<space>, <cr>, q, n, c, a] ?

出力ページャーは次のようなキーシーケンスを認識します。

空白文字

次の 1 画面分の出力を表示します。

a、A

現在のトップレベルのコマンドを中止して、プロンプトに戻ります。

c、C

現在のトップレベルのコマンドが完了するまで、画面ごとに中断するのではなく、出力を表示し続けます。

n、N、復帰改行文字 (NEWLINE または RETURN)

次の 1 行分の出力を表示します。

q、Q、^C、^\

現在の dcmd を終了 (中止) します。

シグナル処理

PIPE および QUIT のシグナルの場合、デバッガは無視します。INT シグナルの場合、現在実行中のコマンドが中止されます。ILL、TRAP、EMT、FPE、BUS、および SEGV のシグナルの場合、デバッガは中断され、特別な処理を行います。これらのシグナルが非同期的に生成された場合 (つまり、kill(2) を使用して別のプロセスから配信された場合)、mdb はシグナルをそのデフォルトの設定に復元して、コアダンプを生成します。しかし、これらのシグナルがデバッガプロセス自身によって同期的に生成され、外部的に読み込まれた dmod から dcmd が現在実行されており、さらに、標準入力が端末である場合、ユーザーは mdb が提供するメニューを使用して、強制的にコアダンプを生成するか、コアダンプを生成せずに終了するか、停止してデバッガに接続するか、あるいは、そのまま再開するかを選択できます。再開オプションを選択した場合、すべてのアクティブなコマンドは中止され、障害が発生したときに dcmd がアクティブであった dmod を読み込み解除します。この後、ユーザーは dmod を読み込み直すことができます。dcmd にバグがある場合に対して、再開オプションは制限付きの保護機能を提供します。再開オプションの危険性については、「警告」の「エラー回復メカニズムの使用」を参照してください。