ABAP 开发系列(02): ABAP Development Workbench 介绍(下)- ABAP 调试器

8. DebuggerABAP 调试器

开发程序,调试器是必不可少的工具,而ABAP调试器与一般的IDE调试器也有些差异。

ABAP调试器的主要内容有:

1. 进入Debugger模式的方法;

2. Single Step/Execute/Return/Contiune 的用法;

3. Watchpoint 的使用方法;

4. 调试器的其他功能;

 

8.1  进入Debugger模式的方法

8.1.1  通过内部断点

我们可以通过ABAP编辑器中工具栏 的会话断点按钮,

abap_1_ABAP_Editor_Toolbar_Debug

将光标停在待调试的程序行后,点击设置断点按钮,然后直接执行,程序就会停在我们设置断点的位置:

abap_1_Debugger_Breakpoint

 

提到内部断点,我们不得不说下另外一种断点 外部断点

顾名思义,外部断点用于我们提供给外部接口时的程序调试断点

例如:Call RFC、Web Dynpro for Java。而且只限于Call RFC的公共用户,且只保持2个小时有效。

外部断点位于内部断点的右边,添加外部断点后,断点标志是以头像的形式出现:

abap_1_Debugger_ExternalBreakpoint

激活调试后,当我们运行时,系统会新开一个调试会话窗口,也就是我们的调试界面:

abap_1_Debugger

 

 

8.1.2  通过 ‘/h’ 命令(一般常用于生产环境)

如果不想在程序里面去设置断点进行调试的话,我们进入程序运行初始屏幕后(输入T-Code后的屏幕界面),

在命令域里面输入 ‘/h’, 来激活调试:

abap_1_Debugger_Active_h

当激活调试成功时,系统下边栏会弹出相关提示:

abap_1_Debugger_Active_Tip

这时当我们执行程序,则会进入到调试界面,只不过这里默认的断点位置是从程序的开头开始。

 

8.1.3  通过系统菜单

在操作事务的屏幕界面上,也可以通过系统菜单(系统 -> 实用程序 -> 调试ABAP)激活调试:

abap_1_Debugger_Active_Menu

 

8.2 Single Step/Execute/Return/Continue 的用法

调试界面工具栏上,我们可以看到这样几个工具按钮:

abap_1_Debugger_Toolbar

从左到右分别是:

Single Step(单步执行/F5)、Execute(执行/F6)、Return(返回/F7)、Continue(继续执行/F8)、Watchpoint(创建查看点/ Shift+F4)、Layout(布局)

 

8.2.1  Single Step 用法

Single Step 也是我们常说的单步调试(快捷键:F5),这种方式都是以单步跟踪调试每一条程序;

可以通过Single Step 来调试查看标准程序的操作。

 

8.2.2 Execute 用法

执行调试(快捷键:F6),这种方式是调试中最常用的方式;

对我们当前屏幕上的程序进行跟踪,当遇到Subroutine或者Function时,则会直接执行过去。

 

8.2.3 Return 用法

返回(快捷键:F7),返回并退出当前程序块,也就是当我们进入到某个程序块(例如:Subroutine、Function)时,

我们需要跟踪的信息已经确认完成了,想退出这个程序块,继续跟踪后面的程序,则可以通过Return方式,退出当前程序块。

 

8.2.4 Continue 用法

继续执行(快捷键:F8),当我们进入断点并确认相关信息后,可以通过Continue(F8)直接运行程序到结束 或 者遇到下一个断点为止。

这也是一个常用的调试方式。

一般情况下,上面几种方式都会综合使用,以达到事半功倍的作用。

而在调试过程中,我们可以通过双击变量,然后,系统会帮我们将需要跟踪的变量、内表等信息内容显示在屏幕的右边界面:

abap_1_Debugger_Variable

 

8.3 Watchpoint 的使用方法

在调试过程中,当数据量很庞大,特别是在Loop中遍历时,需要找到其中特定跟踪的数据,这时候只能看着程序发懵。

为了解决这种困惑,SAP为我们提供了 Watchpoint 功能。

在工具栏中,点击创建 Watchpoint按钮(Shift+F4),输入你要跟踪的变量名称,并在条件中输入符合的条件:

abap_1_Debugger_Watchpoint_Create

注意:输入条件时,变量名称必须是大写的。

创建成功后,直接按F8(Continue方法),程序会继续执行并停在变量符合你输入条件的位置:

abap_1_Debugger_Watchpoint_Execute

而且,当到达位置时,界面下边栏也会对变量给出提示:

abap_1_Debugger_Watchpoint_Execute_Tip

 

8.4. 调试器的其他功能

8.4.1 修改变量值

在调试过程中,可以修改、删除变量值(包括内表),来节省调试时间。

双击待监控的变量,将其添加进监控区域后,再次双击该变量:

abap_1_Debugger_Edit_Variable_1
abap_1_Debugger_Edit_Variable_2

点击变量旁边的 “铅笔” ,进入到编辑状态:

abap_1_Debugger_Edit_Variable_3

编辑你需要的值之后,敲回车即可。

内表的操作,则都是通过服务工具来完成,查看内表明细内容时,选中待修改或删除的记录行后,点击右边栏的“小锤子”:

abap_1_Debugger_Edit_Inner_Table_Detail

弹出操作框:

abap_1_Debugger_Edit_Inner_Table_Services

在Change Table Content 菜单下,可选择操作:

  • 1. Change Row Content 修改内表行记录
  • 2. Insert Row(Index) 插入新纪录
  • 3. Append Row(APPEND) 追加新纪录
  • 4. Delete Rows 删除选择行记录(可包括多条记录)
  • 5. Delete Table (FREE) 删除释放整个内容记录

选择相应的工具操作即可。

 

8.4.2 定位到光标指定位置

调试过程中,如果不留意跳过你要跟踪的程序段,这时候就很纠结,可能需要重新跑一次程序,这样既浪费时间又浪费精力。

有个方法,可以避免这种情况:直接将光标定位在你调试过的程序,

然后在菜单栏上选择:Debugger -> Goto statement 或者快捷键:Shift + F12

abap_1_Debugger_Goto_statement

这样程序则会从当前位置:

abap_1_Debugger_Goto_statement_arrow_1

倒回到光标指定位置,这样就可以重新跟踪调试:

abap_1_Debugger_Goto_statement_arrow_2

需要注意的是:指定位置后,应将之前得到结果的变量值或内表清掉,否则会出现重复记录。

 

8.4.3 导出内表到Excel文件

调试过程中,从数据库中取出的数据量非常庞大,在内表中要找到我们待跟踪的记录,会非常麻烦。

解决办法就是:将整个内表数据导出到Excel文件。

在内表维护工具中,找到Save to Local File,然后选择保存成 .xls 格式即可:

abap_1_Debugger_Edit_Inner_Table_Services_Export_XLS

 

 

 

10 条评论

  1. 追梦的少年 说:

    这个不一定是所有的语句都可以跳吧??比如 do 就不行

  2. jevinxu 说:

    @travelu 应该是漏了,得找下原搞,有时间会贴上去! :)

  3. travelu 说:

    写的很好,看了两篇很有用,感恩分享;

  4. travelu 说:

    我也有上面 @爬爬虫 的同样疑问 ,目录怎么一下子从4跳到8了;中间是漏了吗,还是就这样设计的;

  5. 爬爬虫 说:

    前一篇(ABAP Development Workbench 介绍(上))的目录还是到4
    1)SAP相关概念;
    2)系统架构;
    3)SAP系统环境;
    4)ABAP Workbench 相关工具
    这一篇(ABAP Development Workbench 介绍(下))的目录直接就跳到了
    8. Debugger – ABAP 调试器

  6. jevinxu 说:

    @爬爬虫
    ?? 数据字典的是系列09,调试器的是02(属于Workbench的后部分内容)!

  7. 爬爬虫 说:

    上一篇还是到4.3. ABAP Dictionary – ABAP 数据字典维护器
    这篇怎么就直接到了8 Debugger – ABAP 调试器

  8. jevinxu 说:

    @小懒
    啊哈:),有这等事,那很荣幸啊,能被别人转载;
    技术是需要交流的;
    不知道有木有链接呢?

  9. 小懒 说:

    之前看到一篇关于ABAP调试的总结,赞叹写的不错,后来看到一些图片的水印,才发现还是从你这拷贝过去的

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>