2009-04-28 5 views
1

"$で始まる名前は、プログラムがスタックフレームに戻ってきた場合には の値を持ち、 のフレームをさらに遠くに保存する) "便宜的な"変数(そのような名前は既知のレジスタではない)をデバッガに渡す。 代入式を使用して便利な変数に値を与える。gdbの印刷コマンドの説明に助けてもらうことができます

上記の行は、gdbのヘルププリントのものです。 誰かが上記の行を説明してください。おかげさまで

答えて

2

したがって、マニュアルページによれば、「式の値を表示する」と表示されます。したがって、これらは、現在のブレークポイントでのCPUのレジスタ値を示します。デバッグレジスタの値には、detailed informationがあります。

GDBには、アーキテクチャの標準ニーモニックと競合しないときはいつでも、ほとんどのマシンで使用可能な(標準の)4つのレジスタ名があります。レジスタ名$ pcと$ spは、プログラムカウンタレジスタとスタックポインタに使用されます。 $ fpは現在のスタックフレームへのポインタを含むレジスタに使用され、$ psはプロセッサステータスを含むレジスタに使用されます。たとえば、あなたがレジスタは

info registers 

info all-registers 

、その後、追加情報で使用可能であるかについての詳細な情報を得ることができます

と六角のプログラムカウンタを印刷することができ特定のレジスタには

info registers register_name 

これが助けてくれることを願っています!

1

CPUレジスタを参照しています。たとえば、EAX、ECX、ESP、EIP ...

+0

スタックフレームに自動変数が格納されるので、実行時に自動変数もレジスタに格納されます。レジスタ変数も同様です。自動変数もレジスタに格納されている場合、自動変数とレジスタ変数の違いは何ですか....? – mawia

+0

スタックに割り当てられた変数はスタックに格納されますが、コンパイラはオプションでそれらをレジスタに最適化でき、使用状況に応じてスタック上のスペースを無駄にすることはありません。最適化を行わずにデバッグをビルドした場合、これは(コンパイラに依存して)起こるべきではありませんが、リリースモードではこれはいつも起こります。 –