通过SAP的错误消息定位出错的程序的6种方法
在SAP项目中,经常会遇到一个比较复杂的程序报出个错误消息(有时会是一个标准SAP程序报错),但是不知道到底是哪段ABAP代码出错了。
1、定位到那条数据
2、创建断点
后台JOB断点
进入SM37 查找到自己想要debug的后台程序,这里运行完毕或者正在运行的均可进入debug 查找到后打中job前面的勾 然后在控制框输入JDBG回车,即进入debug
下面通过一个简单的例子,来介绍6种方法来定位报message的ABAP程序。
比如在SE38中输入一个不存在的程序ZSDFSF,点击显示按钮,在下面的状态栏会弹出一个消息,如下:
1, 利用Where use list功能
举例说明,双击状态栏上的消息,找到message class ID: DS, number 017,如下图,
SE91,选中对应的消息,点击where use list按钮
一般会找到很多程序,
这时候只能靠人工过滤,找到正确的出错位置,
然后设置断点,再运行一下程序,确认一下。
2, 设置sy-msgid的watch point断点
在命令栏输入/h,回车激活debug模式,
创建watch point如下:
程序运行后就会自动在message ID ‘DS' ,message号017处停下来。
创建watch point的详细界面如下:
3, 设置ABAP Command类型断点
在debug模式下,创建一个abap command类型的断点,
输入的abap命令是关键字message,如下:
程序运行是就会在每一个执行到的message语句停下。然后进一步定位错误。
4, 源代码查询
通过SAP标准程序RS_ABAP_SOURCE_SCAN可以搜索到使用到相关message的abap程序。
SE38所在的package是SEDT,
运行RS_ABAP_SOURCE_SCAN,在package SEDT中查找关键字message 017,
然后手动分析结果,找到出错的abap程序。
也可以使用CODE_SCANNER来查询,
5, 使用SAT工具
Tcode SAT,创建一个新的SAT 变式,在变式屏幕中,选择“Aggregation – None”选项,
然后在SAT主屏幕中输入SE38,选择上面创建的变式,运行,
在SE38中输入一个不存在的程序名,运行后,会显示跟踪结果,在结果集中查找message关键字,在Hit list中双击行就能跳到具体的ABAP代码处。
6, 使用ST05工具
使用ST05跟踪SE38后,在结果屏幕中,选中object Name是PROGDIR的行,点击display ABAP Call Location按钮,
在定位到的774行程序附近就能找到相关的报出message的代码:
果然在813行找到了message。
注:为什么要在ST05结果屏幕中找PROGDIR,是因为sap系统中,所有的程序名都保存在表PROGDIR中,在PROGDIR中找不到就会报错。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本