次: , 前: Command Syntax, 上: Commands


3.2 コマンド名の補完

途中まで入力されたコマンド名は、 それがあいまいでなければ、 GDBが残りの部分を補完してくれます。 また、 いつでも、 コマンド名の補完候補の一覧を表示してくれます。 この機能は、 GDBコマンド名、 GDBサブ・コマンド名、 ユーザ・プログラムのシンボル名に対して有効です。

GDBに単語の残りの部分を補完させたい場合には、 <TAB>キーを押します。 補完候補が1つしか存在しない場合、 GDBは残りの部分を補完し、 ユーザがコマンドを (<RET>キーを押すことで) 完結させるのを待ちます。 例えば、 ユーザが以下のように入力したとしましょう。

     (gdb) info bre <TAB>

GDBは`breakpoints'という単語の残りの部分を補完します。 なぜなら、 infoコマンドのサブ・コマンドのうち、 `bre'で始まるのはこの単語だけだからです。

     (gdb) info breakpoints

この時点で、 ユーザは<RET>キーを押してinfo breakpointsコマンドを実行するか、 あるいは`breakpoints'コマンドが実行したいコマンドではなかった場合には、 バックスペース・キーを押してこれを消去してから、 他の文字を入力することができます (最初からinfo breakpointsコマンドを実行するつもりであれば、 コマンド名補完機能ではなくコマンド名の省略形を利用して、 `info bre'と入力した後、 ただちに<RET>キーを押してもいいでしょう)。

<TAB>キーが押されたときに、 2つ以上の補完候補が存在する場合、 GDBはベル音を鳴らします。 さらにいくつか文字を入力してから補完を再度試みることも可能ですし、 単に続けて<TAB>キーを押すことも可能です。 後者の場合、 GDBは補完候補の全一覧を表示します。 例えば、 `make_'で始まる名前を持つサブルーチンにブレイクポイントを設定したいような場合に、 b make_まで入力して<TAB>キーを入力したところベル音が鳴ったとしましょう。 ここで続けて<TAB>キーを入力すると、 プログラム内の`make_'で始まるすべてのサブルーチン名が表示されます。 例えば、 以下のように入力したとします。

     (gdb) b make_ <TAB>

ここでGDBはベル音を鳴らします。 もう一度<TAB>キーを入力すると、 以下のように表示されます。

     make_a_section_from_file     make_environ
     make_abs_section             make_function_type
     make_blockvector             make_pointer_type
     make_cleanup                 make_reference_type
     make_command                 make_symbol_completion_list
     (gdb) b make_

補完候補を表示した後、 ユーザが続きを入力できるよう、 GDBは途中まで入力された文字列 (ここでは`b make_') を再表示します。

最初から補完候補の一覧を表示したいのであれば、 <TAB>キーを2回押す代わりにM-?を入力することもできます。 ここで、 M-?というのは<META> ?を意味します。 これを入力するには、 キーボード上に<META>シフト・キーとして指定されたキーがあれば、 それを押しながら?を入力します。 <META>シフト・キーがない場合には、 <ESC>キーを押した後、 ?を入力します。

ときには、 入力したい文字列が、 論理的には『単語』であっても、 GDBが通常は単語の一部に含めない括弧のような文字を含む場合があります。 このような場合に単語の補完機能を使用するためには、 GDBコマンド内において、 そのような単語を' (単一引用符) で囲みます。

このようなことが必要になる可能性が最も高いのは、 C++関数名を入力するときでしょう。 これは、 C++が関数のオーバーローディング (引数の型の違いによって識別される、 同一の名前を持つ関数の複数の定義) をサポートしているからです。 例えば、 関数nameにブレイクポイントを設定する場合、 それがint型のパラメータを取るname(int)なのか、 それともfloat型のパラメータを取るname(float)なのかをはっきりさせる必要があります。 このような場合に単語の補完機能を使用するには、 単一引用符'を関数名の前に入力します。 こうすることによって、 <TAB>キーまたはM-?キーが押されて単語補完が要求されたときに、 補完候補の決定には通常よりも多くのことを検討する必要のあることがGDBに通知されます。

     (gdb) b 'bubble( <M-?>
     bubble(double,double)    bubble(int,int)
     (gdb) b 'bubble(

場合によっては、 名前の補完をするには引用符を使用する必要があるということを、 GDBが自分で認識できることもあります。 このような場合、 ユーザが引用符を入力していなくても、 GDBが (可能な限り補完を行いつつ) 引用符を挿入してくれます。

     (gdb) b bub <TAB>

GDBは入力された1行を以下のように変更し、
ベル音を鳴らします。 (gdb) b 'bubble(

一般的には、 オーバーロードされたシンボルに対して補完が要求された際に引数リストがまだ入力されていないと、 GDBは、 引用符が必要であると判断します (そして実際に挿入します)。

オーバーロードされた関数に関する情報については、 see C++ expressions。 コマンドset overload-resolution offを使用すれば、 オーバーロードの解決を無効化することができます。 see GDB features for C++