如何解决GDB点运算符引用指针?
在使用 GDB 进行调试时,我注意到一些非常奇怪的事情。即, .运算符在打印语句中使用时,可以像 -> 运算符一样取消引用单个或什至 双 指针以获取结构的字段。
这是一个简单的例子:
#include <stdio.h>
typedef struct node {
struct node *next;
int data;
} Node;
int main()
{
Node head,*head_p,**head_pp;
head.next = 0UL;
head.data = 42;
head_p = &head;
head_pp = &head_p;
// **GDB PAUSED HERE**
printf("head.data: %d\n",head.data);
// These won't compile because the . operator is misused
//
// printf("head_p.data: %d\n",head_p.data);
// printf("head_pp.data: %d\n",head_pp.data);
}
这是在 printf
处暂停时 GDB 打印的时间:
怎么可能。运算符(在 GDB 打印语句中)取消引用这样的指针??
谢谢!
解决方法
GDB 命令的语法不是 C。表达式是根据模块的语言计算的,在您的情况下为 C/C++。
.,->
结构成员和指向结构的成员。为方便起见,GDB 将两者视为等价的,根据存储的类型信息选择是否取消引用指针。在结构和联合数据上定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。