当前位置: 首页 > news >正文

金仓数据库 KingbaseES 插件参考手册 plsql_pldbgapi

69. plsql_pldbgapi

69.1. 插件plsql_pldbgapi简介

插件plsql_pldbgapi是KingbaseES 的一个扩展插件。主要用于PL/SQL语言的存储过程、函数、包、触发器函数、匿名块、object type方法的代码调试。

  • 插件名为 plsql_pldbgapi

  • 插件版本 V1.1

69.2. 插件plsql_pldbgapi加载方式

KingbaseES数据库默认将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。因此只需要在客户端工具执行create extension命令即可。

-- 创建插件
create extension plsql_pldbgapi;

69.3. 插件plsql_pldbgapi的参数配置

plsql_pldbgapi扩展插件无需配置任何参数。

69.4. 插件plsql_pldbgapi使用方法

69.4.1. plsql_debugger调试流程

以下详细介绍其局部断点调试和全局断点调试流程的命令行调试流程。只是在目标后端与调试端建立连接的流程有稍微差别,实际的调试的流程总体一致。

plsql_debugger 的调试操作是建立在目标后端和调试端正常通信的前提下,其详细的调试流程如下:

  1. 创建监听,局部断点调试根据调试对象的OID去建立监听,全局断点调试则不需要带调试对象的OID而是创建全局监听。

  2. 创建连接,全局调试与局部调试的连接方式稍有不同,对于局部调试,首先是调用待调试的对象,让目标后端进程以通信服务器端的身份发起连接,然后在调试端调用端口连接函数plsql_pldbg_attah_to_port让调试端以通信客户端的身份与目标后端建立连接;对于全局断点调试,先设置全局断点,然后调用plsql_pldbg_wait_for_target函数发起连接并等待接受目标后端的连接。此时调用待调试的对象就可以与调试端建立通信连接。

  3. 调试设置,可以根据需要设置和删除断点信息,包括局部断点和全局断点。

  4. 执行调试操作,plsql_debugger提供了三种调试执行的方式,分别为单步进入(step into)、单步跳过(step over)以及继续执行(continue)。

  5. 信息查询,在调试执行的过程中,可以查询源代码信息,查询和修改变量值,查询调用堆栈以及当前系统版本等。

69.4.2. 接口函数

plsql_debugger调试工具支持对PL/SQL语言的存储过程、函数、包、触发器函数、匿名块、object type方法进行代码调试操作,包括操作断点、执行代码、调试数据、查看调用堆栈、查看源码信息、查看版本信息等功能。 并提供局部断点调试与全局断点调试两种调试模式。

调试接口函数列表如下:

接口函数

简介

plsql_oid_debug 函数

创建局部监听

plsql_pldbg_attach_to_port 函数

连接目标后端

plsql_pldbg_create_listener 函数

创建全局监听

plsql_pldbg_set_global_breakpoint 函数

设置全局断点

plsql_pldbg_wait_for_target 函数

等待连接

plsql_pldbg_set_breakpoint 函数

设置断点

plsql_pldbg_get_breakpoints 函数

查询断点

plsql_pldbg_drop_breakpoint 函数

删除断点

plsql_pldbg_wait_for_breakpoint 函数

返回建立连接时断点所在行的信息

plsql_pldbg_step_into 函数

单步进入(step into)

plsql_pldbg_step_over 函数

单步跳过(step over)

plsql_pldbg_continue 函数

继续执行(continue)

plsql_pldbg_abort_target 函数

中止执行

plsql_pldbg_get_variables 函数

查看变量

plsql_pldbg_deposit_value 函数

修改变量

plsql_pldbg_get_stack 函数

查看堆栈信息

plsql_pldbg_select_frame 函数

追溯堆栈信息

plsql_pldbg_get_source 函数

查询源代码信息

plsql_pldbg_get_proxy_info 函数

查询当前系统版本信息

69.4.2.1. plsql_oid_debug 函数

功能描述

在同一个session下负责监听该调试对象,创建监听状态。该函数在建立监听的过程中会设置一个系统默认断点,行号为‘-1’。

语法格式

FUNCTION plsql_oid_debug( functionOID OID ) RETURNS INTEGER

参数说明

参数名称

描述

functionOID

存储过程、函数、包、触发器函数、object type方法、匿名块的oid,其中匿名块为9999

返回值说明

调用成功返回0,调用失败无返回值,存在报错信息如下:

  1. 当OID输入为0时报错信息:no target specified。

  2. 当OID无效时报错信息:cache lookup failed for function。

  3. 当不是owner 或superuser时报错信息:must be owner or superuser to create a breakpoint。

69.4.2.2. plsql_pldbg_attach_to_port 函数

功能描述

此函数用于响应PLDBGBREAK端口号。该函数连接到监听给定端口的Target Backend端,从而形成Debugger Client,启动调试过程,等待后续调试工作。 一个Debugger Client能够响应多个不同PLDBGBREAK端口,即可以支持多个并发会话。

语法格式

FUNCTION plsql_pldbg_attach_to_port(portNumber INTEGER) RETURNS INTEGER

参数说明

参数名称

描述

portNumber

调用调试对象显示的进程ID号

返回值说明

返回标识此特定调试的会话句柄。

69.4.2.3. plsql_pldbg_create_listener 函数

功能描述

创建一个TCP端口,为全局断点创建一个监听器,方便后续函数连接到该目标进程。

语法格式

FUNCTION plsql_pldbg_create_listener() RETURNS INTEGER

返回值说明

调用成功返回debug_session号。

69.4.2.4. plsql_pldbg_set_global_breakpoint 函数

功能描述

创建一个全局断点。

语法格式

FUNCTION plsql_pldbg_set_global_breakpoint( session   INT,    FUNCTION OID, lineNumber INT, targetPID INT ) RETURNS boolean

参数说明

参数名称

描述

session

标识特定调试的会话句柄

FUNCTION

调试对象的OID

lineNumber

行号(可为NULL)

targetPID

目标端PID(可为NULL)

返回值说明

调用成功返回t,调用失败会报错。

69.4.2.5. plsql_pldbg_wait_for_target 函数

功能描述

发起socket连接,等待目标后端进程调用调试对象来连接到调试端,以触发全局断点。

语法格式

FUNCTION plsql_pldbg_wait_for_target( session   INTEGER ) RETURNS INTEGER

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

调用成功返回target backend的PID。

69.4.2.6. plsql_pldbg_set_breakpoint 函数

功能描述

在目标进程中设置一个“局部”断点。

此函数将PLDBG_SET_BREAKPOINT指令发送到Targert Backend端,在调试对象的指定位置设置断点,然后等待下一个可执行语句到达该目标断点。

语法格式

FUNCTION plsql_pldbg_set_breakpoint( session   INTEGER,    FUNCTION OID, lineNumber INTEGER ) RETURNS boolean

参数说明

参数名称

描述

session

标识特定调试的会话句柄需要设置的断点行号

FUNCTION

调试对象的OID

lineNumber

若行号传入为NULL,不会报错也不会设置断点

返回值说明

断点设置成功返回为t,断点设置失败返回为f。

69.4.2.7. plsql_pldbg_get_breakpoints 函数

功能描述

显示设置的所有断点。此函数将PLDBG_GET_BREAKPOINTS指令发送到Targert Backend端,返回查询到的断点元组信息。如果没有断点信息,则返回为空。

语法格式

FUNCTION plsql_pldbg_get_breakpoints( session   INTEGER ) RETURNS SETOF breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

返回一组“breakpoint”元组信息,该元组信息包括调试对象的OID,断点设置的行号lineNumber,Target端的名字targetName。

69.4.2.8. plsql_pldbg_drop_breakpoint 函数

功能描述

在目标进程中删除一个指定行号的断点。此函数将PLDBG_CLEAR_BREAKPOINT指令发送到Targert Backend端,删除指定断点信息,并返回删除成功与否的状态。

语法格式

FUNCTION plsql_pldbg_drop_breakpoint( session   INTEGER,    FUNCTION OID, lineNumber INTEGER ) RETURNS boolean

参数说明

参数名称

描述

session

标识特定调试的会话句柄

FUNCTION

调试对象的OID

lineNumber

所要删除断点的行号

返回值说明

断点删除成功返回t,断点删除失败返回f。

69.4.2.9. plsql_pldbg_wait_for_breakpoint 函数

功能描述

调用该函数,可以返回刚建立连接时断点所在行的信息。

语法格式

FUNCTION plsql_pldbg_wait_for_breakpoint( session   INTEGER ) RETURNS  breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

此函数返回类型为一个“breakpoint”的元组,该元组包含调试对象的OID以及刚建立连接时停止的行号。

69.4.2.10. plsql_pldbg_step_into 函数

功能描述

单步执行,遇到子函数或子存储过程会进入到相应的部分。 此函数将PLDBG_STEP_INTO命令发送到Targert Backend,等待目标后端进程执行语句后,等待下一个可执行语句到达目标。

语法格式

FUNCTION plsql_pldbg_step_into( session   INTEGER ) RETURNS breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

此函数返回类型为“breakpoint”的元组(但不一定是真正的断点信息,因为单步执行有可能遇到断点,有可能没有遇见断点)。 该元组包含调试对象的OID以及目标当前停止的行号,以及调试对象名。

69.4.2.11. plsql_pldbg_step_over 函数

功能描述

单步执行,遇见子函数或子存储过程会跳过内部执行过程。此函数将PLDBG_STEP_OVER命令 发送到Targert Backend,待目标后端进程执行语句后,等待下一个可执行语句到达目标,并将执行后需要返回的结果返回。

语法格式

FUNCTION plsql_pldbg_step_over( session   INTEGER ) RETURNS breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

此函数返回类型为“breakpoint”的元组(但不一定是真正的断点信息,因为单步执行有可能遇到断点,有可能没有遇见断点)。 该元组包含调试对象的OID以及目标当前停止的行号,以及调试对象名。

69.4.2.12. plsql_pldbg_continue 函数

功能描述

从当前位置继续执行,直到遇见下一个断点,如果没有断点,将直接执行到调试对象的最后。 此函数将“PLDBG_CONTINUE”指令发送到Targert Backend端,目标后端进程执行,然后等待目标到达下一个断点,并返回相应的结果信息。

语法格式

FUNCTION plsql_pldbg_continue( session   INTEGER ) RETURNS breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

此函数返回类型为“breakpoint”的元组,该元组包含调试对象的OID以及目标当前停止的行号,以及调试对象名。

69.4.2.13. plsql_pldbg_abort_target 函数

功能描述

终止当前的执行。此函数将PLDBG_ABORT命令发送到Targert Backend,然后终止当前的执行,并返回终止成功与否的状态。

语法格式

FUNCTION plsql_pldbg_abort_target( session   INTEGER ) RETURNS SETOF boolean

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

终止成功返回t。

69.4.2.14. plsql_pldbg_get_variables 函数

功能描述

获取一个变量或者参数的信息列表。此函数将PLDBG_GET_VARIABLES 指令发送到Targert Backend端,服务器查询到所有变量的信息后返回变量或参数的信息列表。

语法格式

FUNCTION plsql_pldbg_get_variables( session   INTEGER ) RETURNS SETOF var

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

返回一个var元组集合,包含信息:VarName;Class;lineNumber;Unique;isConst;notNull;dataTypeOID;value(rest of string)。其中每个变量的含义如下:

  1. varName:变量或参数的名称;

  2. Class:变量或参数的类别。如果调试对象有输入参数时,该参数类型将标记为“A”,语句块里的参数将标记为“L”;

  3. lineNumber:声明变量或参数的行号;

  4. Unique:标记该名称在调试对象范围内是否唯一,如果名称不是唯一,调试器客户端将使用行号来区分同名的变量或参数;

  5. isConst:标记变量或参数是否为常量;

  6. notNull:标记变量或参数是否不为空;

  7. dataTypeOID:该变量sys_type中对应的OID;

  8. value(rest of string):变量的值。

69.4.2.15. plsql_pldbg_deposit_value 函数

功能描述

在调试过程中,将一个新值赋给指定的变量。此函数将PLDBG_DEPOSIT指令发送到Targert Backend端,服务器查询该变量然后修改变量的值,最后将修改成功与否的状态返回。

语法格式

FUNCTION plsql_pldbg_deposit_value( session   INTEGER, varName TEXT, lineNumber INTEGER, value TEXT ) RETURNS boolean

参数说明

参数名称

描述

session

标识特定调试的会话句柄

varName

变量名

lineNumber

变量定义的行号

value

变量新值

返回值说明

新值设置成功返回t,新值设置失败返回f。

69.4.2.16. plsql_pldbg_get_stack 函数

功能描述

从Targert Backend端获取调用堆栈信息。此函数将PLDBG_GET_STACK指令发送到Targert Backend端,返回相应调用堆栈信息。

语法格式

FUNCTION plsql_pldbg_get_stack( session   INTEGER ) RETURNS SETOF frame

参数说明

参数名称

描述

session

标识特定调试的会话句柄

返回值说明

返回一组堆栈框架信息元组,包含:CallCount;targetName;funcOID;lineNumber;arguments(rest of string)。

  1. CallCount:堆栈深度。

  2. targetName:调用调试对象的名称。

  3. funcOID:调试对象OID。

  4. lineNumber:当前停留的行号。

  5. arguments(rest of string):参数的信息。

69.4.2.17. plsql_pldbg_select_frame 函数

功能描述

将调试器焦点(当前在堆栈中的执行位置)更改为指定的帧。此函数将PLDBG_SELECT_FRAME命令发送到Targert Backend,然后循环查询指定的帧,如果传入的帧不存在,将返回当前帧的信息,如果传入的帧信息存在,将返回相应的查询信息。

语法格式

FUNCTION plsql_pldbg_select_frame( session   INTEGER, frame INTEGER ) RETURNS breakpoint

参数说明

参数名称

描述

session

标识特定调试的会话句柄

frame

指定帧

返回值说明

此函数返回类型为“breakpoint”的元组,其中包含调试对象OID,以及当前目标在选定帧中停止的行号。

69.4.2.18. plsql_pldbg_get_source 函数

功能描述

从Target Backend获取存储过程、函数、包、触发器函数、object type方法、匿名块正在执行的源代码。此函数将包含PLDBG_GET_SOURCE,functionOID的字符串发送到Targert Backend,查询源代码信息并返回。

语法格式

FUNCTION plsql_pldbg_get_source( session INTEGER, func OID ) RETURNS TEXT

参数说明

参数名称

描述

session

标识特定调试的会话句柄

func

调试对象的OID

返回值说明

返回给定调试对象的源代码信息。

69.4.2.19. plsql_pldbg_get_proxy_info 函数

功能描述

获取服务器版本,Proxy Backend API版本等信息。

语法格式

FUNCTION plsql_pldbg_get_proxy_info() RETURNS proxyInfo

返回值说明

返回服务器和代理PAI的版本信息。

69.4.2.20. 局部断点调试示例

创建调试环境和用例:

--创建plsql_debugger环境
create extension plsql_pldbgapi;

--创建用来调试的存储过程
\set SQLTERM /
CREATE OR REPLACE PROCEDURE public.pro1() AS
BEGIN
   raise notice '123';
   raise notice 'success';
END;
/

CREATE OR REPLACE PROCEDURE public.pro4() AS
declare
   i int := 2;
begin
   i = 3;
   raise notice 'i= %',i;
   i = 4;
   raise notice 'i= %',i;
   raise notice '0:ready.....';
   begin
       raise notice '1:ready.....';
       call pro1();
       begin
           raise notice 'success';
       end;
   end;
end;
/
\set SQLTERM ;

--查询出需要调试的存储过程的oid
select oid from sys_proc where proname = 'pro4';
 oid
-------
16918
(1 row)

application client:
--应用端开启局部监听
select plsql_oid_debug(16918);
plsql_oid_debug
-------------------
                0
(1 row)

--开始调试存储过程pro4
call pro4();
NOTICE:  PLDBGBREAK:3     --该进程控制器转交给另一进程,直至调试结束,3为连接的端口号

debugger client:

.. code::

--调试端连接
select plsql_pldbg_attach_to_port(3);
plsql_pldbg_attach_to_port
----------------------
                   1
(1 row)

--查看源码
select plsql_pldbg_get_source(1,16918);
 plsql_pldbg_get_source
--------------------------------------
                                    +
declare                             +
    i int := 2;                     +
begin                               +
    i = 3;                          +
    raise notice 'i= %',i;          +
    i = 4;                          +
    raise notice 'i= %',i;          +
    raise notice '0:ready.....';    +
    begin                           +
        raise notice '1:ready.....';+
        call pro1();                +
        begin                       +
            raise notice 'success'; +
        end;                        +
    end;                            +
end
(1 row)

--设置断点
select plsql_pldbg_set_breakpoint(1,16918,7);
plsql_pldbg_set_breakpoint
----------------------------
t
(1 row)

select plsql_pldbg_set_breakpoint(1,16918,12);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

select plsql_pldbg_set_breakpoint(1,16918,15);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

--获取当前设置的断点信息
select plsql_pldbg_get_breakpoints(1);
plsql_pldbg_get_breakpoints
-----------------------------
(16918,15,"")
(16918,7,"")
(16918,12,"")
(16918,-1,"")
(4 rows)

--单步执行,遇到子程序进入
select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16918,6,"pro4()")
(1 row)

select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16918,7,"pro4()")
(1 row)

select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16918,8,"pro4()")
(1 row)

--单步执行,遇到子程序跳过
select plsql_pldbg_step_over(1);
plsql_pldbg_step_over
-----------------------
(16918,9,"pro4()")
(1 row)

--继续执行程序,直到断点处或者程序结束
select plsql_pldbg_continue(1);
plsql_pldbg_continue
----------------------
(16918,12,"pro4()")
(1 row)

--当application client执行完毕后,debug client进程会挂起,直到application client再次执行测试调试对象
select plsql_pldbg_continue(1);

application client:

--应用端存储过程执行完成
call pro4();
NOTICE:  PLDBGBREAK:3
NOTICE:  i= 3
NOTICE:  i= 4
NOTICE:  0:ready.....
NOTICE:  1:ready.....
NOTICE:  123
NOTICE:  success
NOTICE:  success
CALL

--再次调起
call pro4();

debugger client:

--调试端进入调试状态,调用plsql_pldbg_abort_target,终止调试
select plsql_pldbg_abort_target(1);
plsql_pldbg_abort_target
--------------------
t
(1 row)

application client:

--当debug client 调用select plsql_pldbg_abort_target(1)后,执行被终止
call pro4();
ERROR:  canceling statement due to user request
CONTEXT:  PL/SQL    FUNCTION pro4() line 5 at assignment

69.4.2.21. 全局断点调试示例

debugger client:

--调试端创建全局监听
select plsql_pldbg_create_listener();
plsql_pldbg_create_listener
-----------------------
                    1
(1 row)

--设置全局断点,未指定行号默认为-1,即BEGIN块的第一行
select plsql_pldbg_set_global_breakpoint(1,16918,null,null);
plsql_pldbg_set_global_breakpoint
-----------------------------
t
(1 row)

--等待测试函数被调用,无测试函数调用该进程会挂起
select plsql_pldbg_wait_for_target(1);

application client:

--应用端执行测试函数
call pro4();

debugger client:
--测试函数调用后,返回测试函数session的进程号,开始调试
select plsql_pldbg_wait_for_target(1);
plsql_pldbg_wait_for_target
-----------------------------
                     427689
(1 row)

--设置局部断点
select plsql_pldbg_set_breakpoint(1,16918,5);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

--设置全局断点
select plsql_pldbg_set_global_breakpoint(1,16918,12,null);
plsql_pldbg_set_global_breakpoint
-----------------------------
t
(1 row)

--获取变量信息
select plsql_pldbg_get_variables(1);
plsql_pldbg_get_variables
---------------------------
(i,L,3,t,f,f,23,2)
(1 row)

--单步进入
select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16918,6,"pro4()")
(1 row)


select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16918,7,"pro4()")
(1 row)

--获取修改后的变量信息
select plsql_pldbg_get_variables(1);
plsql_pldbg_get_variables
---------------------
(i,L,3,t,f,f,23,3)
(1 row)

--继续执行到断点处
select plsql_pldbg_continue(1);
plsql_pldbg_continue
----------------------
(16918,12,"pro4()")
(1 row)

--单步进入子程序pro1
select plsql_pldbg_step_into(1);
plsql_pldbg_step_into
-----------------------
(16917,3,"pro1()")
(1 row)

--获取堆栈信息
select plsql_pldbg_get_stack(1);
 plsql_pldbg_get_stack
--------------------------
(0,"pro1()",16917,3,"")
(1,"pro4()",16918,12,"")
(2 rows)

--追溯堆栈信息
select plsql_pldbg_select_frame(1,1);
plsql_pldbg_select_frame
--------------------------
(16918,12,"pro4()")
(1 row)

--继续执行到程序结束后挂起,等待下一次程序调用
select plsql_pldbg_continue(1);

application client:

--应用端程序执行完成
call pro4();
NOTICE:  i= 3
NOTICE:  i= 4
NOTICE:  0:ready
NOTICE:  1:ready
NOTICE:  123
NOTICE:  success
NOTICE:  success
CALL

69.4.2.22. 修改调试时数据及删除断点调试示例

创建测试环境和用例:

--创建plsql_debugger环境
create extension plsql_pldbgapi;

--创建用来调试的存储过程
\set SQLTERM /
create or replace procedure pro5(i int) as
declare
   j int;
begin
   raise notice 'i = %',i;
   j = i;
   raise notice 'j = %',j;
   j = 1;
   raise notice 'j = %',j;
   i = 2;
   raise notice 'i = %',i;
end;
/
\set SQLTERM ;

--查询出需要调试的存储过程的oid
select oid from sys_proc where proname = 'pro5';
 oid
-------
16919
(1 row)

debugger client:

--创建全局监听
select plsql_pldbg_create_listener();
plsql_pldbg_create_listener
-----------------------
                    1
(1 row)

--设置全局断点
select plsql_pldbg_set_global_breakpoint(1,16919,null,null);
plsql_pldbg_set_global_breakpoint
-----------------------------
t
(1 row)

--等待测试存储过程调用
select plsql_pldbg_wait_for_target(1);

application client:

call pro5(3);

debugger client:

--子程序已调用,开始调试
select plsql_pldbg_wait_for_target(1);
plsql_pldbg_wait_for_target
-----------------------------
                   120947
(1 row)

--返回建立连接时断点所在行的信息(全局断点行号为null,默认当前在BEGIN块的第一行)
select plsql_pldbg_wait_for_breakpoint(1);
plsql_pldbg_wait_for_breakpoint
---------------------------------
(16919,5,"pro5(integer)")
(1 row)

--单步执行
select plsql_pldbg_step_into(1);
  plsql_pldbg_step_into
---------------------------
(16919,6,"pro5(integer)")
(1 row)

--获取存储过程源码
select plsql_pldbg_get_source(1,16919);
  plsql_pldbg_get_source
-----------------------------
                           +
declare                    +
    j int;                 +
begin                      +
    raise notice 'i = %',i;+
    j = i;                 +
    raise notice 'j = %',j;+
    j = 1;                 +
    raise notice 'j = %',j;+
    i = 2;                 +
    raise notice 'i = %',i;+
end
(1 row)

--查看变量的值
select plsql_pldbg_get_variables(1);
plsql_pldbg_get_variables
---------------------------
(i,A,0,t,f,f,23,3)
(j,L,3,t,f,f,23,NULL)
(2 rows)

--修改变量j的值
select plsql_pldbg_deposit_value(1, 'j', 3, '10');
plsql_pldbg_deposit_value
---------------------
t
(1 row)

--再次查看变量j的值,已被改变
select plsql_pldbg_get_variables(1);
plsql_pldbg_get_variables
---------------------------
(i,A,0,t,f,f,23,3)
(j,L,3,t,f,f,23,10)
(2 rows)

--单步执行,变量j在程序中被赋值
select plsql_pldbg_step_into(1);
  plsql_pldbg_step_into
---------------------------
(16919,7,"pro5(integer)")
(1 row)

--查看变量j的值,已改变
select plsql_pldbg_get_variables(1);
plsql_pldbg_get_variables
---------------------------
(i,A,0,t,f,f,23,3)
(j,L,3,t,f,f,23,3)
(2 rows)

--设置局部断点
select plsql_pldbg_set_breakpoint(1,16919,5);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

select plsql_pldbg_set_breakpoint(1,16919,7);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

select plsql_pldbg_set_breakpoint(1,16919,9);
plsql_pldbg_set_breakpoint
----------------------
t
(1 row)

--查看断点信息
select plsql_pldbg_get_breakpoints(1);
plsql_pldbg_get_breakpoints
-----------------------------
(16919,-1,"")
(16919,5,"")
(16919,9,"")
(16919,7,"")
(16919,-1,"")
(5 rows)

--删除断点
select plsql_pldbg_drop_breakpoint(1,16919,5);
plsql_pldbg_drop_breakpoint
-----------------------
t
(1 row)

select plsql_pldbg_drop_breakpoint(1,16919,9);
plsql_pldbg_drop_breakpoint
-----------------------
t
(1 row)

--查看断点信息
select plsql_pldbg_get_breakpoints(1);
plsql_pldbg_get_breakpoints
-----------------------------
(16919,-1,"")
(16919,7,"")
(16919,-1,"")
(3 rows)

--设置全局断点
select plsql_pldbg_set_global_breakpoint(1,16919,11,null);
plsql_pldbg_set_global_breakpoint
-----------------------------
t
(1 row)

--查看断点信息
select plsql_pldbg_get_breakpoints(1);
plsql_pldbg_get_breakpoints
-----------------------------
(16919,11,"")
(16919,-1,"")
(16919,7,"")
(16919,-1,"")
(4 rows)

--设置断点行号为0时无效
select plsql_pldbg_drop_breakpoint(1,16919,0);
plsql_pldbg_drop_breakpoint
-----------------------
f
(1 row)

--设置断点行号为NULL时无效
select plsql_pldbg_drop_breakpoint(1,16919,NULL);
plsql_pldbg_drop_breakpoint
-----------------------

(1 row)

--查看断点信息,0和NULL断点都未设置成功
select plsql_pldbg_get_breakpoints(1);
plsql_pldbg_get_breakpoints
-----------------------------
(16919,11,"")
(16919,-1,"")
(16919,7,"")
(16919,-1,"")
(4 rows)

--查看版本信息
select * from plsql_pldbg_get_proxy_info();
                                 serverversionstr                                                           | serverversionnum | proxyapiver | serverprocessid
-------------------------------------------------------------------------------------------------------------+------------------+-------------+-----------------
KingbaseES V008R006 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit |                8 |           3 |          437829
(1 row)

69.5. 插件plsql_pldbgapi卸载方法

卸载plsql_pldbgapi插件接口,只需要执行以下命令:

-- 删除插件
drop extension plsql_pldbgapi;

69.6. 插件plsql_pldbgapi升级方法¶

若该插件有升级版本则通过 alter extension 来升级插件。

示例,由 1.1 升级到 1.2:

ALTER EXTENSION plsql_pldbgapi UPDATE TO '1.2';

相关文章:

  • 测试面试 | 某 BAT 大厂测试开发面试真题与重点解析
  • 2022鹏城杯
  • Kubernetes学习笔记-保障集群内节点和网络安全(3)限制pod使用安全相关的特性20220828
  • [免费专栏] Android安全之利用ADT获取内存中的敏感信息
  • 网络编程必读经典书籍
  • TDengine-解决集群搭建过程中启动失败问题
  • STM32 GPIO工作原理
  • ros入门(九)----ros navigation
  • 数学建模神经网络应用,构建神经网络模型方法
  • 小程序模板报价_小程序模板价格_小程序模板使用多少钱
  • 校园跑腿小程序市场需要和功能分析!
  • 上半年业绩韧性增强,两大核心业务成第二增长点,商汤用硬科技冲刺AI长跑
  • MySQL 数据库(DBMS)安装教程图文详解
  • UTONMOS:元宇宙链游之风、燎原之势
  • 测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)
  • CSS相对定位
  • Docker容器管理
  • Git的一些常用操作
  • Hexo+码云+git快速搭建免费的静态Blog
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 内存分配及垃圾回收机制初探
  • Laravel Mix运行时关于es2015报错解决方案
  • PAT A1017 优先队列
  • Python学习之路13-记分
  • select2 取值 遍历 设置默认值
  • 安卓应用性能调试和优化经验分享
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 复杂数据处理
  • 记录一下第一次使用npm
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 深入浅出webpack学习(1)--核心概念
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 新手搭建网站的主要流程
  • zabbix3.2监控linux磁盘IO
  • ​configparser --- 配置文件解析器​
  • ​用户画像从0到100的构建思路
  • #laravel 通过手动安装依赖PHPExcel#
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Remoting常用部署结构
  • .NET 材料检测系统崩溃分析
  • @Autowired注解的实现原理
  • []T 还是 []*T, 这是一个问题
  • []我的函数库
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [AIGC] Redis基础命令集详细介绍
  • [Angular] 笔记 6:ngStyle
  • [C#]winform部署yolov5-onnx模型
  • [C++]拼图游戏
  • [C++提高编程](三):STL初识
  • [C语言]——函数递归
  • [docker] Docker容器服务更新与发现之consul
  • [EWS]查找 文件夹
  • [Google Guava] 2.1-不可变集合