c++ - 在 gdb 中运行 floor() 或 ceil()

标签 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 库是包含的 header ,但代码也链接到 c++ 库 - 不确定这是否会有所不同。

最佳答案

这个:

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

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

由于在许多平台上(包括 Linux/x86_64),参数传递 取决于参数的类型(RDI 中的 integer parameters are passedRSIXMM0XMM1 等双参数),你必须告诉GDB是什么类型函数期望的参数(除非存在 libm 调试信息,在这种情况下不需要转换)。尝试

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

关于c++ - 在 gdb 中运行 floor() 或 ceil(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52047678/

相关文章:

c - 调用某些 win32 api 函数时的 Haskell undefined reference

c - 为 Unix 和 Windows 编写应用程序

c - 为什么我用gdb调试的时候是 "No symbol file now"?

c++ - GDB 断点在 asio socket->connect 调用后停止工作

c++ - 一条定义规则警告

c++ - 在分块矩阵中查找一个值

c - 为什么这个程序没有打印出想要的输出?

C++模板题

c++ - 计算字符串 vector 中出现的次数

c++ - gdb - 多线程和共享库