命令行调试工具-DMDBG的使用介绍
- 格式:pdf
- 大小:123.28 KB
- 文档页数:4
命令行调试工具-DMDBG的使用介绍在达梦数据库中,我们可以利用DM PL/SQL进行存储过程及函数的编写。
有时,我们编写的程序块中可能会有BUG导致编译失败,这种情况下就需要用到相关工具来进行调试。
在有图形化界面的情况下,我们可以利用管理工具来进行匿名块的调试。
但是当我们没有图形界面,或者通过远程连接服务器的时候,我们也可以利用达梦提供的命令行调试工具dmdbg,来完成同样的任务。
dmdbg跟disql同级目录,都在dmdbms/bin目录下,登录方式同disql:
[root@localhost bin]# ./dmdbg SYSDBA:5236
dmdbg V7.6.0.96-Build(2018.09.19-97292)ENT
login time used:6.918(ms)
服务器[LOCALHOST:5236]:处于普通打开状态
DBG>
输入help我们可以看到他提供的功能和对应按键:
关键字说明
----------------------------------------------------------------------- USERID 用户名/口令格式:USER/PWD@SERVER:PORT#SSL_PATH@SSL_PWD SQL 设置SQL语句,SQL语句为非DDL语句或语句块
B 设置断点,格式:B [方法名:]<行号>
C 继续执行SQL
CONTINUE 继续执行SQL
D 取消断点,格式:D <断点序号>
DELETE 取消断点,格式:DELETE <断点序号>
INFO B 显示断点
R 执行语句
N 单步执行
NEXT 单步执行
S 执行进入
F 执行跳出
FINISH 执行跳出
L 显示脚本,格式:L [方法名]
P 打印变量,格式:P <变量名>
CTRL+C 中断执行
HELP 打印帮助信息
......
这里只截取了其中一部分,其中用的比较多的是其中的SQL ,B,R,N,S等。
注意,2018年中往后的版本需要开启debug的包
位置如下:
下面我们构造一段有问题的代码,并演示如何分步调试
代码如下:
/*当tt到3的时候就会报除0错误*/
create or replace procedure TEST_DMDBG
as
aa int;
begin
for i in 1..3
loop
aa = 1 / (3-i);
print aa;
end loop;
end;
如果执行call TEST_DMDBG,系统就会报错,因此我们将call TEST_DMDBG;作为我们调试的语句
创建完成后,我们登录到dmdbg中,然后把call TEST_DMDBG;放到sql里
DBG> sql call TEST_DMDBG;
DBG>
然后我们添加断点,由于我的习惯一般是从头开始调试,因此会将断点放到最开始的位置,大家可以在需要的行数打上断点。
DBG> B 0
Breakpoint 1 at @dbg_main, line: 1@{call TEST_DMDBG;}
接下来我们输入r,开始debug
DBG> r
Breakpoint 1, line: 1@{call TEST_DMDBG;}
输入s,进入到循环里调试
DBG> s
SYSDBA.TEST_DMDBG line: 5 @{ for i in 1..3}
DBG> s
SYSDBA.TEST_DMDBG line: 7 @{ aa = 1 / (3-i);}
输入bt,可以查看当前的堆栈
DBG> bt
#0 SYSDBA.TEST_DMDBG() line: 7@{ aa = 1 / (3-i);}
#1 @dbg_main line: 1@{call TEST_DMDBG;}
如果我们想要查看当前变量的数值,可以通过P 变量名的方式输出打印
DBG> p aa
$3 = 0
至此,问题可以看出是由于i=3时出现了除0的错误,我们就可以开始修改程序。