我想知道为什么在gdb中evaluate函数不起作用?在我的源代码文件中,当在gdb中调试时,这些示例都是错误的评估。
(gdb) p pow(3,2)
$10 = 1
(gdb) p pow(3,3)
$11 = 1
(gdb) p sqrt(9)
$12 = 0
我想知道为什么在gdb中evaluate函数不起作用?在我的源代码文件中,当在gdb中调试时,这些示例都是错误的评估。
(gdb) p pow(3,2)
$10 = 1
(gdb) p pow(3,3)
$11 = 1
(gdb) p sqrt(9)
$12 = 0
在gdb中调用函数的语法为:
call pow(3,2)
类型
help call
在 gdb 提示符处获取更多信息。
即:
(gdb) p ((double(*)())pow)(2.,2.)
$1 = 4
$1 = 2
的结果。 - dajpow()
在 gdb 中可用,那么你可以创建自己的包装函数:double mypow(double a, double b)
{
return pow(a,b);
}
或许还可以将它包装在一个#ifdef DEBUG
之类的语句中,以避免在最终二进制文件中增加冗余代码。
顺便说一下,您会注意到其他库函数也可以被调用(并打印其返回值),例如:
(gdb) print printf("hello world")
$4 = 11
p pow
即可,它会给我返回:$28 = {<text variable, no debug info>} 0x7ffff77ffbd0 <__pow>
。 - falstroNAME
pow, powf, powl - power functions
SYNOPSIS
#include <math.h>
double pow(double x, double y);
在这个位置上,你不应该传递一个整数而不是一个双精度浮点数。
call pow( 3. , 2. )
另外,仅传递一个参数是不够的,你需要像函数期望的那样传递两个参数。
wrong: call pow ( 3. )