使用math.h函数时,gdb会输出奇怪的输出

时间:2011-12-20 02:43:41

标签: c gdb

  

可能重复:
  Why does gdb evaluate sqrt(3) to 0?

C新手在这里。当尝试在线使用math.h函数时,必须有一个明显的解释为什么gdb会给出奇怪的输出。例如,下面的fabs函数应该取绝对值,并返回一个double。

(gdb) p cos(2*3.141/4)
$13 = 1073291460
(gdb) p fabs(-3)    
$14 = 0
(gdb) p fabs(3)
$15 = 0
(gdb) p fabs(3.333)
$16 = 1
(gdb) p (double) fabs(-3.234)
$17 = 1
(gdb) p (double) fabs((double)-3.234)
$18 = 1
(gdb) p ((double(*)(double))fabs)(-3)
$19 = 682945

我正在使用的代码包含math.h,并且实际代码似乎正确执行,尽管在gdb中内嵌的相同代码会产生奇怪的结果。我可以忽略它,但这似乎是一个很好的学习机会。

1 个答案:

答案 0 :(得分:8)

(参考:http://lists.gnu.org/archive/html/gdb/2009-12/msg00004.html

gdb缺少cos函数的调试信息,因此假设它是int cos(...)函数,因此值不能正确返回(特别是在x86上作为寄存器)存储浮点返回和整数返回是不同的。)

这可以通过指定类型来解决:

(gdb) p ((double(*)(double))cos) (1.0)
$18 = 0.54030230586813977