gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:01 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com