[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


GDB/MIインターフェイス

機能と目的

GDB/MIは、 GDBに対する行ベース・マシン用のテキスト・インターフェイスです。 これは、 より大きなシステムの中における小さなコンポーネントとしてこのデバッガを使うシステムの開発をサポートすることを、 特に意識しています。

この章は、 GDB/MIインターフェイスの仕様書であり、 リファレンス・マニュアルの形式で記述されています。

GDB/MIは現在まだ開発中のものですので、 以下に説明されている機能のいくつかは不完全であったり変更されたりする可能性があります。 注意してください。

表記法と用語

この章では、 以下の表記を使います。

謝辞

アルファベット順: Andrew Cagney、 Fernando Nasser、 Stan Shebs、 Elena Zannoni

GDB/MIコマンド構文

GDB/MI入力構文

command ==>
cli-command | mi-command
cli-command ==>
[ token ] cli-command nl
cli-commandは既存の任意のGDB CLIコマンド。
mi-command ==>
[ token ] "-" operation ( " " option )* [ " --" ] ( " " parameter )* nl
token ==>
"連続した任意の数字"
option ==>
"-" parameter [ " " parameter ]
parameter ==>
operation ==>
このドキュメントにおいて説明される任意のオペレーション
non-blank-sequence ==>
"-"、 nl、 """、 " "のような特殊な文字を含まないという条件を満足する任意の文字列
c-string ==>
""" 7ビットのISO C文字列 """
nl ==>
CR | CR-LF

注:

プラグマティクス:

GDB/MI出力構文

GDB/MIからの出力は、 0個以上の帯域外レコード(13)から構成されます。 この後に結果レコードが1つ続くことがあります。 この結果レコードは最後に実行されたコマンドによるものです。 連続した出力レコードは`(gdb)'により終了します。

入力コマンドの接頭語としてtokenが付いたのであれば、 そのコマンドに対応する出力にも同一のtokenが接頭語として付くことになります。

output ==>
( out-of-band-record )* [ result-record ] "(gdb)" nl
result-record ==>
[ token ] "^" result-class ( "," result )* nl
out-of-band-record ==>
async-record | stream-record
async-record ==>
exec-async-output | status-async-output | notify-async-output
exec-async-output ==>
[ token ] "*" async-output
status-async-output ==>
[ token ] "+" async-output
notify-async-output ==>
[ token ] "=" async-output
async-output ==>
async-class ( "," result )* nl
result-class ==>
"done" | "running" | "connected" | "error" | "exit"
async-class ==>
"stopped" (必要に応じて追加していく予定ですが、 まだ開発途中です)
result ==>
[ string "=" ] value
value ==>
const | "{" result ( "," result )* "}"
const ==>
c-string
stream-record ==>
console-stream-output | target-stream-output | log-stream-output
console-stream-output ==>
"~" c-string
target-stream-output ==>
"@" c-string
log-stream-output ==>
"&" c-string
nl ==>
CR | CR-LF
token ==>
連続した任意の数字

さらに、 以下のものが現在開発中です。

query
このアクションは現在未定義です。

注:

さまざまな出力レコードに関する詳細については、 GDB/MIストリーム・レコード を参照してください。

現在の出力構文に対して提案されている改訂内容については、 GDB/MI出力構文の変更案 を参照してください。

GDB/MIとのやりとりの簡単な例

このサブセクションでは、 GDB/MIインターフェイスを使ったやりとりの簡単な例をいくつか紹介します。 これらの例では、 `->'がGDB/MIに入力として渡される行を、 `<-'がGDB/MIからの出力をそれぞれ示しています。

ターゲットの停止

以下に、 下位プロセスを停止する例を示します。

-> -stop
<- (gdb)

この後に以下が表示されます。

<- *stop,reason="stop",address="0x123",source="a.c:123"
<- (gdb)

簡単なCLIコマンド

以下に、 GDB/MIを経由してCLIに渡される簡単なCLIコマンドの例を示します。

-> print 1+2
<- ~3\n
<- (gdb)

副作用を持つコマンド

-> -symbol-file xyz.exe
<- *breakpoint,nr="3",address="0x123",source="a.c:123"
<- (gdb)

不正なコマンド

以下に、 存在しないコマンドを渡した場合に何が起こるかを示します。

-> -rubbish
<- error,"Rubbish not found"
<- (gdb)

CLIに対するGDB/MIの互換性

GDBの既存のCLIインターフェイスを熟知しているユーザを支援するために、 GDB/MIは既存のCLIコマンドも受け付けます。 構文によって指定されているとおり、 そのようなコマンドはGDB/MIインターフェイスに対して直接入力することが可能であり、 それに対してGDBが応答を返します。

このメカニズムは、 GDB/MIクライアントの開発者を支援するために提供されているもので、 CLIに対する信頼性のあるインターフェイスとして提供されているわけではありません。 コマンドは、 GDB/MIが動作していることを前提とする環境において解釈されるため、 実際の出力は、 GDB/MIの出力とCLIの出力とが混在したものになってしまうでしょう。 このような混在出力をサポートしているわけではありません。

GDB/MI出力レコード

GDB/MI結果レコード

いくつかの帯域外通知(14)に加えて、 GDB/MIコマンドに対する応答には、 以下のような結果の表示が1つ含まれます。

"^done" [ "," results ]
同期オペレーションが成功したことを示します。 resultsが戻り値です。
"^running"
非同期オペレーションの開始が成功したことを示します。 ターゲットは実行中です。
"^error" "," c-string
オペレーションが失敗したことを示します。 c-stringには、 対応するエラー・メッセージが含まれます。

GDB/MIストリーム・レコード

GDBは、 内部的にいくつかの出力ストリームを保持しています。 コンソール用、 ターゲット用、 ログ用のものです。 個々のストリームに向けた出力は、 ストリーム・レコードを使ってGDB/MIインターフェイスを経由します。

個々のストリーム・レコードは、 そのストリームを一意に識別する接頭文字で始まります (GDB/MI出力構文参照)。 この接頭文字に加えて、 個々のストリーム・レコードはstring-outputを含みます。 これは、 (暗黙の改行を含む) 加工されていないテキストか、 もしくは、 引用符で囲まれたC文字列 (こちらは暗黙の改行を含みません) のいずれかです。

"~" string-output
コンソール出力ストリームには、 CLIのコンソール・ウィンドウに表示されるべきテキストが入ります。 そこには、 CLIコマンドへのテキストによる応答が入ります。
"@" string-output
ターゲット出力ストリームには、 実行中のターゲットからのテキストによる出力が入ります。
"&" string-output
ログ・ストリームには、 GDB内部から出力されるデバッグ用メッセージが入ります。

GDB/MI帯域外レコード

帯域外レコードは、 追加的に発生した変化をGDB/MIクライアントに通知するために使われます。 これらの変化は、 GDB/MIの結果 (例えばブレイクポイントの変更)、 または、 ターゲットの活動結果 (例えばターゲットの停止) のいずれかです。

以下に、 可能な帯域外レコードの予備的な一覧を示します。

"*" "stop"

GDB/MIコマンド記述フォーマット

残りのセクションでは、 コマンド・ブロックについて記述します。 個々のコマンド・ブロックは、 この章と類似の方法でレイアウトされています。

例の中に示されている改行は読みやすくするためのものであるという点に注意してください。 実際の出力では改行されません。 また、 (N.A.と記されている) 例のないコマンドはまだ実装されていませんので、 その点にも注意してください。

動機

このコマンド集合を提供する動機

紹介

このコマンド集合全体の簡単な紹介

コマンド

ブロック内の個々のコマンドについて、 以下のことが説明されます。

概要

 -command args...

GDBコマンド

対応するGDB CLIコマンド

結果

帯域外

GDB/MIブレイクポイント・テーブル・コマンド

このセクションでは、 ブレイクポイントを操作するためのGDB/MIコマンドについて説明します。

-break-afterコマンド

概要

 -break-after number count

ブレイクポイント番号がnumberのブレイクポイントは、 そこにcount回到達した後にしか有効になりません。 このことが`-break-list'コマンドの出力にどのように反映されるかという点については、 下記の`-break-list'コマンドの説明を参照してください。

GDBコマンド

対応するGDBコマンドは`ignore'です。

(gdb)
-break-insert main
^done,bkpt={number="1",addr="0x000100d0",file="hello.c",line="5"}
(gdb)
-break-after 1 3
~
^done
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x000100d0",func="main",file="hello.c",line="5",times="0",
ignore="3"}}
(gdb)

-break-condition

概要

 -break-condition number expr

ブレイクポイント番号がnumberのブレイクポイントは、 exprによって指定される条件が真である場合にのみ停止します。 この条件は、 `-break-list'の出力の一部となります (下記の`-break-list'コマンドの説明を参照してください)。

GDBコマンド

対応するGDBコマンドは`condition'です。

(gdb)
-break-condition 1 1
^done
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x000100d0",func="main",file="hello.c",line="5",cond="1",
times="0",ignore="3"}}
(gdb)

-break-deleteコマンド

概要

 -break-delete ( breakpoint )+

引数リストにおいて指定されたブレイクポイント番号 (複数可) を持つブレイクポイントを削除します。 これは当然、 ブレイクポイント一覧に反映されます。

GDBコマンド

対応するGDBコマンドは`delete'です。

(gdb)
-break-delete 1
^done
(gdb)
-break-list
^done,BreakpointTable={}
(gdb)

-break-disableコマンド

概要

 -break-disable ( breakpoint )+

breakpointにより指定されたブレイクポイント (複数可) を無効にします。 ここで指定されたブレイクポイントについては、 ブレイクポイント一覧の`enabled'フィールドに`n'がセットされます。

GDBコマンド

対応するGDBコマンドは`disable'です。

(gdb)
-break-disable 2
^done
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"}}
(gdb)

-break-enableコマンド

概要

 -break-enable ( breakpoint )+

breakpointにより指定される (以前に無効にされた) ブレイクポイント (複数可) を有効にします。

GDBコマンド

対応するGDBコマンドは`enable'です。

(gdb)
-break-enable 2
^done
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"}}
(gdb)

-break-infoコマンド

概要

 -break-info breakpoint

1つのブレイクポイントに関する情報を取得します。

GDBコマンド

対応するGDBコマンドは`info break breakpoint'です。

N.A.

-break-insertコマンド

概要

 -break-insert [ -t ] [ -h ] [ -r ]
    [ -c condition ] [ -i ignore-count ]
    [ -p thread ] [ line | addr ]

lineが指定される場合、 それは以下のいずれか1つです。

このコマンドにおいて使うことのできる任意選択のパラメータには以下があります。

`-t'
一時的なブレイクポイントを挿入します。
`-h'
ハードウェア・ブレイクポイントを挿入します。
`-c condition'
ブレイクポイントに条件conditionを付与します。
`-i ignore-count'
ignore-countを初期化します。
`-r'
与えられた正規表現にマッチする名前を持つ関数すべてに、 通常のブレイクポイントを挿入します。 これ以外のフラグは、 正規表現には適用できません。

結果

結果は以下のような形式になります。

 ^done,bkptno="number",func="funcname",
  file="filename",line="lineno"

numberは、 このブレイクポイントに対してGDBが付与した番号です。 funcnameは、 ブレイクポイントが挿入された関数の名前です。 filenameは、 この関数を含むソース・ファイルの名前です。 linenoは、 そのファイル内のソースの行番号です。

注: このフォーマットは変更される可能性があります。

GDBコマンド

対応するGDBコマンドは、 `break'`tbreak'`hbreak'`thbreak'`rbreak'です。

(gdb)
-break-insert main
^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
(gdb)
-break-insert -t foo
^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",line="11"}
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x0001072c", func="main",file="recursive2.c",line="4",times="0"},
bkpt={number="2",type="breakpoint",disp="del",enabled="y",
addr="0x00010774",func="foo",file="recursive2.c",line="11",times="0"}}
(gdb)
-break-insert -r foo.*
~int foo(int, int);
^done,bkpt={number="3",addr="0x00010774",file="recursive2.c",line="11"}
(gdb)

-break-listコマンド

概要

 -break-list

挿入されたブレイクポイントの一覧を表示します。 表示される一覧には以下のフィールドが含まれます。

`Number'
ブレイクポイント番号
`Type'
ブレイクポイント種別: `breakpoint'または`watchpoint'
`Disposition'
ブレイクポイントに到達したときに、 それを削除するべきか、 あるいは、 無効にするべきか: `keep'または`nokeep'
`Enabled'
ブレイクポイントは有効か: `y'または`n'
`Address'
ブレイクポイントがセットされたメモリ位置
`What'
関数名、 ファイル名、 行番号によって表現される、 ブレイクポイントの論理的な位置
`times'
ブレイクポイントの到達回数

ブレイクポイントやウォッチポイントが存在しない場合、 BreakpointTableフィールドの一覧は空になります。

GDBコマンド

対応するGDBコマンドは`info break'です。

(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"},
bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
addr="0x00010114",func="foo",file="hello.c",line="13",times="0"}}
(gdb)

以下に、 ブレイクポイントが存在しない場合の結果の例を示します。

(gdb)
-break-list
^done,BreakpointTable={}
(gdb)

-break-watchコマンド

概要

 -break-watch [ -a | -r ]

ウォッチポイントを生成します。 `-a'オプションとともに指定すると、 accessウォッチポイントが生成されます。 これは、 あるメモリ位置に対する読み取りや書き込みが行われたことを契機とするウォッチポイントです。 `-r'オプションとともに指定すると、 readウォッチポイントが生成されます。 これは、 あるメモリ位置が読み取りのためにアクセスされたことのみを契機とするウォッチポイントです。 どちらのオプションも指定しないと、 生成されるのは通常のウォッチポイントです。 これは、 あるメモリ位置が書き込みのためにアクセスされたことを契機とするウォッチポイントです。 ウォッチポイントの設定を参照してください。。

`-break-list'は、 挿入されたウォッチポイントとブレイクポイントを1つの一覧にして報告しますので、 注意してください。

GDBコマンド

対応するGDBコマンドは、 `watch'`awatch'`rwatch'です。

main関数の中の変数に対してウォッチポイントをセットした例を示します。

(gdb)
-break-watch x
^done,wpt={number="2",exp="x"}
(gdb)
-exec-continue
^running
^done,reason="watchpoint-trigger",wpt={number="2",exp="x"},
value={old="-268439212",new="55"},
frame={func="main",args={},file="recursive2.c",line="5"}
(gdb)

ある関数の中の局所的な変数に対してウォッチポイントをセットした例を示します。 GDBはプログラムの実行を2回停止します。 1回目はその変数の値の変更によるもの、 2回目はウォッチポイントがスコープの範囲外になることによるものです。

(gdb)
-break-watch C
^done,wpt={number="5",exp="C"}
(gdb)
-exec-continue
^running
^done,reason="watchpoint-trigger",
wpt={number="5",exp="C"},value={old="-276895068",new="3"},
frame={func="callee4",args={},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
(gdb)
-exec-continue
^running
^done,reason="watchpoint-scope",wpnum="5",
frame={func="callee3",args={{name="strarg",
value="0x11940 \"A string argument.\""}},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
(gdb)

ブレイクポイントとウォッチポイントの一覧を、 プログラム実行のさまざまな時点において表示させた場合の例を示します。 ウォッチポイントがスコープの範囲外になると一覧から削除されることに注意してください。

(gdb)
-break-watch C
^done,wpt={number="2",exp="C"}
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x00010734",func="callee4",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
bkpt={number="2",type="watchpoint",disp="keep",
enabled="y",addr="",what="C",times="0"}}
(gdb)
-exec-continue
^running
^done,reason="watchpoint-trigger",wpt={number="2",exp="C"},
value={old="-276895068",new="3"},
frame={func="callee4",args={},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x00010734",func="callee4",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
bkpt={number="2",type="watchpoint",disp="keep",
enabled="y",addr="",what="C",times="-5"}}
(gdb)
-exec-continue
^running
^done,reason="watchpoint-scope",wpnum="2",
frame={func="callee3",args={{name="strarg",
value="0x11940 \"A string argument.\""}},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
(gdb)
-break-list
^done,BreakpointTable={hdr={"Num","Type","Disp","Enb","Address","What"},
bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
addr="0x00010734",func="callee4",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"}}
(gdb)

GDB/MIデータ操作

このセクションでは、 データを操作するGDB/MIコマンドについて説明します。 データの操作とは、 メモリやレジスタの値を調べたり、 式を評価することなどを指します。

-data-disassembleコマンド

概要

 -data-disassemble
    [ -s start-addr -e end-addr ]
  | [ -f filename -l linenum [ -n lines ] ]
  -- mode

各項目について以下に説明します。

`start-addr'
先頭アドレス ($pcの値)
`end-addr'
終端アドレス
`filename'
逆アセンブルするファイルの名前
`linenum'
その前後を逆アセンブルする行の番号
`lines'
生成される逆アセンブル行の行数。 この値が-1で、 end-addrが指定されていない場合、 関数全体が逆アセンブルされます。 end-addrがゼロ以外の値として指定されていて、 start-addrend-addrの間の逆アセンブル行数よりもlinesの値が小さい場合、 linesにより指定される行数しか表示されません。 linesの値が、 start-addrend-addrの間の行数よりも大きい場合は、 end-addrまでの行しか表示されません。
`mode'
0 (逆アセンブル結果のみの表示を指定) または 1 (ソースと逆アセンブル結果を混在させた表示を指定) のいずれかです。

結果

個々の命令に対応する出力は2つのフィールドから構成されます。

命令フィールドに含まれる情報は、 flatheadによって直接操作されることはないという点に注意してください。 すなわち、 そのフォーマットを調整することは不可能であるということです。

GDBコマンド

このコマンドからのCLIに対する直接のマッピングは存在しません。

$pcから$pc + 20までの範囲の現在の値を逆アセンブルする例を示します。

(gdb)
-data-disassemble -s $pc -e "$pc + 20" -- 0
^done,
asm_insns={
{address="0x000107c0",func-name="main",offset="4",
inst="mov  2, %o0"},
{address="0x000107c4",func-name="main",offset="8",
inst="sethi  %hi(0x11800), %o2"},
{address="0x000107c8",func-name="main",offset="12",
inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
{address="0x000107cc",func-name="main",offset="16",
inst="sethi  %hi(0x11800), %o2"},
{address="0x000107d0",func-name="main",offset="20",
inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}}
(gdb)

main関数全体を逆アセンブルする例を示します。 行番号32はmainの中にあります。

-data-disassemble -f basics.c -l 32 -- 0
^done,asm_insns={
{address="0x000107bc",func-name="main",offset="0",
inst="save  %sp, -112, %sp"},
{address="0x000107c0",func-name="main",offset="4",
inst="mov   2, %o0"},
{address="0x000107c4",func-name="main",offset="8",
inst="sethi %hi(0x11800), %o2"},
[...]
{address="0x0001081c",func-name="main",offset="96",inst="ret "},
{address="0x00010820",func-name="main",offset="100",inst="restore "}}
(gdb)

mainの先頭から3つの命令を逆アセンブルする例を示します。

(gdb)
-data-disassemble -f basics.c -l 32 -n 3 -- 0
^done,asm_insns={
{address="0x000107bc",func-name="main",offset="0",
inst="save  %sp, -112, %sp"},
{address="0x000107c0",func-name="main",offset="4",
inst="mov  2, %o0"},
{address="0x000107c4",func-name="main",offset="8",
inst="sethi  %hi(0x11800), %o2"}}
(gdb)

mainの先頭から3つの命令を逆アセンブルして、 混在モードで表示する例を示します。

(gdb)
-data-disassemble -f basics.c -l 32 -n 3 -- 1
^done,asm_insns={
src_and_asm_line={line="31",
file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
  testsuite/gdb.mi/basics.c",line_asm_insn={
{address="0x000107bc",func-name="main",offset="0",
inst="save  %sp, -112, %sp"}}},

src_and_asm_line={line="32",
file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
  testsuite/gdb.mi/basics.c",line_asm_insn={
{address="0x000107c0",func-name="main",offset="4",
inst="mov  2, %o0"},
{address="0x000107c4",func-name="main",offset="8",
inst="sethi  %hi(0x11800), %o2"}}}}
(gdb)

-data-evaluate-expressionコマンド

概要

 -data-evaluate-expression expr

exprを式として評価します。 その式の中には下位の関数呼び出しを含めることもできます。 関数呼び出しは同期的に実行されます。 式に空白が含まれる場合は、 式を二重引用符で囲む必要があります。

GDBコマンド

対応するGDBコマンドは、 `print'`output'`call'です。 gdbtkにのみ、 対応するコマンドとして`gdb_eval'があります。

以下の例においてコマンドに先行する番号は、 GDB/MIコマンド構文に説明されているトークンです。 GDB/MIが、 その出力の中で同一のトークンを返していることに注目してください。

211-data-evaluate-expression A
211^done,value="1"
(gdb)
311-data-evaluate-expression &A
311^done,value="0xefffeb7c"
(gdb)
411-data-evaluate-expression A+3
411^done,value="4"
(gdb)
511-data-evaluate-expression "A + 3"
511^done,value="4"
(gdb)

-data-list-changed-registersコマンド

概要

 -data-list-changed-registers

値の変化したレジスタの一覧を表示します。

GDBコマンド

このコマンドに直接類似するものをGDBは提供していません。 gdbtkには、 対応するコマンドとして`gdb_changed_register_list'があります。

PPC MBXボード上における例を示します。

(gdb)
-exec-continue
^running

(gdb)
*stopped,reason="breakpoint-hit",bkptno="1",frame={func="main",
args={},file="try.c",line="5"}
(gdb)
-data-list-changed-registers
^done,changed-registers={"0","1","2","4","5","6","7","8","9",
"10","11","13","14","15","16","17","18","19","20","21","22","23",
"24","25","26","27","28","30","31","64","65","66","67","69"}
(gdb)

-data-list-register-namesコマンド

概要

 -data-list-register-names [ ( regno )+ ]

カレント・ターゲットのレジスタ名の一覧を表示します。 引数が指定されない場合、 すべてのレジスタの名前を表示します。 正数値が引数として指定された場合、 その引数に対応するレジスタの名前の一覧を表示します。

GDBコマンド

`-data-list-register-names'に対応するコマンドをGDBは提供していません。 gdbtkには、 対応するコマンドとして`gdb_regnames'があります。

PPC MBXボード上における例を示します。

(gdb)
-data-list-register-names
^done,register-names={"r0","r1","r2","r3","r4","r5","r6","r7",
"r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
"r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
"r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
"f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
"f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
"pc","ps","cr","lr","ctr","xer"}
(gdb)
-data-list-register-names 1 2 3
^done,register-names={"r1","r2","r3"}
(gdb)

-data-list-register-valuesコマンド

概要

 -data-list-register-values fmt [ ( regno )*]

レジスタの内容を表示します。 fmtによって指定されるフォーマットにしたがって、 レジスタの内容が表示されます。 必須ではありませんが、 fmtの後ろに、 表示すべきレジスタを指定する番号の一覧を続けることもできます。 番号一覧を指定しないと、 すべてのレジスタの内容を表示しなければならないことを指定したことになります。

fmtに指定可能なフォーマットには以下のものがあります。

x
16進数
o
8進数
t
2進数
d
10進数
r
バイナリ・データ(Raw)
N
ナチュラル(natural)(15)

GDBコマンド

対応するGDBコマンドは、 `info reg'`info all-reg'です。 また、 gdbtkにおいては`gdb_fetch_registers'です。

PPC MBXボード上における例を示します。 (注: 改行は読みやすくするためのものであるという点に注意してください。 実際の出力では改行されません)

(gdb)
-data-list-register-values r 64 65
^done,register-values={{number="64",value="0xfe00a300"},
{number="65",value="0x00029002"}}
(gdb)
-data-list-register-values x
^done,register-values={{number="0",value="0xfe0043c8"},
{number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
{number="3",value="0x0"},{number="4",value="0xa"},
{number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
{number="7",value="0xfe011e98"},{number="8",value="0x2"},
{number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
{number="11",value="0x1"},{number="12",value="0x0"},
{number="13",value="0x4544"},{number="14",value="0xffdfffff"},
{number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
{number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
{number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
{number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
{number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
{number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
{number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
{number="29",value="0x0"},{number="30",value="0xfe010000"},
{number="31",value="0x0"},{number="32",value="0x0"},
{number="33",value="0x0"},{number="34",value="0x0"},
{number="35",value="0x0"},{number="36",value="0x0"},
{number="37",value="0x0"},{number="38",value="0x0"},
{number="39",value="0x0"},{number="40",value="0x0"},
{number="41",value="0x0"},{number="42",value="0x0"},
{number="43",value="0x0"},{number="44",value="0x0"},
{number="45",value="0x0"},{number="46",value="0x0"},
{number="47",value="0x0"},{number="48",value="0x0"},
{number="49",value="0x0"},{number="50",value="0x0"},
{number="51",value="0x0"},{number="52",value="0x0"},
{number="53",value="0x0"},{number="54",value="0x0"},
{number="55",value="0x0"},{number="56",value="0x0"},
{number="57",value="0x0"},{number="58",value="0x0"},
{number="59",value="0x0"},{number="60",value="0x0"},
{number="61",value="0x0"},{number="62",value="0x0"},
{number="63",value="0x0"},{number="64",value="0xfe00a300"},
{number="65",value="0x29002"},{number="66",value="0x202f04b5"},
{number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
{number="69",value="0x20002b03"}}
(gdb)

-data-read-memoryコマンド

概要

 -data-read-memory [ -o byte-offset ]
   address word-format word-size
   nr-rows nr-cols [ aschar ]

各項目について以下に説明します。

`address'
読み取るべき最初のメモリ・ワードのアドレスを指定する式です。 空白を含む複雑な式は、 Cの慣例にしたがって引用符で囲むべきです。
`word-format'
メモリ・ワードを表示する際に使用するフォーマットです。 その表記法は、 GDBのprintコマンドと同一です (出力フォーマット参照)。
`word-size'
個々のメモリ・ワードのバイト単位のサイズです。
`nr-rows'
出力される表の行数です。
`nr-cols'
出力される表の列数です。
`aschar'
これが指定されると、 各行にはASCIIダンプが含まれるべきことを示します。 ascharの値は、 あるバイトが表示可能なASCII文字セットのメンバではない場合に、 パディング用の文字として使われます (表示可能なASCII文字とは、 そのコードが32以上126以下の文字を指します)。
`byte-offset'
メモリの内容を獲得する前にaddressに対して加算すべきオフセットです。

このコマンドは、 nr-rowsnr-cols列のワードから構成されるテーブルとしてメモリ内容を表示します。 個々のワードのサイズはword-sizeバイトです。 全体ではnr-rows * nr-cols * word-sizeにより計算されるバイト (これが`total-bytes'として表示されます) が読み取られます。 指定されたバイト数よりも少ない情報がターゲットによって返された場合は、 存在しないワードは`N/A'によって示されます。 ターゲットによって読み取られたバイト数は`nr-bytes'によって、 また、 メモリの読み取りの際の先頭アドレスは`addr'によって、 それぞれ示されます。

次の行のアドレスは`next-row'、 前の行のアドレスは`prev-row'、 次のページのアドレスは`next-page' 前のページのアドレスは`prev-page'において、 それぞれ示されます。

GDBコマンド

対応するGDBコマンドは`x'です。 またgdbtkでは、 `gdb_get_mem'によるメモリの読み取りが提供されています。

bytes+6を先頭とするメモリから6バイトを読み取り、 その後に-6バイトだけオフセットする例を以下に示します。 3行2列、 1ワードあたり1バイト、 個々のワードを16進としてフォーマットします。

(gdb)
9-data-read-memory -o -6 -- bytes+6 x 1 3 2
9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
prev-page="0x0000138a",memory={
{addr="0x00001390",data={"0x00","0x01"}},
{addr="0x00001392",data={"0x02","0x03"}},
{addr="0x00001394",data={"0x04","0x05"}}}
(gdb)

アドレスshorts + 64を先頭とするメモリから2バイトを読み取り、 10進数としてフォーマットされた単一のワードとして表示する例を以下に示します。

(gdb)
5-data-read-memory shorts+64 d 2 1 1
5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
next-row="0x00001512",prev-row="0x0000150e",
next-page="0x00001512",prev-page="0x0000150e",memory={
{addr="0x00001510",data={"128"}}}
(gdb)

bytes+16を先頭とするメモリから32バイトを読み取り、 8行4列にフォーマットする例を以下に示します。 表示不可の文字はxで置き換えてエンコードした文字列を含みます。

(gdb)
4-data-read-memory bytes+16 x 1 8 4 x
4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
next-row="0x000013c0",prev-row="0x0000139c",
next-page="0x000013c0",prev-page="0x00001380",memory={
{addr="0x000013a0",data={"0x10","0x11","0x12","0x13"},ascii="xxxx"},
{addr="0x000013a4",data={"0x14","0x15","0x16","0x17"},ascii="xxxx"},
{addr="0x000013a8",data={"0x18","0x19","0x1a","0x1b"},ascii="xxxx"},
{addr="0x000013ac",data={"0x1c","0x1d","0x1e","0x1f"},ascii="xxxx"},
{addr="0x000013b0",data={"0x20","0x21","0x22","0x23"},ascii=" !\"#"},
{addr="0x000013b4",data={"0x24","0x25","0x26","0x27"},ascii="$%&'"},
{addr="0x000013b8",data={"0x28","0x29","0x2a","0x2b"},ascii="()*+"},
{addr="0x000013bc",data={"0x2c","0x2d","0x2e","0x2f"},ascii=",-./"}}
(gdb)

-display-deleteコマンド

概要

 -display-delete number

numberによって指定される表示を削除します。

GDBコマンド

対応するGDBコマンドは`delete display'です。

N.A.

-display-disableコマンド

概要

 -display-disable number

numberによって指定される表示を無効にします。

GDBコマンド

対応するGDBコマンドは`disable display'です。

N.A.

-display-enableコマンド

概要

 -display-enable number

numberによって指定される表示を有効にします。

GDBコマンド

対応するGDBコマンドは`enable display'です。

N.A.

-display-insertコマンド

概要

 -display-insert expression

プログラムが停止するたびにexpressionを表示します。

GDBコマンド

対応するGDBコマンドは`display'です。

N.A.

-display-listコマンド

概要

 -display-list

表示対象の一覧を表示します。 カレントな値を表示することはしません。

GDBコマンド

対応するGDBコマンドは`info display'です。

N.A.

-environment-cdコマンド

概要

 -environment-cd pathdir

GDBの作業ディレクトリをセットします。

GDBコマンド

対応するGDBコマンドは`cd'です。

(gdb)
-environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
^done
(gdb)

-environment-directoryコマンド

概要

 -environment-directory pathdir

ソース・ファイルの探索パスの先頭に、 ディレクトリpathdirを追加します。

GDBコマンド

対応するGDBコマンドは`dir'です。

(gdb)
-environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
^done
(gdb)

-environment-pathコマンド

概要

 -environment-path ( pathdir )+

オブジェクト・ファイルの探索パスの先頭に、 ディレクトリ(複数可)を追加します。

GDBコマンド

対応するGDBコマンドは`path'です。

(gdb)
-environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb
^done
(gdb)

-environment-pwdコマンド

概要

 -environment-pwd

カレントな作業ディレクトリを表示します。

GDBコマンド

対応するGDBコマンドは`pwd'です。

(gdb)
-environment-pwd
~Working directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb.
^done
(gdb)

GDB/MIプログラム制御

プログラム終了

下位のプログラムがブレイクポイントに一切到達しなかった場合、 実行の帰結として、 完全に終了してしまうことがありえます。 このような場合に、 プログラムが例外的な終了を行ったのであれば、 出力には終了コードが含まれます。

例:

プログラムが正常に終了した場合:

(gdb)
-exec-run
^running
(gdb)
x = 55
*stopped,reason="exited-normally"
(gdb)

プログラムが例外的に終了した場合:

(gdb)
-exec-run
^running
(gdb)
x = 55
*stopped,reason="exited",exit-code="01"
(gdb)

これ以外にも、 SIGINTのようなシグナルを受信してプログラムが終了することがあります。 この場合には、 GDB/MIは以下のように出力します。

(gdb)
*stopped,reason="exited-signalled",signal-name="SIGINT",
signal-meaning="Interrupt"

-exec-abortコマンド

概要

 -exec-abort

実行中の下位プログラムを強制終了(kill)します。

GDBコマンド

対応するGDBコマンドは`kill'です。

N.A.

-exec-argumentsコマンド

概要

 -exec-arguments args

次回の`-exec-run'において下位プログラムによって使われる引数をセットします。

GDBコマンド

対応するGDBコマンドは`set args'です。

なし。

-exec-continueコマンド

概要

 -exec-continue

非同期コマンド。 下位プログラムの実行を再開し、 ブレイクポイントに到達するか終了するまで実行を継続します。

GDBコマンド

対応するGDBコマンドは`continue'です。

-exec-continue
^running
(gdb)
@Hello world
*stopped,reason="breakpoint-hit",bkptno="2",frame={func="foo",args={},
file="hello.c",line="13"}
(gdb)

-exec-finishコマンド

概要

 -exec-finish

非同期コマンド。 下位プログラムの実行を再開し、 カレントな関数が終了するまで実行を継続します。 関数の戻り値を表示します。

GDBコマンド

対応するGDBコマンドは`finish'です。

戻り値がvoidの関数の例を以下に示します。

-exec-finish
^running
(gdb)
@hello from foo
*stopped,reason="function-finished",frame={func="main",args={},
file="hello.c",line="7"}
(gdb)

戻り値がvoid以外の関数の例を以下に示します。 戻り値を保持しているGDBの内部変数の名前が、 その値とともに表示されます。

-exec-finish
^running
(gdb)
*stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
args={{name="a",value="1"},{name="b",value="9"}},
file="recursive2.c",line="14"},
gdb-result-var="$1",return-value="0"
(gdb)

-exec-interruptコマンド

概要

 -exec-interrupt

非同期コマンド。 ターゲットのバックグラウンドにおける実行に割り込みます。 停止メッセージに関連付けられているトークン(16)が、 割り込まれた実行コマンドのトークンである点に注目してください。 割り込み自体のトークンは、 '^done'という出力においてのみ現われます。 ユーザが、 実行中ではないプログラムに割り込もうとすると、 エラー・メッセージが表示されることになります。

GDBコマンド

対応するGDBコマンドは`interrupt'です。

(gdb)
111-exec-continue
111^running

(gdb)
222-exec-interrupt
222^done
(gdb)
111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
frame={addr="0x00010140",func="foo",args={},file="try.c",line="13"}
(gdb)

(gdb)
-exec-interrupt
^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
(gdb)

-exec-nextコマンド

概要

 -exec-next

非同期コマンド。 下位プログラムの実行を再開し、 次のソース行の先頭に到達したところで停止します。

GDBコマンド

対応するGDBコマンドは`next'です。

-exec-next
^running
(gdb)
*stopped,reason="end-stepping-range",line="8",file="hello.c"
(gdb)

-exec-next-instructionコマンド

概要

 -exec-next-instruction

非同期コマンド。 マシン命令を1つ実行します。 その命令が関数呼び出しである場合は、 関数が復帰するまで実行を継続します。 プログラムがソース行の途中に対応する命令で停止した場合には、 そのアドレスも表示されます。

GDBコマンド

対応するGDBコマンドは`nexti'です。

(gdb)
-exec-next-instruction
^running

(gdb)
*stopped,reason="end-stepping-range",
addr="0x000100d4",line="5",file="hello.c"
(gdb)

-exec-returnコマンド

概要

 -exec-return

カレントな関数を即時に復帰させます。 下位プログラムを実行することはしません。 新しくカレントとなったフレームを表示します。

GDBコマンド

対応するGDBコマンドは`return'です。

(gdb)
200-break-insert callee4
200^done,bkpt={number="1",addr="0x00010734",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
(gdb)
000-exec-run
000^running
(gdb)
000*stopped,reason="breakpoint-hit",bkptno="1",
frame={func="callee4",args={},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
(gdb)
205-break-delete
205^done
(gdb)
111-exec-return
111^done,frame={level="0 ",func="callee3",
args={{name="strarg",
value="0x11940 \"A string argument.\""}},
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
(gdb)

-exec-runコマンド

概要

 -exec-run

非同期コマンド。 下位プログラムの先頭から実行を開始します。 下位プログラムは、 ブレイクポイントに到達するかプログラムが終了するまで実行されます。

GDBコマンド

対応するGDBコマンドは`run'です。

(gdb)
-break-insert main
^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
(gdb)
-exec-run
^running
(gdb)
*stopped,reason="breakpoint-hit",bkptno="1",
frame={func="main",args={},file="recursive2.c",line="4"}
(gdb)

-exec-show-argumentsコマンド

概要

 -exec-show-arguments

プログラムの引数を表示します。

GDBコマンド

対応するGDBコマンドは`show args'です。

N.A.

-exec-stepコマンド

概要

 -exec-step

非同期コマンド。 下位プログラムの実行を再開し、 次のソース行が関数呼び出しでなければ、 次のソース行の先頭で停止します。 次のソース行が関数呼び出しの場合は、 呼び出される関数の最初の命令のところで停止します。

GDBコマンド

対応するGDBコマンドは`step'です。

関数の内部に入り込むステップ実行の例を以下に示します。

-exec-step
^running
(gdb)
*stopped,reason="end-stepping-range",
frame={func="foo",args={{name="a",value="10"},
{name="b",value="0"}},file="recursive2.c",line="11"}
(gdb)

通常のステップ実行の例を以下に示します。

-exec-step
^running
(gdb)
*stopped,reason="end-stepping-range",line="14",file="recursive2.c"
(gdb)

-exec-step-instructionコマンド

概要

 -exec-step-instruction

非同期コマンド。 下位プログラムの実行を再開して、 マシン命令を1つ実行します。 GDBがプログラムを停止する際の出力は、 停止したところがソース行の途中かどうかに依存して変わります。 ソース行の途中の場合は、 プログラムが停止したところのアドレスも表示されます。

GDBコマンド

対応するGDBコマンドは`stepi'です。

(gdb)
-exec-step-instruction
^running

(gdb)
*stopped,reason="end-stepping-range",
frame={func="foo",args={},file="try.c",line="10"}
(gdb)
-exec-step-instruction
^running

(gdb)
*stopped,reason="end-stepping-range",
frame={addr="0x000100f4",func="foo",args={},file="try.c",line="10"}
(gdb)

-exec-untilコマンド

概要

 -exec-until [ location ]

非同期コマンド。 引数で指定されたlocationまで下位プログラムを実行します。 引数が指定されない場合、 下位プログラムは、 カレント行よりも後ろの行に到達するまで実行されます。 この場合、 reason項目の値は"location-reached"になります。

GDBコマンド

対応するGDBコマンドは`until'です。

(gdb)
-exec-until recursive2.c:6
^running
(gdb)
x = 55
*stopped,reason="location-reached",frame={func="main",args={},
file="recursive2.c",line="6"}
(gdb)

-file-exec-and-symbolsコマンド

概要

 -file-exec-and-symbols file

デバッグ対象となる実行ファイルを指定します。 このファイルからシンボル・テーブルも読み込まれます。 ファイルが指定されないと、 このコマンドは、 実行ファイル情報とシンボル情報をクリアします。 このコマンドが引数を指定せずに使われたときにブレイクポイントがセットされていると、 GDBはエラー・メッセージを出力します。 これ以外の場合には、 完了通知だけが出力され、 それ以外には何も出力されません。

GDBコマンド

対応するGDBコマンドは`file'です。

(gdb)
-file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
^done
(gdb)

-file-exec-fileコマンド

概要

 -file-exec-file file

デバッグ対象となる実行ファイルを指定します。 `-file-exec-and-symbols'とは異なり、 このファイルからシンボル・テーブルの読み込みは行われません。 引数を指定せずに使われると、 GDBは実行ファイルに関する情報をクリアします。 完了通知以外には何も出力されません。

GDBコマンド

対応するGDBコマンドは`exec-file'です。

(gdb)
-file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
^done
(gdb)

-file-list-exec-sectionsコマンド

概要

 -file-list-exec-sections

カレントな実行ファイルのセクションの一覧を表示します。

GDBコマンド

GDBの`info file'コマンドなどが、 このコマンドと同一の情報を表示します。 gdbtkには、 対応するコマンドとして`gdb_load_info'があります。

N.A.

-file-list-exec-source-filesコマンド

概要

 -file-list-exec-source-files

カレントな実行ファイルのソース・ファイルの一覧を表示します。

GDBコマンド

これに直接対応するGDBコマンドは存在しません。 gdbtkは、 類似のコマンドとして`gdb_listfiles'を提供しています。

N.A.

-file-list-shared-librariesコマンド

概要

 -file-list-shared-libraries

プログラムが使用する共用ライブラリの一覧を表示します。

GDBコマンド

対応するGDBコマンドは`info shared'です。

N.A.

-file-list-symbol-filesコマンド

概要

 -file-list-symbol-files

シンボル・ファイルの一覧を表示します。

GDBコマンド

対応するGDBコマンドは`info file'(の一部の機能)です。

N.A.

-file-symbol-fileコマンド

概要

 -file-symbol-file file

指定されたfile引数(の指すファイル)からシンボル・テーブルを読み込みます。 引数を指定せずに使われると、 GDBのシンボル・テーブル情報をクリアします。 完了通知以外には何も出力されません。

GDBコマンド

対応するGDBコマンドは`symbol-file'です。

(gdb)
-file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
^done
(gdb)

GDB/MIにおけるその他のGDBコマンド

-gdb-exitコマンド

概要

 -gdb-exit

直ちにGDBを終了させます。

GDBコマンド

`quit'にほぼ対応します。

(gdb)
-gdb-exit

-gdb-setコマンド

概要

 -gdb-set

GDBの内部変数に値をセットします。

GDBコマンド

対応するGDBコマンドは`set'です。

(gdb)
-gdb-set $foo=3
^done
(gdb)

-gdb-showコマンド

概要

 -gdb-show

GDB変数のカレントな値を表示します。

GDBコマンド

対応するGDBコマンドは`show'です。

(gdb)
-gdb-show annotate
^done,value="0"
(gdb)

-gdb-versionコマンド

概要

 -gdb-version

GDBのバージョン情報を表示します。 ほとんどの場合、 テストにおいて使われます。

GDBコマンド

同等のGDBコマンドは存在しません。 GDBはデフォルトでは、 対話セッションを開始したときにこの情報を表示します。

(gdb)
-gdb-version
~GNU gdb 5.2.1
~Copyright 2000 Free Software Foundation, Inc.
~GDB is free software, covered by the GNU General Public License, and
~you are welcome to change it and/or distribute copies of it under
~ certain conditions.
~Type "show copying" to see the conditions.
~There is absolutely no warranty for GDB.  Type "show warranty" for
~ details.
~This GDB was configured as 
 "--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
^done
(gdb)

GDB/MIにおけるスタック操作コマンド

-stack-info-frameコマンド

概要

 -stack-info-frame

カレントなフレームに関する情報を取得します。

GDBコマンド

対応するGDBコマンドは`info frame'または (引数を指定しない) `frame'です

N.A.

-stack-info-depthコマンド

概要

 -stack-info-depth [ max-depth ]

スタックの深さを返します。 整数引数max-depthが指定されると、 max-depth個を超えるフレームを数えることをしません。

GDBコマンド

対応するGDBコマンドは存在しません。

フレーム・レベル0からフレーム・レベル11までを持つスタックに対して実行した例を以下に示します。

(gdb)
-stack-info-depth
^done,depth="12"
(gdb)
-stack-info-depth 4
^done,depth="4"
(gdb)
-stack-info-depth 12
^done,depth="12"
(gdb)
-stack-info-depth 11
^done,depth="11"
(gdb)
-stack-info-depth 13
^done,depth="12"
(gdb)

-stack-list-argumentsコマンド

概要

 -stack-list-arguments show-values
    [ low-frame high-frame ]

(フレーム・レベルが)low-frame以上high-frame以下のフレームの引数リストを表示します。 low-framehigh-frameが指定されないと、 すべての呼び出しスタックについて引数の一覧を表示します。

show-values引数の値は0または1のいずれかの値を取らなければなりません。 0の場合は、 引数の名前の一覧だけが表示されることを意味し、 1の場合は、 引数の名前と値の両方が表示されることを意味します。

GDBコマンド

同等のコマンドはGDBには存在しません。 gdbtkには`gdb_get_args'というコマンドがあり、 その機能は`-stack-list-arguments'の機能と一部重複しています。

(gdb)
-stack-list-frames
^done,
stack={
frame={level="0 ",addr="0x00010734",func="callee4",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
frame={level="1 ",addr="0x0001076c",func="callee3",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
frame={level="2 ",addr="0x0001078c",func="callee2",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
frame={level="3 ",addr="0x000107b4",func="callee1",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
frame={level="4 ",addr="0x000107e0",func="main",
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="32"}}
(gdb)
-stack-list-arguments 0
^done,
stack-args={
frame={level="0",args={}},
frame={level="1",args={name="strarg"}},
frame={level="2",args={name="intarg",name="strarg"}},
frame={level="3",args={name="intarg",name="strarg",name="fltarg"}},
frame={level="4",args={}}}
(gdb)
-stack-list-arguments 1
^done,
stack-args={
frame={level="0",args={}},
frame={level="1",
 args={{name="strarg",value="0x11940 \"A string argument.\""}}},
frame={level="2",args={
{name="intarg",value="2"},
{name="strarg",value="0x11940 \"A string argument.\""}}},
{frame={level="3",args={
{name="intarg",value="2"},
{name="strarg",value="0x11940 \"A string argument.\""},
{name="fltarg",value="3.5"}}},
frame={level="4",args={}}}
(gdb)
-stack-list-arguments 0 2 2
^done,stack-args={frame={level="2",args={name="intarg",name="strarg"}}}
(gdb)
-stack-list-arguments 1 2 2
^done,stack-args={frame={level="2",
args={{name="intarg",value="2"},
{name="strarg",value="0x11940 \"A string argument.\""}}}}
(gdb)

-stack-list-framesコマンド

概要

 -stack-list-frames [ low-frame high-frame ]

その時点においてスタック上に存在するフレームの一覧を表示します。 個々のフレームについて、 以下の情報が表示されます。

`level'
フレーム番号。 最下位のフレーム、 すなわち、 最下位の関数が0になります。
`addr'
そのフレームの$pc(17)の値。
`func'
関数の名前。
`file'
関数が存在するソース・ファイルの名前。
`line'
$pcに対応する行番号。

引数を指定せずに実行されると、 このコマンドは全スタックのバックトレースを表示します。 整数引数が2つ指定されると、 レベルがその2つの数の間 (それらの数を含む) にあるフレームを表示します。 2つの引数の値が等しい場合、 対応するレベルのフレームだけが表示されます。

GDBコマンド

対応するGDBコマンドは`backtrace'`where'です。

スタック全体のバックトレースの例を以下に示します。

(gdb)
-stack-list-frames
^done,stack=
{frame={level="0 ",addr="0x0001076c",func="foo",
  file="recursive2.c",line="11"},
frame={level="1 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="2 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="3 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="4 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="5 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="6 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="7 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="8 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="9 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="10",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="11",addr="0x00010738",func="main",
  file="recursive2.c",line="4"}}
(gdb)

2つのフレームレベルの間にあるフレームを表示する例を以下に示します。

(gdb)
-stack-list-frames 3 5
^done,stack=
{frame={level="3 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="4 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"},
frame={level="5 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"}}
(gdb)

単一のフレームを表示する例を以下に示します。

(gdb)
-stack-list-frames 3 3
^done,stack=
{frame={level="3 ",addr="0x000107a4",func="foo",
  file="recursive2.c",line="14"}}
(gdb)

-stack-list-localsコマンド

概要

 -stack-list-locals print-values

カレントなフレームにおける局所変数の名前を表示します。 引数に0が指定されると変数の名前だけが表示されます。 引数に1が指定されるとその値も表示されます。

GDBコマンド

GDBにおいては`info locals'gdbtkにおいては`gdb_get_locals'が、 それぞれ対応するコマンドです。

(gdb)
-stack-list-locals 0
^done,locals={name="A",name="B",name="C"}
(gdb)
-stack-list-locals 1
^done,locals={{name="A",value="1"},{name="B",value="2"},
  {name="C",value="3"}}
(gdb)

-stack-select-frameコマンド

概要

 -stack-select-frame framenum

カレントなフレームを替えます。 スタック上に存在する、 framenumで指定される番号を持つ別フレームを選択します。

GDBコマンド

対応するGDBコマンドは、 `frame'`up'`down'`select-frame'`up-silent'`down-silent'です。

(gdb)
-stack-select-frame 2
^done
(gdb)

GDB/MIのシンボル・クエリー・コマンド

-symbol-info-addressコマンド

概要

 -symbol-info-address symbol

symbolにより指定されるシンボルがどこに格納されているかを示します。

GDBコマンド

対応するGDBコマンドは`info address'です。

N.A.

-symbol-info-fileコマンド

概要

 -symbol-info-file

シンボルに対応するファイルを示します。

GDBコマンド

対応するGDBコマンドは存在しません。 gdbtkにおいては`gdb_find_file'が対応するコマンドです。

N.A.

-symbol-info-functionコマンド

概要

 -symbol-info-function

シンボルが存在する関数を示します。

GDBコマンド

gdbtkにおける`gdb_get_function'が対応するコマンドです。

N.A.

-symbol-info-lineコマンド

概要

 -symbol-info-line

ソース行に対応するコードのコア・アドレスを示します。

GDBコマンド

対応するGDBコマンドは`info line'です。 gdbtkでは、 `gdb_get_line'`gdb_get_file'です。

N.A.

-symbol-info-symbolコマンド

概要

 -symbol-info-symbol addr

addrにより指定される位置にあるシンボルを示します。

GDBコマンド

対応するGDBコマンドは`info symbol'です。

N.A.

-symbol-list-functionsコマンド

概要

 -symbol-list-functions

実行ファイルの中の関数の一覧を表示します。

GDBコマンド

GDBにおいては`info functions'gdbtkにおいては`gdb_listfunc'`gdb_search'が、 それぞれ対応するコマンドです。

N.A.

-symbol-list-typesコマンド

概要

 -symbol-list-types

すべての型の名前の一覧を表示します。

GDBコマンド

GDBにおいては`info types'gdbtkにおいては`gdb_search'が、 それぞれ対応するコマンドです。

N.A.

-symbol-list-variablesコマンド

概要

 -symbol-list-variables

すべての広域変数と静的変数の名前の一覧を表示します。

GDBコマンド

GDBにおいては`info variables'gdbtkにおいては`gdb_search'が、 それぞれ対応するコマンドです。

N.A.

-symbol-locateコマンド

概要

 -symbol-locate

GDBコマンド

gdbtkにおける`gdb_loc'が対応するコマンドです。

N.A.

-symbol-typeコマンド

概要

 -symbol-type variable

variableにより指定される変数の型を示します。

GDBコマンド

対応するGDBコマンドは`ptype'です。 gdbtkにおいては、 `gdb_obj_variable'が対応するコマンドです。

N.A.

GDB/MIのターゲット操作コマンド

-target-attachコマンド

概要

 -target-attach pid | file

GDBの外部に存在する、 pidにより指定されるプロセスIDを持つプロセス、 または、 fileにより指定されるファイルにアタッチします。

GDBコマンド

対応するGDBコマンドは`attach'です。

N.A.

-target-compare-sectionsコマンド

概要

 -target-compare-sections [ section ]

ターゲットのsectionにより指定されるセクションのデータと実行ファイルを比較します。 引数を指定しないと、 すべてのセクションが比較されます。

GDBコマンド

GDBにおける同等のコマンドは`compare-sections'です。

N.A.

-target-detachコマンド

概要

 -target-detach

リモート・ターゲットへの接続を切断します。 出力はありません。

GDBコマンド

対応するGDBコマンドは`detach'です。

(gdb)
-target-detach
^done
(gdb)

-target-downloadコマンド

概要

 -target-download

実行ファイルをリモート・ターゲットにロードします。 0.5秒ごとに更新メッセージを表示します。 このメッセージには、 以下のフィールドが含まれます。

`section'
セクションの名前。
`section-sent'
そのセクションの送信済みのサイズ。
`section-size'
セクションのサイズ。
`total-sent'
(カレントなセクションと以前のセクションを合わせた) 送信済みの総サイズ。
`total-size'
ダウンロードするべきすべての実行ファイルのサイズ。

個々のメッセージはステータス・レコードとして送信されます (GDB/MI出力構文参照)。

さらに、 個々のセクションの名前とサイズを、 それらがダウンロードされる際に表示します。 このメッセージには、 以下のフィールドが含まれます。

`section'
セクションの名前。
`section-size'
セクションのサイズ。
`total-size'
ダウンロードするべきすべての実行ファイルのサイズ。

最後に要約が表示されます。

GDBコマンド

対応するGDBコマンドは`load'です。

注: 個々のメッセージは1行に表示されます。 ここでは、 ページの中に収まるようにメッセージは改行されています。

(gdb)
-target-download
+download,{section=".text",section-size="6668",total-size="9880"}
+download,{section=".text",section-sent="512",section-size="6668",
total-sent="512",total-size="9880"}
+download,{section=".text",section-sent="1024",section-size="6668",
total-sent="1024",total-size="9880"}
+download,{section=".text",section-sent="1536",section-size="6668",
total-sent="1536",total-size="9880"}
+download,{section=".text",section-sent="2048",section-size="6668",
total-sent="2048",total-size="9880"}
+download,{section=".text",section-sent="2560",section-size="6668",
total-sent="2560",total-size="9880"}
+download,{section=".text",section-sent="3072",section-size="6668",
total-sent="3072",total-size="9880"}
+download,{section=".text",section-sent="3584",section-size="6668",
total-sent="3584",total-size="9880"}
+download,{section=".text",section-sent="4096",section-size="6668",
total-sent="4096",total-size="9880"}
+download,{section=".text",section-sent="4608",section-size="6668",
total-sent="4608",total-size="9880"}
+download,{section=".text",section-sent="5120",section-size="6668",
total-sent="5120",total-size="9880"}
+download,{section=".text",section-sent="5632",section-size="6668",
total-sent="5632",total-size="9880"}
+download,{section=".text",section-sent="6144",section-size="6668",
total-sent="6144",total-size="9880"}
+download,{section=".text",section-sent="6656",section-size="6668",
total-sent="6656",total-size="9880"}
+download,{section=".init",section-size="28",total-size="9880"}
+download,{section=".fini",section-size="28",total-size="9880"}
+download,{section=".data",section-size="3156",total-size="9880"}
+download,{section=".data",section-sent="512",section-size="3156",
total-sent="7236",total-size="9880"}
+download,{section=".data",section-sent="1024",section-size="3156",
total-sent="7748",total-size="9880"}
+download,{section=".data",section-sent="1536",section-size="3156",
total-sent="8260",total-size="9880"}
+download,{section=".data",section-sent="2048",section-size="3156",
total-sent="8772",total-size="9880"}
+download,{section=".data",section-sent="2560",section-size="3156",
total-sent="9284",total-size="9880"}
+download,{section=".data",section-sent="3072",section-size="3156",
total-sent="9796",total-size="9880"}
^done,address="0x10004",load-size="9880",transfer-rate="6586",
write-rate="429"
(gdb)

-target-exec-statusコマンド

概要

 -target-exec-status

ターゲットの状態に関する情報 (例えば、 実行中か否かなど) を提供します

GDBコマンド

対応するGDBコマンドは存在しません。

N.A.

-target-list-available-targetsコマンド

概要

 -target-list-available-targets

接続可能なターゲットの一覧を示します。

GDBコマンド

対応するGDBコマンドは`help target'です。

N.A.

-target-list-current-targetsコマンド

概要

 -target-list-current-targets

カレントなターゲットを示します。

GDBコマンド

対応する情報が (他の情報とともに)、 `info file'によって表示されます。

N.A.

-target-list-parametersコマンド

概要

 -target-list-parameters

GDBコマンド

対応するコマンドは存在しません。

N.A.

-target-selectコマンド

概要

 -target-select type parameters ...

GDBをリモート・ターゲットに接続します。 このコマンドは2つの引数を取ります。

`type'
ターゲットのタイプ。 例えば、 `async'`remote'など。
`parameters'
デバイス名、 ホスト名、 あるいは、 これらに類する情報。 詳細については、 ターゲットを管理するコマンド を参照してください。

接続通知が出力された後に、 ターゲット・プログラムのアドレスが以下の形式で出力されます。

^connected,addr="address",func="function name",
  args={arg list}

GDBコマンド

対応するGDBコマンドは`target'です。

(gdb)
-target-select async /dev/ttya
^connected,addr="0xfe00a300",func="??",args={}
(gdb)

GDB/MIスレッド・コマンド

-thread-infoコマンド

概要

 -thread-info

GDBコマンド

対応するGDBコマンドは存在しません。

N.A.

-thread-list-all-threadsコマンド

概要

 -thread-list-all-threads

GDBコマンド

対応するGDBコマンドは`info threads'です。

N.A.

-thread-list-idsコマンド

概要

 -thread-list-ids

このコマンドの実行時に知られているGDBスレッドIDの一覧を作成します。 一覧の末尾には、 これらのスレッドの総数も表示されます。

GDBコマンド

`info threads'の提供する情報の一部に同等の情報が含まれています。

メイン・プロセス以外にスレッドが存在しない場合の例を以下に示します。

(gdb)
-thread-list-ids
^done,thread-ids={},number-of-threads="0"
(gdb)

いくつかスレッドが存在する場合の例を以下に示します。

(gdb)
-thread-list-ids
^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
number-of-threads="3"
(gdb)

-thread-selectコマンド

概要

 -thread-select threadnum

threadnumにより指定される番号を持つスレッドをカレント・スレッドとします。 新しくカレント・スレッドとなったスレッドの番号を表示します。 また、 そのスレッドの最下位フレームを表示します。

GDBコマンド

対応するGDBコマンドは`thread'です。

(gdb)
-exec-next
^running
(gdb)
*stopped,reason="end-stepping-range",thread-id="2",line="187",
file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
(gdb)
-thread-list-ids
^done,
thread-ids={thread-id="3",thread-id="2",thread-id="1"},
number-of-threads="3"
(gdb)
-thread-select 3
^done,new-thread-id="3",
frame={level="0 ",func="vprintf",
args={{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""},
{name="arg",value="0x2"}},file="vprintf.c",line="31"}
(gdb)

GDB/MIトレースポイント・コマンド

トレースポイント・コマンドはまだ実装されていません。

GDB/MI変数オブジェクト

GDB/MIにおいて変数オブジェクトを使用する動機

デバッガの変数ウィンドウ (局所変数、 監視式(watched expression)など) の実装について私たちは、 Insightによって使われている既存のコードを適合させることを提案しています。

主要な理由は以下の2点です。

  1. 実績があります (それは既に第2世代に入っています)。
  2. 開発に要する時間を短縮してくれます (このことが昨今どれほど重要であるかは改めて言うまでもないでしょう)。

もともとのインターフェイスはTclのコードから使うことを想定して設計されています。 したがって、 flatheadを通じて使うことができるようにするために若干の変更が加えられました。 このドキュメントでは、 利用可能になるであろうflatheadオペレーションについて説明し、 その使い方に関するヒントを提供します。

: ここで説明するオペレーション群に加えて、 変数ウィンドウのGUI実装は、 少なくとも以下のオペレーションを必要とするであろうと私たちは考えています。

GDB/MIにおける変数オブジェクトの紹介

変数オブジェクトの基本的な考え方は、 変数、 式、 メモリ位置、 さらには、 CPUレジスタさえも表わす名前付きのオブジェクトを生成することです。 生成される個々のオブジェクトにおいて、 その属性を調べたり変更したりするためのオペレーション群が利用可能です。

さらに、 Cの構造体のような複雑なデータ型はツリー・フォーマットによって表わされます。 例えば、 struct型の変数がルートとなり、 その子ノードが構造体メンバを表わすこととなります。 子ノード自体が複雑な型である場合は、 その下にまた子ノードが存在することとなります。 C、 C++、 Javaに特有の言語上の差異は正しく処理されます。

オブジェクトの実際の値を返す際には、 生成される結果において使われる表示フォーマットを個別に選択することが可能です。 選択肢は、 2進、 10進、 16進、 8進、 および、 ナチュラル(natural)です。 ナチュラルとは、 変数の型に応じて自動的に選択されるデフォルトのフォーマット (intの場合は10進、 ポインタの場合は16進、 等) のことです

以下に、 この機能にアクセスするために定義されたすべてのflatheadオペレーションを示します。
オペレーション 説明
-var-create 変数オブジェクトを生成する
-var-delete 変数オブジェクトとその子を削除する
-var-set-format この変数の表示フォーマットを設定する
-var-show-format この変数の表示フォーマットを示す
-var-info-num-children このオブジェクトが持つ子の数を示す
-var-list-children このオブジェクトの子の一覧を返す
-var-info-type この変数オブジェクトの型を示す
-var-info-expression この変数オブジェクトの表わす対象を表示する
-var-show-attributes この変数が書き込み可能であるか、また、存在するかを示す
-var-evaluate-expression この変数の値を取得する
-var-assign この変数の値を設定する
-var-update 変数とその子を更新する

次のサブセクションでは、 個々のオペレーションについて詳細に説明し、 その使い方を示します。

変数オブジェクトに対するオペレーションの説明と用途

-var-createコマンド

概要

 -var-create {name | "-"}
    {frame-addr | "*"} expression

このオペレーションは、 変数、 式の評価結果、 メモリ・セル、 あるいは、 CPUレジスタの監視を可能にする変数オブジェクトを生成します。

nameパラメータは、 そのオブジェクトを参照するための文字列です。 これは一意でなければなりません。 `-'が指定されると、 変数オブジェクトのシステムが自動的に"varNNNNNN"という文字列を生成します。 この文字列は、 ユーザがこのようなフォーマットのnameを指定しない限り一意です。 名前の重複が検出されるとコマンドの実行は失敗に終わります。

式がその下で評価されるべきフレームはframe-addrによって指定することができます。 `*'は、 カレント・フレームが使われるべきことを意味します。

expressionは、 カレントな言語セットにおいて有効な任意の式 (ただし、 `*'以外の文字で始まるものでなければなりません)、 あるいは、 以下のいずれかです。

結果

このオペレーションは、 生成されたオブジェクトの名前、 子の数、 型を返します。 型は、 GDB CLIによって作成される文字列のまま返されます。

 name="name",numchild="N",type="type"

-var-deleteコマンド

概要

 -var-delete name

以前に生成された変数オブジェクトとそのすべての子を削除します。

オブジェクト名nameを見つけることができない場合、 エラーを返します。

-var-set-formatコマンド

概要

 -var-set-format name format-spec

nameにより指定されるオブジェクトの値の出力フォーマットをformat-specに設定します。

format-specの構文は以下のとおりです。

 format-spec ==>
 {binary | decimal | hexadecimal | octal | natural}

-var-show-formatコマンド

概要

 -var-show-format name

nameにより指定されるオブジェクトの値を表示するのに使われるフォーマットを返します。

 format ==>
 format-spec

-var-info-num-childrenコマンド

概要

 -var-info-num-children name

nameにより指定されるオブジェクトの子の数を返します。

 numchild=n

-var-list-childrenコマンド

概要

 -var-list-children name

指定された変数オブジェクトの子の一覧を返します。

 numchild=n,children={{name=name,
 numchild=n,type=type},(repeats N times)}

-var-info-typeコマンド

概要

 -var-info-type name

nameにより指定される変数の型を返します。 型は、 GDB CLIによる出力と同じフォーマットの文字列として返されます。

 type=typename

-var-info-expressionコマンド

概要

 -var-info-expression name

nameにより指定される変数オブジェクトにより表わされる対象を返します。

 lang=lang-spec,exp=expression

lang-specの構文は{"C" | "C++" | "Java"}で表わされます。

-var-show-attributesコマンド

概要

 -var-show-attributes name

nameにより指定される変数オブジェクトの属性の一覧を表示します。

 status=attr [ ( ,attr )* ]

attrの構文は{ { editable | noneditable } | その他検討中 }で表わされます。

-var-evaluate-expressionコマンド

概要

 -var-evaluate-expression name

指定された変数オブジェクトによって表わされる式を評価して、 その値を文字列として返します。 文字列のフォーマットは、 そのオブジェクトに対して指定されているカレントなフォーマットです。

 value=value

-var-assignコマンド

概要

 -var-assign name expression

expressionにより指定される式の値を、 nameにより指定される変数オブジェクトに代入します。 そのオブジェクトは"editable"(書き込み可能)でなければなりません。

-var-updateコマンド

概要

 -var-update {name | "*"}

nameにより指定される変数オブジェクトの値を、 その式を構成する値をメモリまたはレジスタから新たに取り直して式を再評価した後に、 更新します。 `*'を指定すると、 既存のすべての変数オブジェクトが更新されることになります。

GDB/MI出力構文の変更案

既存のGDB/MI出力構文において認められていた問題点の1つに、 個々の値が一意なラベルを持つ以下のような組

{number="1",type="breakpoint",disp="keep",enabled="y"}

と、 以下のような

{"1","2","4"}
{bp="1",bp="2",bp="4"}

値がラベルを持たないリストやラベルが重複しているリストを区別することが困難であるということがあります。

以下に示すのは、 この問題を解決するための出力仕様改訂案です。

GDB/MIからの出力は、 ゼロ個以上の帯域外レコードから構成されます。 場合によってはこの後ろに、 最後に入力されたコマンドに対応する結果レコードが1個続くことがあります。 この出力シーケンスの終端は、 "(gdb)"という文字列によって示されます。

非同期のGDB/MI出力もこれに類似しています。

ある入力コマンドに直接関連付けられている出力レコードには、 その入力コマンドのtokenが接頭語として付与されます。

output ==>
{ out-of-band-record } [ result-record ] "(gdb)" nl
result-record ==>
[ token ] "^" result-class { "," result } nl
out-of-band-record ==>
async-record | stream-record
async-record ==>
exec-async-output | status-async-output | notify-async-output
exec-async-output ==>
[ token ] "*" async-output
status-async-output ==>
[ token ] "+" async-output
notify-async-output ==>
[ token ] "=" async-output
async-output ==>
async-class { "," result } nl
result-class ==>
"done" | "running" | "connected" | "error" | "exit"
async-class ==>
"stopped" | 開発途中のためこれ以外のものは必要に応じて追加予定
result ==>
string "=" value
value ==>
c-string | tupple | list
tupple ==>
"{}" | "{" result { "," result } "}"
list ==>
"[]" | "[" value { "," value } "]"
string ==>
[-A-Za-z\.0-9_]*
c-string ==>
入力仕様を参照
stream-record ==>
console-stream-output | target-stream-output | log-stream-output
console-stream-output ==>
"~" c-string
target-stream-output ==>
"@" c-string
log-stream-output ==>
"&" c-string
nl ==>
CR | CR-LF
token ==>
"連続した任意の数字"

さらに、 以下のものが現在開発中です。

query
このアクションは現在のところまだ未定義です。

注:


[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]