• SAP ABAP debug的七种方法及错误消息定位


    大家可以参考Jerry 的这篇博客,本人也是在学习过Jerry的这篇博客之后自己总结的以下内容
    SAP错误消息调试之七种武器:让所有的错误消息都能被定位

    1-消息类定位

    依照se38为例,进入se38,然后先输入一个"不存在" (是代指,什么都可以,这里只是举个"栗子") 的程序名称,来做测试效果,紧接着在输入/h进行断点调试,点击显示
    在这里插入图片描述
    这个时候左下角就会出现
    在这里插入图片描述
    然后双击他会显示一个性能助理窗口,这里就能获得他的消息号了
    这个消息号是有两部分组成DS017 他表示消息类是DS 消息号017
    这时我们可以去到se91产看该消息类的的消息号
    在这里插入图片描述
    此时就找到了该错误无的具体含义.
    在这里插入图片描述
    大家可能从这个"栗子"中看不出台大的效果,不妨看一下这篇博客,
    这个是测试smartforms 的案例,这个方式在smartforms中用的可能会比较多一点.
    参考链接

    2-定义观察点

    使用观察点的方式,我需要用到系统变量,定义好之后F8执行就会直接跳到相应的报错位置,然后再双击查看相应的消息号.
    在这里插入图片描述
    点击创建监控点后就会弹出下面的窗口,然后在变量中输入SY-SMGID 回车
    之后再按 F8 执行,直接跳到报错点
    在这里插入图片描述
    这样我们就找到了消息号是017 可是问题是,没有消息类型,我们还是无法找到消息的描述,只是拿到是那个出现的错误消息.
    在这里插入图片描述
    看下图,我们点击断点/监控点 再点击监控点 ,这个时候我们就拿到了他的消息类型了,接着再去se91中去查看该消息类型的描述即可.
    在这里插入图片描述
    有一个简单的方式就是在创建两个变量,在断点/监控点下可以同时看到消息类型和消息号就是创建两次监控点变量消息类型:SY-SMGID 消息号:SY-MSGNO
    在这里插入图片描述

    3-动态断点调试

    如果从效果上来看,就是把所有出现该命令的地方全部打上断点.
    在这里插入图片描述
    接下来就会弹出这个窗口,其实你在三级菜单栏点击任意一种断点模式都会弹出这个窗口,这个窗口的一级菜单栏是是和那个对应的.
    我们可以手动输入一个命令比如MESSAGE 或者点击小白页会弹出很多命令给你选择,你只需要选择你对应的命令即可.
    这里就以MESSAGE 为例
    在这里插入图片描述
    可以看到会把所有出现MESSAGE 命令的地方全部打上了断点,但是只拿到了消息号,消息类型没有获取到.
    这种方法建议配合这观察点的方式一起使用.
    根据你的具体问题去使用debug的方式.
    在这里插入图片描述

    4-源代码静态扫描

    使用源代码静态扫描,SAP 提供了两个扫描工具,程序工具RS_ABAP_SOURCE_SCAN和事务码工具CODE_SCANNER这两个功能上差异不大,都可以定位到相关错误位置.

    首先我们需要找的就是,你所扫描的程序所在的包和你的所扫描的报错字符串
    这个功能有点类似于Ctrl+F,

    4.1-RS_ABAP_SOURCE_SCAN

    se38进入然后执行该程序
    在这里插入图片描述
    点击执行.这里命中了4条,那如何判断那一条是我们想要的那?
    首先我们能确定的是执行的屏幕是se38,那就看下面那些有带38的然后点进去看看.
    比如下面的rs38m显然是系统给的结构,然后查看结构字段的具体含义.
    在这里插入图片描述

    4.2-CODE_SCANNER

    在事务码窗口中输入该事务码回车.
    在这里插入图片描述
    效果和RS_ABAP_SOURCE_SCAN差不多.用法也一样,只是屏幕上的功能有点差异.
    在这里插入图片描述

    5-ABAP应用性能分析工具测试

    SAT主要是用做性能和优化上的,但也可以辅助性测试debug.
    在这里插入图片描述
    首先我们需要创建以聚合点,点击上图中的创建按钮
    然后哦点击保存
    在这里插入图片描述
    之后再点击执行按钮,就会跳转到se38的屏幕中去,
    执行一个程序,之后就会弹出装的窗口 输入 MESSAGE S017
    就会找到017,然后点进去,就对找到对应的错误代码.
    在这里插入图片描述

    6-ABAP数据库执行跟踪和性能分析工具ST05测试

    利用ST05进行debug的方式还是挺巧妙的.这个测试理论依据就是:
    当我们在执行程序时,那么该程序名一定存在于某个数据库表中,这个时候会执行OPEN SQL进行查询该程序名来执行该程序,执行后反馈一定会抛出去的,那么这两处的代码一定是相邻的.

    首先我们ST05进去点击activate trace激活跟踪,点击后就会跟踪所有的执行过SQL的语句.
    在这里插入图片描述
    接下来我们在去SE38找那个执行还是那个程序名
    点击一下就可以了,这个时候已经执行过select这个SQL了,现在我们在回到ST05
    在这里插入图片描述
    这时要点击deactivate trace 关闭SQL的跟踪,如果不关闭的话,他会一直跟踪,知道SQL跟踪储存的日志溢出,可能会导致系统出现问题.
    然后点击下面的蓝色框的display trace显示跟踪的日志.
    在这里插入图片描述

    会出现这个窗口,直接点击执行
    在这里插入图片描述
    这个时候我们只需要观察object name的数据,找PROGDIR 这个表是存放abap所有程序名的表.
    下图可以看到我们刚才执行的那个程序名,选中然后点箭头指向的按钮.
    在这里插入图片描述
    然后就进入源代码中了,在这我们看到SQL执行的语句770行,以及报错的位置的806行.
    如果没有一下看到,就往下滑滑.一定是相邻的
    在这里插入图片描述

    7-百度或请教大佬.

  • 相关阅读:
    ABAP FB05 清账函数:POSTING_INTERFACE_CLEARING
    MYSQL约束
    [apue] 文件中的空洞
    LFS学习系列3 — 前言
    Rust for Linux:世界上最大的软件项目的内存安全问题有办法了!
    二、简单工厂模式
    java网络游戏后台管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    JVM1.8(二):JVM1.8内存模型
    应用案例 | 基于三维机器视觉的机器人麻袋拆垛应用解决方案
    101. 对称二叉树
  • 原文地址:https://blog.csdn.net/weixin_49198221/article/details/126221371