我想知道为什么评估函数在gdb中不起作用?在我的源文件中,我包括在gdb中调试时,这些示例是错误的评估。
(gdb) p pow(3,2)
$10 = 1
(gdb) p pow(3,3)
$11 = 1
(gdb) p sqrt(9)
$12 = 0发布于 2009-08-30 20:17:03
我的猜测是编译器和链接器对这些特定的函数做了一些神奇的工作。最有可能提高业绩。
如果您绝对需要pow()才能在gdb中使用,那么您可以创建自己的包装函数:
double mypow(double a, double b)
{
return pow(a,b);
}也许还会将其封装到一个#ifdef DEBUG或其他什么东西中,以避免最终二进制文件混乱。
顺便说一下,您会注意到可以调用其他库函数(以及它们的返回值),例如:
(gdb) print printf("hello world")
$4 = 11发布于 2009-08-30 20:03:06
在gdb中调用函数的语法是
call pow(3,2)类型
help call在gdb提示符处获取更多信息。
发布于 2012-11-15 13:30:38
您需要告诉gdb,它将在浮点寄存器(而不是普通寄存器)中找到返回值,并为参数提供正确的类型。
即:
(gdb) p((double(*)()pow)(2.,2.)
$1 = 4
https://stackoverflow.com/questions/1354731
复制相似问题