![gdb打印出指针是否为空](https://linux22.com/image/223830/gdb%E6%89%93%E5%8D%B0%E5%87%BA%E6%8C%87%E9%92%88%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA.png)
来源:https://git.postgresql.org/cgit/postgresql.git/tree/src/backend/optimizer/plan/planner.c
(gdb) n
3556 if (root->group_pathkeys)
(gdb) s
3558 else if (root->window_pathkeys)
(gdb) print root->group_pathkeys==NULL
No symbol "NULL" in current context.
(gdb) s
3559 root->query_pathkeys = root->window_pathkeys;
(gdb) s
query_planner (root=root@entry=0x55ffb53fdb70, qp_callback=qp_callback@entry=0x55ffb3299ee0 <standard_qp_callback>, qp_extra=qp_extra@entry=0x7ffc5db45260) at ../../Desktop/pg_sources/main/postgres/src/backend/optimizer/plan/planmain.c:219
219 fix_placeholder_input_needed_levels(root);
根据上面的内容,我可以猜测root->group_pathkeys == NULL
并且root->query_pathkeys != NULL
可以使用 print 来评估表达式。类似于print (root->group_pathkeys==NULL)
然后返回 1。
答案1
print root->group_pathkeys
通常足以查看它是否为零。
NULL
通常调试器不知道它,因为它不是声明而是定义的(可能是#define NULL 0
或像 jian 所说的那样强制转换为 void 。)。 (这可能会被大小昂贵的编译标志改变。)
所以你可以替换NULL
为0
. (此外,调试器不太关心类型。)
上面的 if==
应该只是正常的==
。否则,一个人需要写一些非常有趣的东西。