我需要使用gdb调试PostgreSQL数据库的分布式版本greenplum。现在,我已经成功安装了greenplum并能够使用psql运行sql。但是,当我使用gdb调试它时,很难获得代码跟踪。它经常报告“没有这样的文件”。我没有在线找到有用的文件。有没有相关经验?谢谢。
对于greenplum数据库,我有一个主节点和两个段节点。
在终端A中,我首先在主节点上使用pg_backend_pid()获取后端线程ID。
[testDB=# select pg_backend_pid();
pg_backend_pid
----------------
9893
(1 row)
然后在另一个终端B中,我使用gdb附加到后端进程:
gpadmin@greenplum-mdw:/home/build/gpdb$ sudo gdb -p 9893
我可以通过“ info thre”查看线程信息:
(gdb) info thre
Id Target Id Frame
* 1 Thread 0x7fe0a51a7740 (LWP 9893) "postgres" 0x00007fe0a24d587f in __libc_recv (fd=11, buf=buf@entry=0x102db80 <PqRecvBuffer>, n=n@entry=8192, flags=flags@entry=0)
at ../sysdeps/unix/sysv/linux/x86_64/recv.c:28
2 Thread 0x7fe08cee7700 (LWP 9894) "postgres" 0x00007fe0a194974d in poll () at ../sysdeps/unix/syscall-template.S:84
在终端A中,我通过psql接口运行一个sql:
[testDB=# select count(*) from customers;
在终端B中,我逐步运行程序,但没有显示类似这样的文件或目录:
(gdb) n
29 ../sysdeps/unix/sysv/linux/x86_64/recv.c: No such file or directory.
还有这个
(gdb) n
pq_recvbuf () at pqcomm.c:925
925 pqcomm.c: No such file or directory.
我想看一下函数PostgresMain,所以我做了:
(gdb) b PostgresMain
Note: breakpoint 1 also set at pc 0x87c860.
Breakpoint 2 at 0x87c860: file postgres.c, line 4590.
但是在我跑步之后,继续这样:
(gdb) c
Continuing.
它永远不会停止。
答案 0 :(得分:0)
我最终发现greenplum在编译时没有添加-g和-ggdb标志。我添加了它,然后它起作用了。