c上有点生疏,如何打印此结构的有用信息?

c上有点生疏,如何打印此结构的有用信息?,c,C,所以我正在调试一个别人编写的linux模块,我已经有一段时间没有用c/c编写任何东西了++ 我在这里得到一个错误(这个问题与错误间接相关): 所以我想试着找出什么是usbmightx->vdev 这是它的结构: 结构视频设备 char name[32] :Canonical name for this device. int type :Type of V4L2 dev

所以我正在调试一个别人编写的linux模块,我已经有一段时间没有用c/c编写任何东西了++

我在这里得到一个错误(这个问题与错误间接相关):

所以我想试着找出什么是
usbmightx->vdev

这是它的结构:

结构视频设备

char name[32]                              :Canonical name for this device.
int type                                   :Type of V4L2 device
(use type2 as well, look at videodev2.h for details on type2)
int minor                                  :The device's minor number
struct file_operations *fops;              :File operations used, which are displayed below
void (*release)(struct video_device *vfd); :Release function used by the driver to release
void *priv:                                :Can be used by the driver
我已经有一个
pr\u err
语句用于打印信息,但不知道如何使用它。不确定它的定义在哪里。我想我会喜欢一个简单的printf语句或类似的smth语句,这样我就可以用
dmesg

多谢各位

更新

一位评论员要求提供有关该错误的更多信息:

video_register_device(usbMightex->vdev, VFL_TYPE_GRABBER, video_nr)
我在这里发布了一个关于这个问题的不同问题:


这个问题不是关于错误,而是关于如何打印一些可能有助于解决错误的信息。感谢所有回复。

最明显的答案是,使用调试器并在希望查看变量的位置放置断点

若要在代码中打印,请假设链接页面正确(您应该通过检查头文件来验证这一点,否则可能会出现无意义的输出):


其中
v
是指向结构实例的指针。

如果它编译为内核模块(*.ko),您可能可以在不重新启动的情况下多次插入和删除它

lsmod
modprobe
insmod


您可能会发现有用的
printk()
函数,它们输出到syslog,进入
dmesg
IIRC

为什么关闭?问题出了什么问题?可能是
printf(“名称:%s\n类型:%d\n名称:%d\n”,vd.name,vd.type,vd.minor
(其中
vd
视频设备
file\u operations
成员只是一组函数指针,因此除非您想对指针值进行十六进制转储,否则这就是我建议打印的所有有用信息。在哪里
vc
我使用
usbmightx->vdev
对吗?可能不是吧……我删除了标记。@evan54:“我在这里出错”.什么错误?也许可以将其复制到您的问题中。也许可以提供一个完整的示例,我们可以编译该示例以产生错误?我只知道如何通过重新启动计算机来运行此操作:(这是一个用于网络摄像头的内核模块,我对内核模块几乎一无所知。我得到了
v->name
语句。我现在正在尝试REST。非常感谢!我查找了头文件,最后在这里找到了它:
/usr/src/linux-headers-3.13.0-43/include/media/v4l2-dev.h
,确实有点不同,但你得到了它。)我要走了!我正在使用
pr_err()
不知道在哪里定义它,但它的工作原理似乎与您所说的基本相同。另外,请注意详细说明
modprobe
insmod
lsmod
?我尝试了一个'modprobe myModule*,但它没有做任何事情…:snice!它工作了,做了
rmmod myMod
insmod myMod
,并且得到了dmesg上的消息
printf("%31s\n", v->name);
printf("%d\n", v->type);
printf("%d\n", v->minor);
printf("%p\n", (void *)v->fops);
printf(PRIxMAX "\n", (uintmax_t)v->release);
printf("%p\n", priv);