人大金仓数据库KingbaseES PLSQL调试工具-基础功能

金仓数据库KingbaseES PLSQL调试工具-基础功能

关键字:

KingbaseES、调试工具、plsql_pldbgapi、基础功能、人大金仓、KingbaseES

开发人员在编写、测试代码的过程中,经常要用到调试工具来帮助分析代码中的问题和性能。同样,当我们面对一个完全摸不着头绪,不知从何入手的bug时,通过调试工具来跟踪程序的执行流程往往是一个不错的选择。可见,一个好用的调试工具对于程序员来说是一件非常有帮助的利器。当下,市面上已有很多流行的代码调试工具,比如大名鼎鼎的GDB、LLDB等,它们都得到了广泛的应用并深受好评。下面,本文将介绍一种专门针对金仓数据库中的过程语言PLSQL设计的强大调试工具——plsql_pldbgapi。它可以帮助开发人员方便地调试PLSQL代码,通过调试,你可以更加自信地开发和维护金仓数据库中的PLSQL函数、存储过程等,提高开发效率和代码质量。由于调试工具plsql_pldbgapi的功能很强大,提供的调试接口很多,因此本文只介绍它的基础功能,后续会专门另写文档去讲述它的进阶用法。

plsql_pldbgapi概述

plsql_pldbgapi是KingbaseES 的一个扩展插件,它可以用于KingbaseES 中PLSQL语言的存储过程、函数、包、触发器函数、匿名块、object type方法的代码调试。plsql_pldbgapi提供了很多接口来支撑其强大的调试功能。其中包括操作断点、执行代码、调试数据、查看调用堆栈、查看源码信息、查看版本信息等。并且它还提供了局部断点调试与全局断点调试两种调试模式。本文将介绍plsql_pldbgapi的基础功能、基础功能和相关的小案例,以帮助开发人员来初步使用该工具去进行PLSQL代码的调试。

plsql_pldbgapi的基础用法

在本小节中,我们以存储过程的调试为例,来说明plsql_pldbgapi的基础功能。假设我们已经创建好了一个存储过程debug_proc, 现在我们想要使用插件plsql_pldbgapi来调试该存储过程。

当我们使用GDB去调试一个运行中的进程时,一般需要两个会话窗口去进行,其中一个显示被调试进程的执行信息(下文中用“应用端”表示),另一个用来调用GDB去写一些调试的命令(下文中用“调试端”表示)。跟GDB类似,使用plsql_pldbgapi来调试一个正在运行中的存储过程时,也需要两个会话窗口:应用端和调试端。首先我们可以在KingbaseES中使用ksql工具来开启两个会话窗口,任选一个作为应用端,另一个作为调试端。下面演示具体的调试步骤:

1>创建plsql_pldbgapi环境;

  1. 从系统表sys_proc中查出存储过程debug_proc的OID;(这些信息都是全局的,因此以上两个步骤在应用端和调试端执行都可以。)

  1. 应用端:根据查询出的OID来创建存储过程debug_proc的监听状态;

  1. 应用端:调用存储过程debug_proc, 会产生一个PLDBGBREAK端口号来跟这个被调用的存储过程debug_proc相关联,此处PLDBGBREAK端口号为4,此时应用端的程序会卡在此处,等待调试端来调试。

  1. 调试端:调用函数plsql_pldbg_attach_to_port来根据应用端产生的PLDBGBREAK端口号连接给定的监听端口,从而形成调试客户端,启动调试过程。该函数会返回一个标识此特定调试的会话句柄session_id(下图中的1), 在之后的调试动作中,可以通过此session_id来操作这个特定调试。此步骤完成后,调试存储过程debug_proc的准备工作已经完成,下面可以使用plsql_pldbgapi提供的各种功能来进行具体的调试。具体的功能会在下一小节中介绍。

Session_id

  1. 调试端:当调试结束后,通过在调试端调用plsql_pldbg_abort_target函数(需传入参数session_id)可以终止调试,此时应用端也会终止程序的运行,并报告一个ERROR。

调试端

应用端

plsql_pldbgapi的基础功能

plsql_pldbgapi通过接口函数来支撑它的所有调试功能,下面将通过介绍主要的接口函数来说明它的基础调试功能。

  1. plsql_pldbg_set_breakpoint :

该函数在调试对象的指定位置设置断点,然后等待下一个可执行语句到达该目标断点。类似于GDB中的“b”指令,它根据源代码中的行号为来设置断点,它的调用方法如下:

select plsql_pldbg_set_breakpoint(session_id, f_oid, line_no);

其中session_id是plsql_pldbg_attach_to_port函数返回的会话句柄,f_oid是欲调试的PLSQL对象的OID,line_no表示该断点设置在源代码中的第line_no行。

  1. plsql_pldbg_get_breakpoints:

该函数用来获取某个session_id下设置的所有断点信息,类似于GDB中的“info b”命令。它的调用方法如下:

select plsql_pldbg_get_breakpoints(session_id);

  1. plsql_pldbg_step_into:

该函数用来单步执行,遇到子函数或子存储过程会进入到相应的部分,类似于GDB中的“s”命令。它的调用方法如下:

select plsql_pldbg_step_into(session_id);

  1. plsql_pldbg_step_over:

该函数用来单步执行,不过遇见子函数或子存储过程会跳过内部的执行过程, 类似于GDB中的“n”命令。它的调用方法如下:

select plsql_pldbg_step_over(session_id);

  1. plsql_pldbg_continue:

该函数表示从当前位置继续执行,直到遇见下一个断点,如果没有断点,将直接执行到调试对象的最后。类似于GDB中的“c”命令。它的调用方法如下:

select plsql_pldbg_continue(session_id);

使用plsql_pldbgapi调试的小案例

在第2小节中,我们已经做好了调试存储过程debug_proc的准备工作,下面来根据上述的功能做具体的调试工作。并通过这个案例来展示plsql_pldbgapi的基础功能和用法。

  1. 通过函数plsql_pldbg_get_source来查看debug_proc的源码,在该函数中需要传递两个参数,一个是标识此特定调试的会话句柄session_id(下图中的1);另一个是debug_proc的OID(下图中的33073)。

应用端

调试端

  1. 在第5行设置断点。

调试端

应用端

  1. 单步执行,遇到子程序跳过。

调试端

应用端

在单步执行过程中,发现应用端报错,“ i ”不存在,对源代码修改以后继续调试。

  1. 查看修改后的源码

应用端

调试端

  1. 继续在第5行设置断点,然后单步执行

应用端

调试端

调试端

应用端

这次程序能够正常执行,说明代码修改成功。

注:本文只是介绍了调试工具plsql_pldbgapi的最基础用法,关于plsql_pldbgapi更详细和全面的使用方法可以参考KingbaseES的官方手册。

参考资料

《KingbaseES插件参考手册》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值