DBMS_DEBUG 系统包主要用于实现服务器端调试器,它提供了一种调试服务器端 PL 程序的方法。
通过 DBMS_DEBUG 系统包调试 PL 程序,需要至少两个数据库 session:一个是用于执行目标程序的 target session,另外一个是用于调试目标程序的 debug session。
Target session 用于调试初始化会话,对会话进行标记,以便 PL interpreter 运行在调试模式下并生成调试事件。调试事件生成后,将从会话中发布。在大多数情况下,调试事件需要返回通知:interpreter 暂停并等待答复。
同时,调试会话还必须使用 DBMS_DEBUG 进行自身初始化,用来了解它要监视哪个目标会话。之后,调试会话可以调用 DBMS_DEBUG 的入口点来读取从目标会话发布的事件并与目标会话进行通信。
DBMS_DEBUG 不提供到 PL 编译器的接口,但是它依赖于编译器生成的调试信息。如果没有调试信息,就无法检查或修改参数或变量的值。
DBMS_DEBUG 使用说明
使用以下语句之一(第二个语句为重新编译包或类型正文)可以为现有 PL 代码生成调试信息:
ALTER [PROCEDURE | FUNCTION | PACKAGE | TRIGGER | TYPE] <name> COMPILE DEBUG;
ALTER [PACKAGE | TYPE] <name> COMPILE DEBUG BODY;
Breakflags
以下为 CONTINUE 的 breakflags
参数值,这些标志可以组合在一起。
值 | 描述 |
---|---|
break_next_line | 在下一个源行中断(跨过调用)。 |
break_any_call | 在下一个源行中断(分步调用)。 |
break_any_return | 从当前入口点返回后中断(跳过从当前例程调用的任何入口点)。 |
break_return | 下一次入口点准备返回时中断,包括从当前入口调用的入口点。如果解释器正在运行调用 Proc2 的 Proc1,那么 break_return 将在 Proc2 的末尾停止。 |
abort_execution | 一旦 DBMS_DEBUG.CONTINUE 被调用则停止执行并强制“退出”事件 。 |
Information Flags
以下标识可以作为 info requested
参数传递给 YNCHRONIZE
、CONTINUE
和 GET_RUNTIME_INFO
。
标识 | 描述 |
---|---|
info_getStackDepth | 获取堆栈的当前深度。 |
info_getBreakpoint | 获取断点编号。 |
info_getLineinfo | 获取程序单元信息。 |
DBMS_DEBUG 子程序概览
下表列出了 OceanBase 数据库当前版本所支持的 DBMS_DEBUG 子程序以及简要描述。
子程序 | 描述 |
---|---|
将目标 DebugID 通知给调试会话。 | |
继续执行目标程序。 | |
打开调试模式。 | |
关闭调试模式。 | |
停止调试目标程序。 | |
删除断点。 | |
禁用断点。 | |
激活现有断点。 | |
从当前运行的程序中获取值。 | |
返回当前栈帧的所有变量信息。 | |
返回当前程序的有关信息。 | |
返回当前超时行为。 | |
在目标会话中设置 DebugID。 | |
返回服务器上 DBMS_DEBUG 的版本号。 | |
打印堆栈回溯。 | |
设置超时值。 | |
告诉监视线程发生超时时如何处理目标会话。 | |
在程序单元中设置断点。 | |
返回当前断点的列表。 |