在gdb中运行floor()或ceil()

时间:2018-08-27 22:21:33

标签: c++ c gdb floor

编辑:我在Linux Mint 18.3(Ubuntu 16.04)X64上

我已经读了许多其他问题,在gdb中执行任意函数的最佳方法是确保正确地转换输入/输出变量。

表达式p ((double(*)())floor)(2.12)产生$1 = 2.1200000000000001 表达式p ((double(*)())ceil)(2.12)

也是如此

,但数学库中的其他功能似乎可以正常运行,例如p ((double(*)())fmod)(12.,5.)给出2; p ((double(*)())sqrt)(64.)给出8。p ((double(*)())pow)(2.,2.)给出4。

所以我的问题是double / ceil函数的区别是什么?同样,由于某些原因,三角函数也未返回正确的值。它们似乎都具有相同或相似的功能签名,所以我很困惑发生了什么。

math.h c库是包含的标头,但是代码也链接到c ++库-不确定是否会有所不同。

1 个答案:

答案 0 :(得分:1)

此:

p ((double(*)())floor)(2.12)

要求GDB调用不带参数的函数floor

由于在许多平台(包括Linux/x86_64上),参数传递取决于参数的类型(RDIRSI中的integer parameters are passed,等XMM0XMM1等中的双参数),您必须告诉GDB函数期望的参数类型(除非存在libm调试信息,则无需强制转换)。试试

p ((double(*)(double))floor)(2.12)