当前位置:网站首页>SAP ABAP debug的七种方法及错误消息定位
SAP ABAP debug的七种方法及错误消息定位
2022-08-08 23:39:00 【雨天行舟】
大家可以参考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-百度或请教大佬.
边栏推荐
- Share | design based on MCU P0 mouth to drive the LED flashing
- 百度地图智能搜索及拖拽画圆
- WeChat applet develops some function usage methods
- redis集群三主三从redis-cli
- 获取当前时间的前/后某一天的日期
- Introduction to Qt (5) - file operation, hotkey and mouse reading (implementation of txt window)
- 2022牛客多校六 A-Array(构造+哈夫曼)
- stm32 uses serial port to receive idle interrupt + dma to achieve variable length dma reception
- 2022牛客多校六 J-Number Game(简单推理)
- 关于vm虚拟机虚拟网络已禁用
猜你喜欢
随机推荐
PHP闭包函数 bingTo的使用
Common problems in installing mysql in linux environment and using it
12 Spark on RDD 分区器
According to the address returned by Baidu Map, intercept the province, city, district
Codeforces Round #738 (Div. 2) E
08 Spark on RDD 依赖关系
Share | design based on MCU P0 mouth to drive the LED flashing
(2022杭电多校三)1002-Boss Rush(状压DP+二分)
WeChat applet develops some function usage methods
有了国产 DevOps 工具 ,还怕数字化转型成本高?
洛谷P4197 Peaks 线段树合并
Manacher(求解最长回文子串)
2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-4猛犸不上 Ban(最短路)
并发编程第5篇,Synchronized的原理
Porting ucos2 code from stm32 to GD32
-Wl,--start-group ... -Wl,--end-group for resolving circular dependencies of several libraries
并发编程第11篇,线程池的一些常用用法和使用
Formatting of time objects
获取本周的开始时间
并发编程第9篇,Condition