首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用gdb调试greenplum

如何使用gdb调试greenplum
EN

Stack Overflow用户
提问于 2019-05-14 09:59:23
回答 1查看 268关注 0票数 0

我需要使用gdb来调试greenplum,这是PostgreSQL数据库的分布式版本。现在我已经成功地安装了greenplum,并且能够使用psql来运行sql。但是,当我使用gdb对其进行调试时,很难获得代码跟踪。它经常报告“没有这样的文件”。我在网上找不到有用的文档。有谁有相关经验吗?谢谢。

对于greenplum数据库,我有一个主节点和两个段节点。

在终端A中,我首先在主节点上使用pg_backend_pid()来获取后端线程id。

代码语言:javascript
复制
[testDB=# select pg_backend_pid();
pg_backend_pid 
----------------
           9893
(1 row)

在不同的终端B中,我使用gdb连接到后端进程:

代码语言:javascript
复制
gpadmin@greenplum-mdw:/home/build/gpdb$ sudo gdb -p 9893

我可以通过"info thre“查看线程信息:

代码语言:javascript
复制
(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:

代码语言:javascript
复制
[testDB=# select count(*) from customers;

在终端B中,我一步一步地运行程序,但它显示没有这样的文件或目录:

代码语言:javascript
复制
(gdb) n
29  ../sysdeps/unix/sysv/linux/x86_64/recv.c: No such file or directory.

还有这个

代码语言:javascript
复制
(gdb) n
pq_recvbuf () at pqcomm.c:925
925 pqcomm.c: No such file or directory.

我想看一下PostgresMain函数,所以我这样做了:

代码语言:javascript
复制
(gdb) b PostgresMain
Note: breakpoint 1 also set at pc 0x87c860.
Breakpoint 2 at 0x87c860: file postgres.c, line 4590.

但是在我运行之后,像这样继续运行:

代码语言:javascript
复制
(gdb) c
Continuing.

它就是从未停止过。

EN

回答 1

Stack Overflow用户

发布于 2019-05-16 01:38:47

我最终发现greenplum在编译时没有添加-g和-ggdb标志。我添加了它,然后它就可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56122020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档