gdb打印出指针是否为空

gdb打印出指针是否为空

来源: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 。)。 (这可能会被大小昂贵的编译标志改变。)

所以你可以替换NULL0. (此外,调试器不太关心类型。)

上面的 if==应该只是正常的==。否则,一个人需要写一些非常有趣的东西。

相关内容