GDB - 访问复数的实部和虚部
Posted
技术标签:
【中文标题】GDB - 访问复数的实部和虚部【英文标题】:GDB - Accessing real and imaginary parts of a complex number 【发布时间】:2011-01-03 11:19:22 【问题描述】:在调试使用(C 或 C++)的程序时,gdb
将复数显示为 _M_value = xxx + yyy*I
(类型为 complex double
)。
在调试时,我需要打印该数字乘以一个因子。
以下不起作用:
print a * 8.0
我收到Argument to arithmetic operation not a number or boolean
。
另外,我无法访问 实部和虚部,因此我可以编写一个 gdb 宏来执行上述操作。我目前的解决方案是编写一个用于操作复杂值和数组的 C 函数,并从 gdb 调用该函数。不知何故,这感觉不对。
【问题讨论】:
您使用标准的 C++ 复杂模板吗?如果是,是 a.real() / a.imaj() 不工作吗? @neuro:谢谢 - .real() 和 .imag() 方法有效。 不客气。我已将我的评论设置为帮助人们的答案(是为了获得声誉吗?^^) 【参考方案1】:如果您使用标准 C++ 复杂模板,那么 complex::real() 和 complex::imaj() 应该可以工作。
my2c
注意:是评论^^
【讨论】:
仍然烦人的是 gdb 不允许使用复数进行算术运算(即乘以标量)。也许支持 python 的 gdb 7 会有所帮助。 @nimrod:是的。在使用 gdb 探索复杂的对象/模板结构时,我总是感到有点沮丧……我希望 gdb 7 能改进这一点……【参考方案2】:您可以调用 C 库函数 creal()
和 cimag()
来分解数字。
【讨论】:
对我不起作用。为实部和虚部打印 0。但我使用的是 c++,所以如果我在 C++ 对象(而不是 _m_value)上使用 .rea() 和 .imag() 方法,我会得到想要的结果。以上是关于GDB - 访问复数的实部和虚部的主要内容,如果未能解决你的问题,请参考以下文章
python二级练习和考试复习(将复数2.3103-1.3410-3j赋值给变量A,并分别提取A的实部和虚部。)