CUDA-GDB使用int格式打印内存内容,即使它应该是float

时间:2015-12-04 18:09:49

标签: debugging types gdb cuda-gdb

在一个CUDA C项目中,我有一个指针浮动在一个名为“p”的结构中。 它是指向设备内存的指针,称为“p-> deviceOutput”。我在执行期间使用CUDA-GDB检查此指针的内容:当我尝试打印时,会发生以下情况:

(gdb) p *p->deviceOutput
$1 = 0

正如您所看到的,打印返回的内容看起来像一个int,绝对不是浮点数。 我确定指针是浮点指针,所以我对此行为感到困惑。 指定浮动格式没有帮助:

(gdb) p/f *p->deviceOutput
$2 = 0

实际上我也使用GDB获得相同的行为。 我正在使用Ubuntu 14.10,我的代码是使用-O0和-g选项使用nvcc编译的。

有人可以解释一下发生了什么,我该怎么做才能正确检查这个内存位置?感谢

1 个答案:

答案 0 :(得分:1)

gdb在打印浮点值时使用g格式说明符printf(内部)。以下是来自man page for printfg描述的有趣部分:

  

从结果的小数部分删除尾随零;一个   小数点只有在后跟至少一位数时才会出现。

因为浮点值为0,所以你得到0,而g格式说明符(由gdb使用)打印出一个没有小数点的精确0或任何尾随0的。

您可以使用ptype命令检查您的变量是否为float类型,如下所示:

(gdb) ptype p->deviceOutput