2012-02-17 20 views
1

gdbでデバッグするときのC++コード: 1)gdbで変数を作成するにはどうすればいいですか? gdb/miコマンドを使用していますか? 2)gdbでクラスのインスタンスを作成する方法。 3)将来使用するために、作成したインスタンスをgdbの作成された変数に割り当てる方法はありますか?たとえば :クラスのインスタンスを作成して変数に割り当てる方法は?

C++ code: 
class C { public:int value; } 

gdb commands (pseudo-code): 
var v = new C() 
print v.value 
+0

この宿題はありますか?何を試しましたか? –

+0

いいえ、これは私の家事ではありません。それは私の作品です。私は、GDBがブレークポイントでブレークしたときに、ロガークラスのインスタンスを作成したかったので、作業クラスの複雑なインスタンスを調べることができます。作業クラスには多くのメンバ変数があり、メンバにはメンバがたくさんあります。だから私は必要な情報を出力するために、ロガークラスのインスタンスを作成する必要があります。 – sean

答えて

0

は "新" は、現在のgdbではサポートされていません。パーサーではまったく扱われません。進行状況を追跡したい場合は、gdb bugzillaにバグがあります。誰か(咳止め)がそれに取り組んでいます。

一方、手動で行うことができると思います。私は実際にこれを試みたことはありません。考えられるのは、

set var $new = malloc(sizeof(struct Whatever)) 
call Whatever::Whatever($var) 

ですが、C++ ABIではいくつかの魔法の隠し引数が指定されているため、その呼び出しで追加の引数が必要になることがあります。

別のアプローチは、プログラムのデバッグの便利な関数を作ることです。

whatever *new_w() { return new whatever(); } 

次に、あなただけのGDBから直接呼び出すことができます。

関連する問題