2012-02-29 10 views
1

コアダンプをデバッグしようとしていて、C++のテンプレートクラスを使用して実装された変数にアクセスしたいとします。GDBのC++テンプレート変数へのアクセス

私は、シンボルの一つとして、以下の持っている私の実行可能ファイル内のシンボルのobjdumpのをとっている hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray

が、私はgdbの中でこの変数にアクセスしようとすると、それは私に次のエラー与える:

(gdb) p hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray 
No type "HandleMapParameters<(hmapnspace::HandleType)1>" within class or namespace "hmapnspace". 

この変数に正しくアクセスするにはどうすればよいですか?

答えて

2

時には、gdbはC++プログラムの名前に関する一見奇妙なアイデアを持っています。克服するために、(あなたがそれを使用する必要があり、単一引用符に注意してください)完了を

print 'hmapnspace::HandleMapPar 

Tabキーを押すと入力してみてください。

また、変数のアドレスを把握して、名前がスコープ内にない値を監視する必要がある場合

print *(int*) 0xdeadbabe 

ハンディような何かを言うことができます。

+0

ご回答ありがとうございます。私はすでに内部の変数にアクセスしようとしましたが、変数が不安定なメモリ領域を指していることがわかります。私は正しい/期待値を私に与えているこのデータ構造からの参照を持っているので、これが正しくないことを知っています。 – user1159389

+0

一重引用符は私が持っていた問題を解決しました。それを提案してくれてありがとう。そのような特異性を説明する参照ページがある場合は、私たちに知らせていただければ幸いです。 –

1

私はこれを静的メンバー変数とします。そうでない場合、あなたは正しい文脈(フレーム)にいますか?

タブのようなn.mを押しましたか?提案?私はgdbがコマンドラインで型キャストをうまく処理しないことに気づいた。

最後に、最近のバージョンのgdb(7.2など)では、以前のバージョンよりもはるかに優れたテンプレートが処理されます。たとえば、テンプレート関数またはテンプレートクラス内にブレークポイントを簡単に設定できるようになりました.gdbは、関数のすべてのテンプレートバージョンにブレークポイントを適切に配置します。しかし、これらのgdbの改善があなたがやっていることに当てはまるかどうかはわかりません。

関連する問題