`
JerryWang_SAP
  • 浏览: 1043935 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

实现ABAP条件断点的三种方式

阅读更多

本文是鼠年第3篇文章,也是汪子熙公众号第202篇原创文章。

今天是大年初三,Jerry祝大家霍去病,辛弃疾,健健康康,长命百岁。

ABAP条件断点这个话题,Jerry的同事曾经问过我,虽然小但很实用。

所谓条件断点,就是设置在某行语句上的断点,并不总是会触发,而是仅当满足一定条件时才触发。

条件断点的使用场合是什么?

举个简单的例子,下图第15行ADD语句设置一个断点。因为它在一个具有1000行的内表循环体内,所以正常情况下会触发1000次。

假设我们在调试一个bug,这个bug当循环到第999次时才出现,那我们前998次的单步调试都是无效的。最高效的做法,就是借助条件断点的概念,让断点在代码执行到第999次循环时,触发且仅触发一次。

本文介绍实现ABAP条件断点的三种方式。也欢迎大家分享自己最喜欢用的且本文尚未提到的条件断点技术。

为了方便记忆,Jerry用天下会雄霸帮主的三种绝技来给这三种条件断点的实现方式命名。

方法一

天霜拳 - 给ABAP断点维护触发条件

天霜拳,冰系技能,雄霸传予大弟子秦霜。

天霜拳在马荣成的《风云》漫画里一共出现了14式:

  • 风霜扑面
  • 霜寒抱月
  • 霜结中霄
  • 霜雪纷飞
  • 霜冷长河
  • 霜痕累累
  • 霜凝见拙
  • 披霜拨露
  • 霜雪冰山
  • 傲雪凌霜:这是天霜拳的绝招,也是最为强劲的一招。一招四式(傲立孤峰、雪岭寻梅、凌云压顶、霜河倒影),寒气弥漫,四下五丈之内都被冻成冰霜。

大师兄啊,在《风云》里是个杯具人物,唉。

在ABAP调试器里点击Break/Watchpoints面板,新建一个断点:

在Free Condition Entry里维护这个断点的触发条件。

回到我上面的例子,我的内表里包含了从1到1000的整数,总共1000条记录,而我的触发条件维护为<data> = 22. 显然,这个断点在第22次循环时,唯一触发一次。

维护完毕后,我们在断点面板里看到了这个新建的断点:

按F8继续调试,断点有且仅触发了一次,此时<data>的值为22,正好符合我们维护的触发条件,成功。

方法二

排云掌 - 利用ABAP调试器里的观察点(Watchpoint)

 

小的时候看漫画,觉得不哭死神步惊云简直是一个bug般的存在,会的技能之多令人发指。

仅《风云》第一部里,步惊云就掌握了霍家剑法,悲痛莫名,排云掌,圣灵剑法,麒麟臂,三霸剑等等。Jerry个人认为塑造得最成功出彩的,还要算那十二式变化莫测,名称飘逸的排云掌:

  • 行云流水
  • 披云戴月
  • 翻云覆雨
  • 排云倒海
  • 乌云蔽日
  • 重云深锁
  • 撕天排云
  • 云海波涛
  • 燮云无定
  • 殃云天降
  • 愁云惨淡

ABAP的调试器,也和步惊云的排云掌一样,使用方式变化多端。

此处创建Watchpoint:

我们知道在LOOP循环体内,系统变量sy-tabix会自动赋以当前的循环次数。因此我们在Watchpoint的触发条件里,维护成sy-tabix = 22, 也可以达到在第22次循环时触发的目的。

Watchpoint创建好之后显示如下:

按F8继续调试,程序果然在第22次循环时触发了:

并且调试器里弹出一条提示信息:Watchpoint reached

方法三

风神腿 - ABAP Debugger Script

天下武功,唯快不破。

拥有一头飘逸长发的聂风,施展起六式风神腿来,如暴风骤雨,摧枯拉朽, 真可配得上“风中之神”的称号。

  • 捕风捉影
  • 风中劲草
  • 暴雨狂风
  • 雷厉风行
  • 风卷楼残
  • 神风怒嚎

ABAP Debugger Script这项技术,在SAP研究院内部用的很广泛。

回到上面的例子,我们将编写一段简单的ABAP代码,去控制目标ABAP代码的断点触发。

在ABAP调试器里,点击Script标签页,创建一个新的ABAP脚本:

我们想用ABAP脚本监控ABAP代码里某个简单变量的值变化,所以使用脚本创建向导里的Variable Value(for Simple Variables):

这个向导会自动帮我们生成ABAP脚本,其实也就是一段ABAP代码了,这段代码可以用编程的方式,在调试器激活的上下文里,获取某个ABAP变量的值。

下图脚本的语义很清晰,获取调试器里field symbol <data>的值,存储在临时变量lv_result里。如果该变量的值为22,就调用ABAP脚本的工具方法break,触发断点。

把这段脚本通过上图的Save As按钮另存下来,取名ZJERRY_TEST.

然后重新执行我们的测试代码, 使用Load Script加载刚才保存的ABAP脚本:

点击Start Script执行脚本:

断点再次如期触发.

希望大家能灵活运用这三种ABAP条件断点的实现方式, 将它们融会贯通。《风云》中的雄霸, 将天霜拳,排云掌和风神腿融为一体, 自创了三分归元气这项神技。Jerry也祝愿大家早日炼成属于自己开发领域的三分归元气。

更多阅读

 

0
2
分享到:
评论

相关推荐

    ABAP经典教学-PPT

    ABAP(Advanced Business Application Programming)是SAP公司推出的一种编程语言,主要应用于SAP系统,用于开发企业级的业务应用程序。本教程“ABAP经典教学-PPT”将带你走进ABAP的世界,帮助初学者快速掌握这门...

    SAP ABAP 增强总结

    在二代增强中,DEBUG工具得到了进一步的优化,提供了更多高级功能,如条件断点等。 - **4.1.3 方法三:通过函数模块** 二代增强中,可以利用更加丰富的函数模块资源来查找和管理增强点。 ##### 4.2 增强实施 ...

    SAP ABAP 开发

    在IT领域,SAP ABAP(Advanced Business Application Programming)是一种专为SAP系统设计的编程语言,用于构建企业级的应用程序。本篇文章将深入探讨SAP ABAP的开发环境、基本语法及其在实际项目中的应用。 一、...

    ABAP培训标准教材.zip

    这部分内容包括ABAP的数据类型、变量声明、控制结构(如循环和条件语句)、输入/输出处理、错误处理等基础知识。学习者将学会编写简单的ABAP程序,并理解如何在SAP环境中执行这些程序。此外,还将涉及函数调用、内部...

    ABAP如何快速寻找增强

    在ABAP开发中,增强(Enhancement)是一种重要的技术手段,用于在标准SAP系统上扩展功能或修改标准行为,而无需直接修改源代码。在本文中,我们将探讨如何快速定位和使用ABAP中的事务码对应的增强。 首先,我们要...

    abap练习题

    - **知识点**:Development Class是SAP开发对象的一种分类方式,主要用于组织和管理不同的开发对象,如程序、函数组等。 - **要求**:创建一个名为`ZXX`的Development Class。 - **扩展内容**:Development Class的...

    The New ABAP Debugger

    - **断点与观察点**:增加了对断点和观察点的支持,使用户能够在特定条件或表达式满足时暂停程序执行。 ### 结论 新ABAP调试器的推出是基于现有经典调试器的基础上进行的重大改进。它不仅解决了原有调试器中存在的...

    ABAP开发逻辑

    ABAP 是 SAP 系统中的一种开发语言,它用于创建 SAP 系统的报表、WORKFLOW、BAPI 和 FUNCTION 等。ABAP 语言提供了强大的开发工具和丰富的开发接口,能够满足复杂的业务需求。 一、创建报表(TCODE:SE80) 创建...

    Abap4编程(202页,英文+中文注释)

    1. **基础语法**:ABAP4语法结构清晰,包括变量声明、数据类型(如INT,STRING,CHAR等)、条件语句(IF,ELSE IF,ELSE)、循环结构(DO,WHILE)以及分支结构(CASE)。 2. **程序结构**:了解如何编写程序结构,...

    abap内部培训资料

    #### 三、ABAP/4程序类型 - **报表程序**:主要用于分析数据库表中的数据,结果可以显示在屏幕上或打印出来。逻辑数据库简化了数据访问过程。 - **对话程序**:由包含对话模块的模块池组成,每个动态程序(屏幕...

    ABAP Workbench Fundamentals TAW10_2 2008.pdf

    - 描述ABAP Workbench的整体架构,包括核心组件(如SE38、SE80)的功能及其交互方式。 - 解释ABAP Dictionary的作用及如何使用它来定义数据类型和表结构。 - **开发环境设置:** - 指导用户如何配置ABAP开发环境...

    ABAP4编程宝典中文版(完整版)

    - **编写报表程序**:ABAP/4支持编写复杂的报表程序,可以通过定义报表布局、数据处理逻辑等方式来实现。 - **事务处理**:ABAP/4能够处理复杂的事务性操作,如订单处理、库存管理等。 - **模块化编程**:鼓励使用...

    abap开发小规则和注意点

    25. BAPI(Business Application Program Interface):(接口开发)特殊的函数:封装好了一个业务功能 RFC(Remote Function Call):支持远程调用,作用:实现 SAP 端与非 SAP 端数据的传递,SAP 端作为数据源端。...

    ABAP语法详解教材

    ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于开发SAP系统中的业务应用程序。本“ABAP语法详解教材”是一份全面覆盖ABAP基础到高级语法的教程资源,旨在帮助学习者深入...

    SAP ABAP Learning

    #### 三、ABAP开发工作台工具 1. **对象导航器**:用于浏览和管理ABAP程序中的各种对象。 2. **工作台组织器**:提供一个集成环境来创建和修改ABAP对象。 3. **数据字典**:存储SAP系统中的所有数据定义,包括字段、...

    在SAP中查询TABLE的18种方法

    - **步骤:** 编写或调用现有的ABAP程序来实现Table查询功能。 8. **利用SE31(Function Module)调用Function Module:** - Function Module是SAP系统中预先定义好的功能模块,可以用于执行特定的业务逻辑,如...

    SAP Workflow Debugging

    工作流中的每个活动都是由ABAP程序实现的,通过调试这些程序,可以查看内部变量、数据库操作和调用的函数模块。理解ABAP代码的结构和语法是进行源码调试的基础。 工具的熟练使用同样关键。例如,可以使用SE80工作台...

    sap 程序调试(debug.txt)

    - **条件调试**:设置复杂的条件断点,只有满足特定条件时才会触发断点。 - **调用堆栈查看**:显示当前程序执行的调用堆栈,帮助了解函数调用顺序。 - **性能分析**:监控程序执行过程中的资源消耗情况,识别性能...

Global site tag (gtag.js) - Google Analytics