函数/过程

函数/过程支持创建函数/过程、使用函数/过程、调试函数/过程、覆盖率统计。

说明: package 包中函数/过程支持调试,不支持修改,调试详见 调试函数/过程/匿名块

函数/过程下的package包名、函数/过程名称不可相同,不同package包下的函数/过程名称可以相同。

创建函数/过程

步骤 1:在 “数据库导航菜单” 窗格中,右键单击数据库中的 “函数/过程",按照要求选择“创建函数”、“创建过程”、“创建 SQL 函数”、”匿名块"。

将在新页签中显示所选模板。

步骤 2:选择 “创建函数” 。系统打开新的页签。

步骤 3:编辑代码。

步骤 4:右键单击 “编译”,编译该过程。

步骤 5:编译成功,该创建的函数将被保存。

状态栏需要刷新才能显示已完成操作的状态。

使用函数/过程

执行函数/过程

步骤 1:双击打开 PL/SQL 程序或 SQL 函数。

步骤 2:在工具栏单击 “执行”。

步骤 3: 若该 PL/SQL 程序或 SQL 函数需要入参,则弹出的 “调试函数/过程” 对话框提示您输入信息。

步骤 4:填写入参后,点击 “确定” ,即可执行该 PL/SQL 程序或 SQL 函数。

删除函数/过程

步骤 1:在 “数据库导航菜单” 窗格中,右键单击数据库中的函数/过程对象,选择 “删除函数/过程” 。

步骤 2:提示确认该操作窗口中,单击 “” 完成该操作。

导出函数/过程 DDL

步骤 1: 在 “数据库导航菜单” 窗格中,右键单击数据库中的函数/过程名称,选择 “导出 DDL"。

说明: 导出文件为 sql 文件。

调试函数/过程/匿名块

调试操作期间,如果连接丢失,但数据库导航菜单中仍存在该数据库连接,建议刷新浏览器并重启调试操作。

说明: SQL 语言函数不支持调试操作,仅 plpgsql 语言支持调试操作。

package 包

支持修改与查看package中的源码:点击右键package包,点击【查看源码】,在package 源码中,支持修改,不支持调试。

支持调试 package 包内的函数/过程,不支持修改(编辑器为查看状态),调试操作详见 使用断点、控制执行

匿名块

函数/过程调试左键点击左侧连接中对应的函数/过程,进行调试。匿名块调试右键点击连接下的函数/过程父目录,然后左键点击“匿名块”,进行匿名块编辑/调试。调试操作详见 使用断点控制执行

使用断点

断点用于暂停其所在行中的 PL/SQL 程序的执行,可用断点控制执行并调试过程。

  • 设置并启用断点后,PL/SQL 程序会在该断点所在的行停止执行,此时用户可以进行其他调试操作。支持以下断点操作:
    • 为某行设置或创建断点。
    • 启用或禁用某行的断点。
    • 删除某行的断点。
  • 禁用断点后,PL/SQL 程序不会在断点处暂停执行。

执行如下步骤调试 PL/SQL 程序:

步骤 1:在需要 PL/SQL 程序暂停执行的行设置断点。

步骤 2:启动调试会话。

达到断点所在行时,监视调试窗口中应用程序的状态,然后继续执行程序。

步骤 3: 关闭调试会话。

使用 “断点” 窗格

在 “断点” 窗格中可查看已有断点。

断点” 窗格会列出每一个断点所在行的行号、调试对象的名称以及断点是否可用。

在 “断点” 窗格中,勾选断点复选框,可以进行断点启用、禁用操作。

说明: 禁用断点后,程序不会在该断点处暂停执行,但该断点仍会保留(以备将来启用)。

设置或添加断点

步骤 1:打开需要添加断点的 PL/SQL 函数。

步骤 2:步骤在“PL/SQL Viewer”窗格中,双击行号字段左侧,设置断点,断点标志 [image-20221219110904621] 表示操作成功。

说明: 如果函数在调试过程中不会间断或停止执行,则说明其设置的断点不会生效。

启用或禁用断点

设置断点后,再次单击断点,暂时禁用该断点[image-20221219111008264]。“PL/SQL Viewer”窗格中,禁用的断点的状态列显示断点的状态为 禁用。

若要启用已禁用的断点,再次单击对应断点。

删除断点

用户可删除不再使用的断点。其方法与断点创建的方法相同,双击行号字段左侧的断点即可。

使用断点测试 PL/SQL 程序

步骤 1:打开 PL/SQL 程序,在要调试的行创建断点。

步骤 2:在弹出的 “函数执行入参” 对话框中,输入参数信息。

说明: 如果无需输入参数,则 “函数执行入参” 对话框不会弹出。

image-20221219111115688

步骤 3:输入信息,单击 “确定” 。

可以看到箭头指向断点所在行[image-20221219111332411],同时所在行高亮。箭头所指的行号,即为继续执行程序时的起始行号。

说明: 用户可继续执行、单步执行跳过代码。

image-20221219111418534

步骤 4:单击 继续执行至下一断点(如有)。“结果” 页签中显示执行 PL/SQL 程序的结果, “调用堆栈” 和 “变量” 窗格将被清除。

控制执行

本节描述控制调试执行相关操作。

开始调试

在 “数据库导航菜单” 窗格中选择需调试的函数。单击工具栏中的 “开始调试"。

如果没有设置断点,或者设置的断点无效,则不会停止任何语句、进行调试操作,而仅会执行对象并显示结果(如有)。

继续执行 PL/SQL 函数

调试执行函数时,用户可使用工具栏中 “继续执行”。通过进行断点间控制,可逐行调试程序。“继续执行” 是指从一个断点跳到下一个断点。断点执行一条语句后,可以在其他调试窗口中查看执行结果。

单步执行 PL/SQL 函数

调试执行函数时,用户可使用工具栏中 “单步执行”。通过进行单步控制,可逐行调试程序。如果进行单步操作时遇到断点,则该单步操作会停止,程序也会暂停执行。“单步” 是指一次执行一条语句。单步执行一条语句后,可以在其他调试窗口中查看执行结果。

步入 PL/SQL 函数(step in)

在主函数调试程序中调试执行子函数时,用户可使用工具栏中 “函数步入”。操作 “函数步入",自动打开新的子函数窗口,可对子函数进行逐行调试程序。子函数窗口仅支持 “继续执行"、”单步执行"、”进入函数"、”退出函数"。

说明: 进入子函数后,主函数的操作栏除 “停止调试” 启用状态外,其余操作均为禁用状态。

退出 PL/SQL 函数(step out)

调试执行子函数时,用户可使用工具栏中 “函数退出”。步入函数,打开新的子函数窗口对子函数进行逐行调试程序。子函数窗口仅支持 “继续执行"、”单步执行"、”进入函数"、"退出函数"。

查看调用堆栈信息

调用堆栈” 窗格展示调用过程时的堆栈信息。

停止调试

单击工具栏中的 “停止调试",即可终止调试。

查看堆栈信息

使用时,可通过一些调试窗口查看调试信息。本节介绍可用于检查调试信息的操作:

变量操作

变量” 窗格用于监视信息或估算值。可从小化窗口窗格中打开 “变量” 窗格。通过这个窗格,可以估算或者修改 PL/SQL 过程中的变量或参数。执行代码时,一些本地变量可能被修改,值发生变化的参数会出现黄色标记,可以通过 “变量” 窗格观察参数的变化。

image-20221219113001239

查看结果

结果” 页签显示 PL/SQL 调试会话的结果。只有出现执行 PL/SQL 程序的结果时,“结果” 页签才会自动弹出。

覆盖率统计

本节介绍在执行调试函数/过程操作后,如何使用函数历史调试结果统计功能。覆盖率统计基于函数或存储过程调试时被汇总至 coverage.proc_coverage 表的数据(执行到的行号、执行行数百分比等信息)提取到覆盖率历史表,且可对记录进行删除或导出为html 文件的报告。

说明: 仅 opengauss 3.0 及以上版本数据库支持调试函数或存储过程。

仅 opengauss 5.1.0 b011及以上版本数据库支持查看 coverage.proc_coverage 表。

仅调试前将参数 enable_proc_coverage 为on时才会将函数或存储过程调试记录存储至 coverage.proc_coverage 表,且仅特定用户(初始用户和 monadmin 用户)有访问权限。

显示覆盖率

按照 调试函数/过程后,点击图标image-20221215162907121,弹出覆盖率信息。

image-20221215162907121

导出覆盖率报表

选中需要查看的调试记录,点击 “导出” ,导出 html 文件。

打开所导出的函数覆盖率报告文件,显示内容包含执行语句及调试信息列表,具体如图:

image-20221219113136265

说明: 调试信息系统会自动在“数据库--public--普通表”中生成his_coverage中。

字段说明
序号用于展示覆盖率执行记录序号
总行数用于展示执行函数过程的总行数
执行行数用于展示执行函数过程的执行行数
总覆盖率用于展示执行函数过程的总覆盖率
所有行号用于展示函数过程所有行号
执行行号用于展示执行函数过程执行行号
执行覆盖率用于展示执行函数过程执行覆盖率
入参用于展示执行函数过程入参
更新时间用于展示执行函数过程执行时间

删除覆盖率记录

选中需要删除的调试记录,点击 “删除” ,即可删除所选调试记录。

FAQ

  1. 现象:调试功能不支持 C 语言,SQL 语言的调试。

    原因:调试语言由内核决定,目前仅支持基于 plpgsql 语言函数/过程调试。

  2. 现象:调试停留十几分钟后自动断开连接。

    原因:调试停留时间由数据库配置的超时时间决定,数据库默认设置的超时时间为 900s(15min)。

    解决办法:修改调试停留时间,用户设定数据库配置的 pldebugger_timeout 数值为目标停留时间(单位为s)即可。

    ALTER DATABASE postgres SET pldebugger_timeout TO 86400;
    
  3. 覆盖率统计中,无法在主函数的调试界面导出所有子函数的调试信息。

    原因:目前 proc_coverage 表中没有记录主函数和子函数的关系,所以主函数和子函数的覆盖率报告都是单独管理。

    解决办法:在主函数调试界面仅显示和导出主函数的调试信息,进入单个子函数可以导出子函数的调试信息。

意见反馈
编组 3备份
    openGauss 2024-12-10 00:55:52
    取消