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

run floor() or ceil() in gdb

本文关键字:ceil floor gdb 运行      更新时间:2023-10-16

编辑: 我在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

。所以我的问题是没有给出正确值的双精度/ceil 函数有什么区别。由于某种原因,三角函数似乎也没有返回正确的值。它们似乎都有相同或相似的函数签名,所以我对出了什么问题感到困惑。

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

这个:

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

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

由于在许多平台上(包括Linux/x86_64(参数传递取决于参数的类型(整数参数以RDI传递,RSI等双精度参数在XMM0XMM1等中传递(,您必须告诉GDB函数需要什么类型的参数(除非存在libm调试信息,在这种情况下不需要强制转换(。尝试

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