我需要使用gdb来调试greenplum,这是PostgreSQL数据库的分布式版本。现在我已经成功地安装了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.它就是从未停止过。
发布于 2019-05-16 01:38:47
我最终发现greenplum在编译时没有添加-g和-ggdb标志。我添加了它,然后它就可以工作了。
https://stackoverflow.com/questions/56122020
复制相似问题