sql 没有调试 菜单_Ubuntu 16.04+CLion配置Postgresql调试环境

93a1ef7747c2e39857b44a2f24d974dd.png

《一个常用环境在windows但是必须要在Linux上写代码的悲剧》

接下来是一些回忆,难免保证有一些偏差,只是大体思路可以参考一下。

用源码安装pgsql并配置环境变量

第一步,把pgsql的源码下载下来,把一些依赖库装好。

然后可以看到源码目录里面有个configure.

sh configure --prefix=$HOME/project --enable-depend --enable-cassert --enable-debug CFLAGS="-ggdb -O0"

按照惯例去复读网上很多人的博客,这里我希望采取默认安装路径,--prefix直接省略。

cmake_minimum_required(VERSION 3.6)
project(postgres)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -O0”)
set(CMAKE_C_FLAGS_DEBUG “${CMAKE_C_FLAGS_DEBUG} -O0”)
add_custom_target(postgres COMMAND make -C ${postgres_SOURCE_DIR})

执行make&&make install.

之后要初始化数据库,就需要参考这个文章(二)中的一部分:Ubuntu18.04源码安装PostgreSQL11_我的梦-CSDN博客_ubuntu源码安装postgresql里的说法,但是不用新建用户postgres.

把环境变量配置一下,并且给一下文件夹权限,然后就可以把刚刚那个文章关掉了。

c52e19639267dc03e86cab48c9fb3b0f.png

然后重启电脑让环境变量生效。

接着进行initdb的设置,(如果刚刚环境目录生效了,理论上它也不会问你数据在哪) 保险起见可以用initdb -D /var/postgresql/data这样的做法。

之后pg_ctl start,把数据库打开,并用createdb命令新建一个db,我这里用的名字叫testdb。

用另外一个终端执行psql testdb,发现可以连接。随便执行几个插入命令也可以顺利执行。

关闭psql,执行pg_ctl stop,把之前数据库相关的东西都关掉。

用clion进行调试

之后打开clion:

打开debug configuration,增加一个Application,Target选postgres,Executable选择到源码目录的src/backend/postgres,程序参数写 -D 数据目录

点击debug就能开始调试,参考这个文章就行。

bb62d9f5925ec303753acc359ce85f8d.png

clion调试postgresql - 邱明成 - 博客园

但是如果真的只是这样就好了,我tm还用折腾那么半天……

用clion进行planner的调试

之后你会发现一个很严重的问题,就是它其实有些断点是进不去的。

比如说cost_index,你可以看到clion在打上断点之后有禁止符号,它提醒你这里打上断点也没用,因为程序到不了这里。

于是你可以进入程序的目录,找到其他的target:最熟悉的target莫过于pg_ctl和psql.

先看看psql,程序参数写 testdb,这样看起来就很美好,点击一下debug,成了。

但其实这个样子也不行,你发现它还是进不去那些断点。

9f67a4c10f6d40c20b76e820d9827070.png

再看看pg_ctl,人家根本不搭理你,还问你是不是安装错了。

于是事情就卡死了:clion不背锅,是之前的可执行文件选错了。

学长的通俗解释告诉我,pg分为client和server,如果是前端的事情呢,那么肯定是去调试client,这个其实对应着psql。而如果我们想调试planner,肯定偏内核一点,所以我们需要调试server。

在找server之前,先做些准备工作:

编辑  /etc/sysctl.d/10-ptrace.conf  文件
修改kernel.yama.ptrace_scope = 1为kernel.yama.ptrace_scope = 0
然后运行sudo service procps restart 或者重启

这样可以保证clion的gdb能正常使用。

之后从终端启动数据库并用psql testdb链接它:

运行这个sql语句:select pg_backend_pid(),记住pid。

使用clion的附加进程调试(run菜单下),找到那个pid,进行debug。

从psql端写入一些查询,比如select * from T where id = 1,可以看到cost_index等函数有断点触发。

不知道有没有什么正经的做法……反正目前想到的比较正常的做法就只能这样做了。

(不过果然这个环境配置问题还是太小众了……)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值