2

以下のバック トレースを参照してください。これは以前に見たことがないと思います。ドキュメントには情報がありません。

(gdb) bt
#0  0x000000007b44042c in Driver::setRec (this=0x1, message=@0x50)
4

3 に答える 3

2

ドキュメントには見つかりませんが、これは gdb が変数への参照を表示する方法のようです。バックトレースによると、クラス メソッドで停止し、次のシグネチャを使用して参照によって 1 つのパラメーターを受け入れました: Driver::setRec(message&)

更新: C++ 式のドキュメントに
は明示的に記載されていません。記載されている唯一のことは次のとおりです。@

gdb がフレームを表示するときに表示されるパラメーター リストでは、参照変数の値は (他の変数とは異なり) 表示されません。参照は大規模な構造によく使用されるため、これにより混乱が回避されます。`set print address off' を指定しない限り、参照変数のアドレスは常に表示されます。

于 2012-04-05T14:55:11.330 に答える
0

連続するメモリ位置を配列のような出力として出力するためのものです。

$gdb *memory@10
${1,2,3,4,5,6,7,8,9,10}

それほど強力ではありませんが、使いやすいメモリ検査です。より強力な機能が必要な場合は、x (メモリの調査) コマンドを使用する必要があります。相談する

$info gdb
于 2012-04-05T10:02:34.033 に答える
0

これが役立つかどうかはわかりませんが、http://sources.redhat.com/gdb/download/onlinedocs/gdb.html#index-g_t_0040_0040_0040r_007b_002c-referencing-memory-as-an-array_007d-525から

メモリ内の同じタイプの連続したオブジェクトをいくつか出力すると便利なことがよくあります。配列のセクション、または動的に決定されるサイズの配列で、プログラム内にポインタのみが存在します。

これを行うには、メモリの連続したスパンを人工配列として参照します。二項演算子@'. The left operand of @' を使用して、目的の配列の最初の要素であり、個別のオブジェクトにする必要があります。右側のオペランドは、配列の目的の長さにする必要があります。結果は、要素がすべて左引数の型である配列値です。最初の要素は実際には左の引数です。2 番目の要素は、最初の要素を保持するバイトの直後のメモリのバイトから取得されます。ここに例があります。プログラムが言うなら

0x50 は、出力メッセージがある文字列の先頭へのポインタ アドレスです。これについてさらに情報が見つかったら、投稿を更新します。

于 2012-04-05T09:15:09.317 に答える