首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用kdbg (Lilnux中的kdbg)调试postgres (和外部.so库)

用kdbg (Lilnux中的kdbg)调试postgres (和外部.so库)
EN

Stack Overflow用户
提问于 2013-07-24 11:15:56
回答 1查看 608关注 0票数 1

我想调试一个用户定义的函数(称为C/C++实现的prepareTheOutputRecord ),它是postgres中用户定义函数的一部分。下面是我如何在gdb中实现这一目标:

  1. 函数prepareTheOutputRecord驻留在postgresql server库目录中的libMyExtenstion.so文件中。
  2. 我启动psql shell,检索进程的pid。 postgres=#选择pg_backend_pid();pg_backend_pid
  3. 使用附加的pid运行gdb: gdb -p 4120
  4. 现在搜索.so文件,函数是如何准确调用的: nm -as -as libMyExtenstion.so grep prepareTheOputRecord 000000002633fe t
  5. 在gdb中设置一个断点并运行程序: B _ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData函数"_ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData“未定义。在将来的共享库负载上使断点挂起?(y或n) y断点1 (_ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData)待决。(gdb) c
  6. 在psql中执行SQL。在某个点,断点在gdb中被击中: 断点1,prepareTheOutputRecord (this=0x1116410,fcinfo=0x7fff3a41e150) at ./Dir/file.cpp: 1736 1736 funcctx = SRF_PERCALL_SETUP();(gdb)
  7. 继续调试代码。

我想在kdbg中做同样的事情。为此,我加载了postgres可执行文件,附加到进程,加载了cpp文件,在函数中用鼠标设置了断点,继续执行postgres进程,但是断点从未被击中:(我重复了相同的.so文件(而不是postgres可执行文件),但没有成功。我甚至尝试将断点设置为_ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData (没有鼠标单击),但是程序并没有停止在kdbg :(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-03 18:13:20

我认为问题在于kdb没有作为根(或postgres)运行。由于权限错误,符号没有加载,因此没有显示断点(也不允许放置在函数上)。

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

https://stackoverflow.com/questions/17832392

复制
相关文章

相似问题

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