ABAP高级调试功能

第 1 页 / 共 83 页

CD260

ABAP高级调试功能

SAP全球技术研发者大会(上海):

董朝明, R&D AS ABAP, SAP BP

高亚平, R&D AS ABAP, SAP CD

瞿佳乐, R&D AS ABAP, SAP CD

2010年12月

第 2 页 / 共 83 页

法律声明

This presentation outlines our general product direction and should not be relied on in making a

purchase decision. This presentation is not subject to your license agreement or any other

agreement with SAP. SAP has no obligation to pursue any course of business outlined in this

presentation or to develop or release any functionality mentioned in this presentation. This

presentation and SAP's strategy and possible future developments are subject to change and

may be changed by SAP at any time for any reason without notice. This document is provided

without a warranty of any kind, either express or implied, including but not limited to, the implied

warranties of merchantability, fitness for a particular purpose, or non-infringement. SAP

assumes no responsibility for errors or omissions in this document, except if such damages

were caused by SAP intentionally or grossly negligent.

©2010 SAP AG. All rights reserved. / Page 2

第 3 页 / 共 83 页

准备

碰到运行时错误怎么办?

提示信息从何而来?

为何程序运行如此慢?

©2010 SAP AG. All rights reserved. / Page 3

碰到运行时错误怎么办?
提示信息从何而来?

第 4 页 / 共 83 页

议程

1. 简介

2. SAT – 新ABAP运行时分析器

3. 新ABAP调试器

©2010 SAP AG. All rights reserved. / Page 4

议程

第 5 页 / 共 83 页

简介 – 开发与测试阶段

语法检查 代码分析器 ABAP 单元测试器 覆盖分析器

通过在开发和测试阶段集中的代码检查,避免日后费时费力的

程序调试!

1. 语法检查 – 纠正错误语法信息和警告信息

2. 代码分析器 – 清除程序中的错误、警告并且分析程序的性能以及安全性等。

3. ABAP 单元测试器– 生成测试单元对每个功能模块进行测试

4. 覆盖分析器 –通过测试确保程序里每个单元都被执行到

©2010 SAP AG. All rights reserved. / Page 5

第 6 页 / 共 83 页

简介 – ABAP 调试工具

事后分析工具

运行错误

Dump 分析 (ST22) 系统日志(SM21)

运行时分析工具

性能 程序流 Dynpro 处理

ABAP 运行时分析器(SAT / SE30)

SQL 跟踪 (ST05) Dynpro 跟踪 (ST20)

调试器

内存分析器

©2010 SAP AG. All rights reserved. / Page 6

性能 程序流 Dynpro 处理
ABAP 运行时分 SQL 跟踪 (ST05) 内存分析器
ABAP 运行时分 析器(SAT / SE30)
Dynpro 跟踪 (ST20)
调试器

第 7 页 / 共 83 页

ABAP语言新特性(SAP NetWeaver 7.0 EhP2) – 分析

与调试

新ABAP运行时分析器-- SAT

新ABAP调试器

-> CD263 , ABAP语言新特色

©2010 SAP AG. All rights reserved. / Page 7

第 8 页 / 共 83 页

议程

1. 简介

2. SAT – 新ABAP运行时分析器

3. 新ABAP调试器

©2010 SAP AG. All rights reserved. / Page 8

议程

第 9 页 / 共 83 页

ABAP 运行时分析器 – 动机

提示信息从哪里来?

我想要知道信息出来的确

切位置。

©2010 SAP AG. All rights reserved. / Page 9

第 10 页 / 共 83 页

ABAP 运行时分析器 – 概 览 (I)

ABAP 运行时分析器 – 概览

可对任何ABAP应用程序进行性能以及程序流的分析

程序流分析 – ABAP 跟踪

• 唯一的一个可以在语句级别上追踪ABAP程序的工具(Debugger Script 除外)

• 定位ABAP语句

• 在不同的客户端或系统间对比应用程序的流程

• 找到某些特定的功能模块,例如,自定义的用户出口

• 追踪应用程序的内存使用情况

性能分析 – Hit lists

• 判断导致程序性能低下的瓶颈在程序中的位置(ABAP vs. SQL, 某个方法 或者功能模

块)

• 定位导致性能低下的SQL语句或ABAP语句

©2010 SAP AG. All rights reserved. / Page 10

第 11 页 / 共 83 页

ABAP 运行时分析器 – 概览(II)

哪些语句将被追踪/测量?

只有那些耗费CPU时间的ABAP语句会被追踪(不是全部ABAP语句)

耗费CPU时间显著的语句:

数据库访问: Select, Exec SQL,

模块单元: Module, CALL Function, CALL Screen, CALL Transaction,

CALL Dialog

内表操作: Append, Collect, Sort, Read Table, Read Dataset

文件处理: Transfer, Open Dataset

其他: EXPORT … TO …, IMPORT … FROM …, Rollback, …

SET PF-STATUS, SET TITLEBAR, MESSAGE, ASSIGN

通过什么方式测量?

在运行时分析的同时,系统会对上述语句的耗费时间进行测试

系统会将测试结果保存在数据库上的中央跟踪容器中

用户随时随地可以对测试结果进行评估

系统会将做测试和追踪所消耗的CPU时间从总CPU时间消耗中剔除

©2010 SAP AG. All rights reserved. / Page 11

第 12 页 / 共 83 页

ABAP 运行时分析器 – ABAP 追踪

©2010 SAP AG. All rights reserved. / Page 12

第 13 页 / 共 83 页

SAT – 新ABAP 运行时分析器

用户

. . .

SAT

R 执行追踪 R 分析结果

SAP System

SAP NW AS ABAP SAP NW AS ABAP

虚拟机 虚拟机

. . .

跟踪文件 跟踪文件

数据库

跟踪容器 . . . 跟踪容器

©2010 SAP AG. All rights reserved. / Page 13

第 14 页 / 共 83 页

D演e示mo

SAT – 通过ABAP追踪实现程序流分析

D演e示mo
SAT – 通过ABAP追踪实现程序流分析

第 15 页 / 共 83 页

ABAP 运行时分析器 –调用层次 – 练习

练习 1

运行事务ST22 (运行错误分析) 为用户„XXX‟查找dump。

你将得到错误信息:“None of the selected short dumps exist” (SN/404).

通过SAT (调用层次)寻找消息出现的原始位置.

找出消息处在哪个程序段中 (运用工具:块处理).

©2010 SAP AG. All rights reserved. / Page 25

第 16 页 / 共 83 页

ABAP运行时分析器 – 追踪并行进程

批处理在运行,而且总是在读数据表SFLIGHT.

这个程序到底在做什么呢?

©2010 SAP AG. All rights reserved. / Page 26

ABAP运行时分析器 – 追踪并行进程
批处理在运行,而且总是在读数据表SFLIGHT. 这个程序到底在做什么呢?

第 17 页 / 共 83 页

D演e示mo

SAT 程序流分析 –追踪并行进程

D演e示mo
SAT 程序流分析 –追踪并行进程

第 18 页 / 共 83 页

ABAP运行时分析器 – 用户追踪

追踪并行会话很不错,但是…

HTTP 请求 (佚名HTTP 用户)

RFC请求(RFC用户)

需要ABAP用户追踪

后台作业或者别的用户启动的业务

- 开始的时间未知

©2010 SAP AG. All rights reserved. / Page 30

ABAP运行时分析器 – 用户追踪
追踪并行会话很不错,但是…

第 19 页 / 共 83 页

ABAP运行时分析器 – 用户追踪

WEB AS/NW以下版本可支持

 6.20: SAP_BASIS SP55

+ 640-Kernel PL>= 83

 6.40: SAP_BASIS SP14

+ 640-Kernel PL>= 83

 7.00: SAP_BASIS SP03

+ 700-Kernel PL>= 17

©2010 SAP AG. All rights reserved. / Page 31

第 20 页 / 共 83 页

D演e示mo

SAT 程序流分析– 用户追踪

D演e示mo
SAT 程序流分析– 用户追踪

第 21 页 / 共 83 页

ABAP运行时分析器 – 性能问题

为什么程序性能那么差?

使用ABAP运行时分析器来分

析性能,是一个最好的出发点!

©2010 SAP AG. All rights reserved. / Page 33

第 22 页 / 共 83 页

ABAP运行时分析器 – SAT – 性能分析

©2010 SAP AG. All rights reserved. / Page 34

第 23 页 / 共 83 页

ABAP运行时分析器 – 性能问题

策略

尽量多地限定跟踪文件 ( 变式). 特别是运行时间很长的程序。否则很快超出文件大小限制。

启动跟踪要以“按调用”(by call)来合计(结果只有命中列表)

 限定语句– 例如:仅模块 (functions, forms, methods …)

在第二次追踪中缩小分析范围,用以追踪使性能最差的模块

 只跟踪在“Limitation on Program Components”中定义的模块。

©2010 SAP AG. All rights reserved. / Page 35

第 24 页 / 共 83 页

D演e示mo

SAT - 性能分析

D演e示mo
SAT - 性能分析

第 25 页 / 共 83 页

ABAP运行时分析器 – 优势

SAT主要优势:

重用新调试器界面框架,获得先进且灵活的界面

不产生本地追踪文件,可通过系统所有服务器来访问中央追踪容器

提供便利的跳转功能 (例如从调用层次到命中列表等等),在各个视图之间灵活切换

使用Profile Tool检查哪个包/层/程序占用最多时间

针对每条调用层次项均可访问其调用堆栈

除了详细的调用层次分析以外,还提供了一个模块树工具用以显示调用堆栈的合计视图。

通过热点分析找出事关性能及内存的要点

使用Diff tool来比较两个命中列表和调用层次

©2010 SAP AG. All rights reserved. / Page 39

第 26 页 / 共 83 页

ABAP运行时分析器 – 练习

练习 2:

 对程序 “ZTSTECHED_SE30_PERF” 运行SAT追踪性能,找到“性能瓶

颈” (使用 Profile Tool & Hit List 工具)。

 理解为什么这个程序的性能如此低下。

 通过SAT运行程序 “ZTSTECHED_SE30_PERF_OPT” ,找到性能大幅

提高的原因

©2010 SAP AG. All rights reserved. / Page 40

第 27 页 / 共 83 页

ABAP运行时分析器 – 小结

程序流分析 -- ABAP追踪(调用层次)

 追踪ABAP语句( 寻找MESSAGE …)

从调用层次工具跳转到进程块工具,来获取调用各个层次的汇总信息

 缩小追踪范围,只跟踪必要的对象 (通过显性地指定程序名或选择参数 “Limitation on

Program Components”的动态方式 )

 追踪运行事务的内存消耗 (打开追踪变式中的“Measure Memory Use”选项)

性能分析 -- ABAP追踪(命中列表)

在第一次运行时限制跟踪到模块级别,在追踪变式中使用汇总功能。

第二次运行中可以指定跟踪性能最差的模块。

从Profile Tool中的组件视图开始,可以追溯到某个特定程序,包或者数据库操作的运

行时间。

通过命中列表找出性能差瓶颈(根据净耗时排序)。

若使用“不汇总”, 可以对数据库表,ABAP对象等分析其具体的命中列表。

©2010 SAP AG. All rights reserved. / Page 41

第 28 页 / 共 83 页

议程

1. 简介

2. SAT – 新ABAP运行分析工具

3. 新ABAP调试器

©2010 SAP AG. All rights reserved. / Page 42

议程

第 29 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 43

第 30 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 44

第 31 页 / 共 83 页

动机 – 经典ABAP调试器

我们已经拥有了强大

的ABAP调试器.

为什么还需要一个新

的调试器??

©2010 SAP AG. All rights reserved. / Page 45

第 32 页 / 共 83 页

经典ABAP调试器的技术

经典ABAP调试器

技术

调试器与被调试程序在同一个(内部)会话中

调试器屏幕替换了被调试程序屏幕

结果

 不是所有的ABAP代码都可以被调试 (非 RPERF: Conversion / Field exit)

无法支持某些功能(F1,F4,列表输出)

要实现新功能也并不简单

现代的UI技术无法使用(在调试器中不允许编写任何的ABAP代码!)

 我们需要新技术应用在ABAP调试器上.

©2010 SAP AG. All rights reserved. / Page 46

第 33 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 48

第 34 页 / 共 83 页

双线程架构

调试器 存在于一个外部会话中

会话1 – 被调试程序 会话 2 – 调试器

ABAP 虚拟机

调试器引擎

/h

UI

©2010 SAP AG. All rights reserved. / Page 49

第 35 页 / 共 83 页

双线程架构 – 结果

/h

输入‟/h‟后,新ABAP 调试器在一个新的独立的会话中打开

当调试器处于激活状态时,被调试程序处于未激活状态

好处: 在调试过程中,你仍然能看到所输入的数据

©2010 SAP AG. All rights reserved. / Page 50

/h

第 36 页 / 共 83 页

双线程架构 – 结果

当调试结束时,调试器仍然打开且处于未激活状态

只要被调试程序所在的会话没有结束,调试器就不会被结束

通过被调试程序中输入„/hx‟,可以将调试器关闭

好处: 在调试器中的所有设置、变量以及断点等永远有效!

©2010 SAP AG. All rights reserved. / Page 51

第 37 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 53

第 38 页 / 共 83 页

D演e示mo

新ABAP调试器 – 基本界面

D演e示mo
新ABAP调试器 – 基本界面

第 39 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 60

第 40 页 / 共 83 页

变量显示 I

快捷信息

变量显示

详细信息

©2010 SAP AG. All rights reserved. / Page 61

快捷信息
变量显示
详细信息

第 41 页 / 共 83 页

D演e示mo

新ABAP调试器 – 变量显示与跳转

D演e示mo
新ABAP调试器 – 变量显示与跳转

第 42 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 69

第 43 页 / 共 83 页

Diff Tool

为何 XLINE <> XLINE2?

找到不同之处!!

(XLINE 和 XLINE2 只有两千个字符…)

使用调试器 Diff tool !

Diff tool: 比较两个兼容的ABAP变量:

例如:两个表, 对象, 结构, 字符串,…

Diff tool 从数据的类型以及值这两个方面进行比较。

通过ABAP IF 语义来比较值的不同

©2010 SAP AG. All rights reserved. / Page 70

第 44 页 / 共 83 页

D演e示mo

新ABAP调试器 – 使用Diff Tool 进行差异比较

D演e示mo
新ABAP调试器 – 使用Diff Tool 进行差异比较

第 45 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 74

第 46 页 / 共 83 页

断点

系统中一共有多少种断点?

调试器断点

4. 语句类型:

作用范围: 调试会话

BREAK-POINT.

设置: 调试器

BREAK <User-Name>.

Break-POINT ID <Group-ID>

会话断点

作用范围: 当前登录会话

设置: 开发工作台

外部断点

作用范围: 所有登录会话(同一个服务器上的同一个用户)

设置: 开发工作台

©2010 SAP AG. All rights reserved. / Page 75

第 47 页 / 共 83 页

D演e示mo

新ABAP调试器 – 断点

D演e示mo
新ABAP调试器 – 断点

第 48 页 / 共 83 页

观察点

如果你对字段„MATNR‟设置观察点(+ 条件 matnr = „1234‟), 那么程序流将会在字段

„MATNR‟ 改变并且值等于„1234‟的时候停止。

如果在设置观察点时没有设定条件,那么只要字段„MATNR‟的值改变时,程序流将会停

止.

观察点: Matnr = 1234

程序流

Matnr = 0000 Matnr = 0120 Matnr = 1234

©2010 SAP AG. All rights reserved. / Page 80

第 49 页 / 共 83 页

创建观察点

指定变量

在所有全局、局部变量(包括内表)

值发生改变时,程序流将停止。

不支持:通过调试器特定字符指向

内表时。例如: itab[1]-comp

指定变量以及条件

当变量值发生改变并且满足设定条件时,程序流将停止。

条件限制为两个操作数与一个操作符,同时可以使用一些内建方法(如

lines( ) 和strlen( ) )。

实例: “sy-subrc <> 0” 或“strlen( string ) > 10”

可以设置激活/ 未激活

©2010 SAP AG. All rights reserved. / Page 81

第 50 页 / 共 83 页

D演e示mo

新ABAP调试器 – 观察点

D演e示mo
新ABAP调试器 – 观察点

第 51 页 / 共 83 页

断点和观察点所具备的新功能

(SAP EhP2 for SAP NetWeaver 7.0)

可以设置如下断点:

在ABAP语句上(具有F4 Help 支持)

在类的方法上

在一个简单转换模板(Simple Transformation template)的某一行上

在Webdynpro 组件上(component, controller, method)

在某个消息上

…或者按条件设置断点:

可以设置如下观察点:

对内表

对对象

对对象属性

…或者按条件设置观察点 :

©2010 SAP AG. All rights reserved. / Page 84

第 52 页 / 共 83 页

D演e示mo

新ABAP调试器 – 断点和观察点的新特性

D演e示mo
新ABAP调试器 – 断点和观察点的新特性

第 53 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 86

第 54 页 / 共 83 页

ABAP 调试器 – 练习 4

适应新的ABAP调试器:

 运行程序ZTSTECHED_DEBUG_EX_1 将选择条件“ALV output” 关闭

你将通过break-point 语句进入调试器

单步进入第一个方法“CREATE_DATA”:

在程序填充完毕内表“IT_SFLIGHT”和“IT_SPFLI”后,同时显示这两个表:

注意获取如下信息:

■ 内表的行数

■ 绝对类型(例如 DDIC 类型)

■ 可视性 (私有, 保护, 公有)

 下载内表“IT_SFLIGHT ” 到本地。 (格式 = 含有分隔符的文本格式)

删除内表“IT_SFLIGHT”的前5行。

步入第二个方法 “DISPLAY”:

步入功能“Z_TSTECHED05_SFLIGHT_OUTPUT”

下载参数“P_SFLIGHT_IT” 到SE37测试框架中,然后使用该测试数据

运行独立的功能模块“Z_TSTECHED05_SFLIGHT_OUTPUT”

步入第三个方法 “CONVERT_TO_XML”::

在XML浏览器中显示生成的XML(参数RESULT))

©2010 SAP AG. All rights reserved. / Page 87

第 55 页 / 共 83 页

ABAP 调试器: 练习 5 (困难)

运行程序ZTSTECHED_DEBUG_EX_2

输出:

比较内表 itab 和 itab_copy:

ITAB <> ITAB_COPY

在 程序ZTSTECHED_DEBUG_EX_2的代码中,找到下列语句:

itab_copy = itab.

…

if itab_copy = itab.

…

else.

write: / 'ITAB <> ITAB_COPY'.“<<<

endif.

 在IF语句处设置断点,找到两个表的不同之处(->diff tool)

通过对ITAB设置观察点,找到修改ITAB的语句

 更改ITAB,使得条件itab_copy = itab满足。

可选:

你会在输出列表中得到一条较为奇怪的记录。找出这条记录的出处。

©2010 SAP AG. All rights reserved. / Page 88

第 56 页 / 共 83 页

新ABAP调试器 – 内容

动机

架构与处理

基本界面

变量显示与跳转

 差异比较 (Diff-Tool)

断点与观察点

练习

 新ABAP调试器 (EhP2 for SAP NetWeaver 7.0)

问与答

©2010 SAP AG. All rights reserved. / Page 89

第 57 页 / 共 83 页

新 ABAP调试器 – 组件

 新ABAP调试器(SAP EhP2 for SAP NetWeaver 7.0)包含

以下功能:

基于请求的调试

基于软件层次的调试(SLAD)

 自动调试 – 调试脚本(Debugger scripting)

©2010 SAP AG. All rights reserved. / Page 90

第 58 页 / 共 83 页

基于请求的调试在GUI中的应用

GUI

FI 系统 M33

RFC

用户匹配

系统M32

用户 A ->用户 B

一般调试时:

 通过 „/h‟ 来触发调试器 (debugger)

通过设置断点使运行程序停在断点处

怎样对包含RFC的ABAP应用进行调试呢???

©2010 SAP AG. All rights reserved. / Page 91

第 59 页 / 共 83 页

基于请求的调试在GUI中的应用

/htid

■ 设置 Ok-code “/htid”

■ 激活 “TID” 调试模式

TID (方法->设置->调试…) 并设置断点

运行程序

■

TID

RFC

©2010 SAP AG. All rights reserved. / Page 92

TID

第 60 页 / 共 83 页

D演e示mo

调试含 RFC的ABAP应用 – 解决方案 – 基于 请求的调试

D演e示mo
调试含 RFC的ABAP应用 – 解决方案 – 基于 请求的调试

第 61 页 / 共 83 页

新 ABAP调试器 – 组件

 新ABAP调试器(SAP EhP2 for SAP NetWeaver 7.0)包含

以下功能:

基于请求的调试

基于软件层次的调试(SLAD)

 自动调试 – 调试脚本(Debugger scripting)

©2010 SAP AG. All rights reserved. / Page 94

第 62 页 / 共 83 页

调试 Web Dynpro 应用 – 基于软件层次的调试(SLAD)

浏览器 / Web Dynpro 调试Webdynpro程序

系统 M32

服务器 1

服务器 2

服务器 3

服务器 4

困难: 相关的代码在整个架构代码的下面

解决方案:基于软件层次的调试(SLAD)

©2010 SAP AG. All rights reserved. / Page 95

服务器 1
服务器 4

第 63 页 / 共 83 页

D演e示mo

调试 多层级的Webdynpro 应用 – 遇到的问题

D演e示mo
调试 多层级的Webdynpro 应用 – 遇到的问题

第 64 页 / 共 83 页

基于层次的ABAP调试 – 目标

解决方案:基于层次的ABAP调试

• 在调试过程中定义你所感兴趣的区域并且隐藏剩下的区域

• 在调试过程中可以从一层跳转到另一层(或一个组件到另外一

个组件)区别于传统的单步调试

UI

Application

DB

©2010 SAP AG. All rights reserved. / Page 97

UI
Application
DB

第 65 页 / 共 83 页

步骤1: 定义对象集 (“层”)

对象集(层)

对象集(“层”)

Expr

 传输对象

L1 S1 S2  全局的、用户的、常用的

表达式:

表达式

“S1 AND ( NOT S2 )“  用户选择集作为操作对象

 逻辑操作符与ABAP相似

选择集标准:

选择集S1 选择集S2

 包 (包含或不包含子包)

包: P1, P2, P3 类: CL_1, CL_2  程序 / 类

 功能模块

 实施的接口

©2010 SAP AG. All rights reserved. / Page 98

第 66 页 / 共 83 页

步骤2: 定义编译器在对层的操作: 层参数文件

一般的调试器单步调试:

该层中对系统代

“层单步“:

不可见= “系统代码“, “层单步“:

在层出口处停止

码的处理

行断点可见 在层入口处停止

Incl.

“Rest code”不被任何层所 Visible Point of Point of

包含的代码 System

Entry Exit

Code

<<REST>>

L1(e.g. my package)

L2( e.g. ALV stuff)

©2010 SAP AG. All rights reserved. / Page 99

Visible Point of Entry Point of Exit Incl. System Code
<<REST>>
L1(e.g. my package)
L2( e.g. ALV stuff)

第 67 页 / 共 83 页

步骤3: 激活层参数文件

在调试过程中使用层参数文件:

Change Profile

激活层参数文件:

调试器仅停留在“可见”的层

 通过按钮 “Next Object Set” 跳转到下一层

©2010 SAP AG. All rights reserved. / Page 100

第 68 页 / 共 83 页

D演e示mo

调试多层级的Webdynpro应用 – 解决方案 – 基于软件层次的调试(SLAD)

D演e示mo
调试多层级的Webdynpro应用 – 解决方案 – 基于软件层次的调试(SLAD)

第 69 页 / 共 83 页

ABAP 调试 – 表达式步进

调试器功能 再进一步

从层步进到表达式步进

哪个条件不满足呢?

©2010 SAP AG. All rights reserved. / Page 102

第 70 页 / 共 83 页

D演e示mo

表达式调试

D演e示mo
表达式调试

第 71 页 / 共 83 页

ABAP 调试 – 表达式步进

激活表达式步进后:

• 从一个条件转到另一个条件

• 显示条件中的计算结果

-> 确定究竟是哪一个条件不满足

©2010 SAP AG. All rights reserved. / Page 104

ABAP 调试 – 表达式步进
激活表达式步进后: • 从一个条件转到另 • 显示条件中的计算 -> 确定究竟是哪一个

第 72 页 / 共 83 页

练习 6 – 基于软件层次的调试(SLAD) – (可选)

在ST22中找到调用ALV的位置(通过使用层“ALV” 和“ST22”)

运行SLAD,显示层参数文件ZSALV

检查使用的对象集/层(ZSALV 和 ZS_ST22)

描述层参数文件设置的目的

•

“层”里包含了哪些对象?

•

在调试时,定义的“层”会有怎样的行为?

运行ST22,并且使用/h激活调试器

载入层参数文件ZSALV

在调试器里执行单步调试(F5)

每次程序流停止时,检查调用堆栈并且确认是否是你输入的层

– 再继续执行单步调试

 点按钮“Next Object Set” 步入下一个层->查看调用堆栈确定调

试器的行为。 重复以上步骤,以找到在ST22中所有调用ALV的

位置。

改变层参数文件的”visible、exit、entry”属性,并且重新调试

ST22,确认调试器的行为。

©2010 SAP AG. All rights reserved. / Page 105

第 73 页 / 共 83 页

新 ABAP调试器 – 组件

 新ABAP调试器(SAP EhP2 for SAP NetWeaver 7.0)包含

以下功能:

基于请求的调试

基于软件层次的调试(SLAD)

 自动调试 – 调试脚本(Debugger scripting)

©2010 SAP AG. All rights reserved. / Page 106

第 74 页 / 共 83 页

自动调试 – 调试器脚本

调试器是否可以自动或半自动地调试问题?

调试器是否可以将所有的调试信息写入追踪文件?

配有全新脚本引擎的ABAP调试器

通过编写少量的ABAP代码来控制调试器

像调试器一样可以访问被调试程序的任何信息

将多种信息写入追踪文件

访问脚本追踪分析的事务代码: SAS

©2010 SAP AG. All rights reserved. / Page 107

第 75 页 / 共 83 页

自动调试 – 调试器脚本

…

会话 1 – 运行d程oD序ebugStep( SingleStep会 ) 话 2 – 调试器

setBreakpoint ( )

setWatchpoint( )

ABAP VM

Debugger Engine

getValue( „SY-SUBRC‟ )

getStack ( )

…

A

UI

D

I

©2010 SAP AG. All rights reserved. / Page 108

setWatchpoi ABAP VM Debugger Engine getValue( „SY getStack ( ) … setWatchpoi
Debugger Engine getValue( „SY getStack ( ) … ugger Engine getValue( „SY
getStack ( ) … getStack ( ) …

第 76 页 / 共 83 页

自动调试 – 调试器脚本

会话 1 – 被调试对象 会话 2 – 调试器

Debuggee

ABAP VM

…

Debugger Engine

“doDebugStep( )”

“setBreakpoint ( )”

“setWatchpoint( )”

A

“getValue( „SY-SUBRC‟ )”

UI

“getStack ( )”

D

“writeTrace( )”

I

…

ABAP-

脚本

©2010 SAP AG. All rights reserved. / Page 109

DebugStep
… Debugger Engine “do “se “se “ge “ge “wr … … gine “do
“se “se “ge tBreakpoin tWatchpoin tValue( „SY t ( )” t( )” -SUBRC
“ge “wr tStack ( )” iteTrace( )”
… …

第 77 页 / 共 83 页

自动调试 – 调试器脚本

脚脚本本--

AABBAAPP--

追追踪踪

脚脚本本

运行中的ABAP 调试器

VVaalluuee S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn k kaannnn

iisstt z zuu n naahhee,, S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn

触触 kkaannnn i isstt z zuu nnaahhee,,

VVaalluuee S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn k kaannnn

iisstt z zuu n naahhee,, S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn

kkaannnn i isstt z zuu nnaahhee,,

VVaalluuee S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn k kaannnn

iisstt z zuu n naahhee,, S SYY--SSUUBBRRCC = = 5 5,, n neexxtt w weerr d daass l leesseenn k kaannnn i isstt z zuu nnaahhee,, w weerr d daass k klleesseenn

kkaannnn i isstt z zuu nnaahhee,,

Value SY-SUBRC = 5, next wer das lesen kann ist zu nahe, wer das klesen kann

发发 ist zu nahe, SY-SUBRC = 5, next wer das lesen kann ist zu nahe, wer das klesen

kann ist zu nahe,

Value SY-SUBRC = 5, next wer das lesen kann ist zu nahe, wer das klesen kann

ist zu nahe, SY-SUBRC = 5, next wer das lesen kann ist zu nahe, wer das klesen

kann ist zu nahe,

器器

©2010 SAP AG. All rights reserved. / Page 111

触触
发发 器器

第 78 页 / 共 83 页

自动调试 – 调试器脚本

使用标准的ABAP语句作为调试器

脚本, 它可以在程序运行时控制调

ABAP/4 语句 追踪

试器的行为。

条件断点

“只在某些特定的程序中停止”

任何你可以想到的语句…

©2010 SAP AG. All rights reserved. / Page 112

使用标准的ABAP语句作为调试器
脚本, 它可以在程序运行时控制调 试器的行为。

第 79 页 / 共 83 页

D演e示mo

自动调试 – 调试器脚本

D演e示mo
自动调试 – 调试器脚本

第 80 页 / 共 83 页

练习 7 – 调试器脚本 (可选)

使用调试器脚本

调试某条特定的语句:

编写调试脚本‘Z_CD260_<group number>’ 追踪所有的

Select 语句和权限检查语句

在ABAP编辑器/SE38中,显示报表

ZTSTECHED_DEBUG_EX_1 , 通过编写的脚本找到该过程中

所有的SELECT/AUTHORITY-CHECK语句

改变程序的执行:

在程序ZTSTECHED_DEBUG_EX_1 中,方法“DISPLAY”中,

功能模块“Z_TSTECHED05_SFLIGHT_OUTPUT ”被调用,

该功能模块输出航班信息。在你的调试过程中,你希望不输出

任何信息,因此这个功能模块需要通过调试器脚本跳过。

以上功能该如何实现呢?

©2010 SAP AG. All rights reserved. / Page 115

第 81 页 / 共 83 页

结束

所有的Bug都修复了

你们也了解了所有的调试技巧

-

下一次ABAP调试课程再见。

©2010 SAP AG. All rights reserved. / Page 116

第 82 页 / 共 83 页

更多信息

SAP 网页:

SAP Developer Network (SDN): sdn.sap.com

Business Process Expert (BPX) Community: bpx.sap.com

SAP BusinessObjects Community (BOC): boc.sap.com

相关的SAP 培训和认证信息

http://www.sap.com/education/

SAP TechEd 2010大会中相关的课程

CD200 SAP NetWeaver关于SAP商务套件7i2010的开发功能概览 讲座 1小时

CD263 ABAP语言新特色 实践操作 2.5小时

©2010 SAP AG. All rights reserved. / Page 117

第 83 页 / 共 83 页

C填o写n讲ta座ct反馈表

请您填写和返还对于本讲座的评估和建议

请尊重后面的听众, 协助把废弃物品带走并丢弃

请不要误拿下一堂讲座的资料

返回ABAP参考资料列表