2011-01-03 8 views
7

gdbは、複素数を_M_value = xxx + yyy*I(タイプはcomplex double)と表示します(CまたはC++を使用するプログラムをデバッグする場合)。GDB - 複素数の実数部と虚数部へのアクセス

デバッグ中に、その数値に因子を掛けて印刷する必要があります。

んではない作品:

print a * 8.0 

私はArgument to arithmetic operation not a number or booleanを取得します。

また、実数部と虚数部にアクセスすることができないため、上記の処理を行うgdbマクロを作成できます。私の現在の解決策は、複雑な値と配列を操作するためのC関数を記述し、その関数をgdbから呼び出すことです。どういうわけか、これはちょうどいい気分ではありません。

+1

あなたは、標準C++の複雑なテンプレートを使用していましたか?もしあれば、a.real()/ a.imaj()は動作していませんか? – neuro

+0

@neuro:ありがとう - .real()と.imag()メソッドは動作します。 – nimrodm

+0

ようこそ。私は人々を助けるための答えに私のコメントを設定しました(評判を得るのでしたか?^^) – neuro

答えて

3

標準のC++の複雑なテンプレートを使用する場合、complex :: real()とcomplex :: imaj()は動作するはずです。

MY2C

注:コメント^^

+0

gdbでは複素数を使った算術演算(スカラー倍)はできません。おそらく、gdb 7とPythonのサポートが役に立ちます。 – nimrodm

+0

@nimrod:はい。 gdbを使用して複雑なオブジェクト/テンプレート構造をgdbで探索すると、私はいつも少し不満を感じます... gdb 7が改善することを願っています... – neuro

0

Cライブラリ関数creal()cimag()を呼び出して番号を打ち切ることができます。

+0

私のために働きません。実数部と虚数部の0を出力します。しかし、私はC++を使用しています。したがって、私が.rea()と.imag()メソッドをC++オブジェクト(_m_valueではなく)で使用すると、目的の結果が得られます。 – nimrodm

関連する問題