在调试C+;期间调用round()函数时,GDB打印任意值+;程序 我用GDB调试C++(MEX)程序。在代码中,threre是一种语句,其中一个变量被赋予另一个变量的舍入值。例如: x = round(y);

在调试C+;期间调用round()函数时,GDB打印任意值+;程序 我用GDB调试C++(MEX)程序。在代码中,threre是一种语句,其中一个变量被赋予另一个变量的舍入值。例如: x = round(y);,c++,gdb,mex,C++,Gdb,Mex,赋值工作正常,当我在gdb提示符下调用时,(gdb)print x,将打印正确的值。但是,当我调用(gdb)print round(y)时,会打印一个奇怪的任意数字 你知道是什么导致了这种奇怪的行为吗?我在Ubuntu上重现了这种奇怪的行为。gdb在双输入和双返回值方面遇到问题 不过,似乎有一个简单的解决办法,那就是召集_;轮 (gdb) p round $6 = {<text variable, no debug info>} 0x7ffff77f7460 <__round&

赋值工作正常,当我在gdb提示符下调用时,
(gdb)print x
,将打印正确的值。但是,当我调用
(gdb)print round(y)
时,会打印一个奇怪的任意数字


你知道是什么导致了这种奇怪的行为吗?

我在Ubuntu上重现了这种奇怪的行为。gdb在双输入和双返回值方面遇到问题

不过,似乎有一个简单的解决办法,那就是召集_;轮

(gdb) p round
$6 = {<text variable, no debug info>} 0x7ffff77f7460 <__round>
(gdb) p round(1.3)
$7 = -858993460
(gdb) p __round(1.3)
$8 = 1
(gdb) p __round
$9 = {double (double)} 0x7ffff77f7460 
因此,gdb将输入值截断为32位int,并向round发送一个int,round将其发送回来。因此,double的低位字就是输出。或者可能是将返回值截断为32位,结果相同

至于为什么gdb没有一个适合round的原型,我不确定


问得好。

我们可以看看您的代码吗?需要一个简单的例子来重现您的问题。谢谢!问题不仅仅在于round()。我可以用其他函数复制,比如pow()(gdb)ppow$2={}0x7ffff77f6990(gdb)p_upow$3={double(double,double)}0x7ffff77f6990是的,我当然看到了同样的问题。再次感谢!
11    double y = 1.3;
(gdb) n
13    int k = round(y);
(gdb) p /x round(y)
$28 = 0xcccccccd
(gdb) p /lx *(long*)&y
$29 = 0x3ff4cccccccccccd
(gdb)