在SAP项目中,经常会遇到一个比较复杂的程序报出个错误消息(有时会是一个标准SAP程序报错),但是不知道到底是哪段ABAP代码出错了。
下面通过一个简单的例子,来介绍6种方法来定位报message的ABAP程序。
- 程序名 ZMMR020
- 事物码 ZMM020
- 消息号 TD600【没有发现文本 4500000003 ID F01 语言 ZH】E
错误的类型:
代号 | 类型 | 描述 |
---|---|---|
E | Error | 错误 |
W | Warning | 警告 |
I | Information | 信息窗口 |
A | Abortion | 终止程序 |
S | Success | 成功 |
第一种 利用Where use list功能
- T-code:SE91
- 输入
- 点击Where-Used List【使用位置列表】
- Message Class【消息类】 :TD
- Message【消息】- Number 【编号】 :600
- 一般会找到很多程序,这时候只能靠人工过滤,找到正确的出错位置,然后设置断点,再运行一下程序,确认一下。
第二种 设置Sy-msgid的Watch Point断点
- 在命令栏输入/h,回车激活Debug模式
- 选择Break./Watchpoint【断点/监控点】窗口
- 选择Watchpoint【监控点】窗口
- Create Watchpoint【创建监控点】
- Variable【变量】 :Sy-msgid
- Free Condition Entry【可用条件条目】 := ‘TD’
- Create Watchpoint【创建监控点】
- Variable【变量】 :Sy-msgno
- Free Condition Entry【可用条件条目】 := ‘600’
- 激活监控点后,回到【桌面 3】窗口,点击F7,跳转到消息处。
第三种 设置ABAP Command类型断点
- 在命令栏输入/h,回车激活Debug模式
- 选择Breakpoints【断点】- Breakpoint At【断点位置】- Breakpoint At Message【消息处断点】
- 选择Message【消息】窗口
- 输入
- ID :TD
- Number 【编号】 :600
- 回到【桌面 3】窗口,点击F7,跳转到消息处。
第四种 源代码查询
方法1 RS_ABAP_SOURCE_SCAN
- T-code:SE38
- 运行RS_ABAP_SOURCE_SCAN
- 输入
- String Searched For【字符串搜索】 :MESSAGE E600
- Package【包】 :STXD
- 然后手动分析结果,找到出错的ABAP程序。
方法2 CODE_SCANNER
- T-code:CODE_SCANNER
- 输入
- Package【包】 :STXD
- Search String 1【搜索字符串 1】 :MESSAGE E600
- 然后手动分析结果,找到出错的ABAP程序。
第五种 使用SAT工具
- T-code:SAT
- 选择Edit【编辑】- Variant【变式】- Create...【创建...】
- 选择Aggregation【集合】 – None【无】
- 保存 - DEFAULT
- 然后在SAT主屏幕中输入
- Variant【变式】 :DEFAULT
- Transaction【业务】 :ZMM020
- 点击Execute【执行】
- 运行后返回,会显示跟踪结果,选择Call Hierarchy【调用层级】窗口
- 点击Find【查找】
- 输入
- Statement/Event【说明/事件】 :MESSAGE E600
- 在Hit List【命中清单】中双击行就能跳到具体的ABAP代码处。
第六种 使用ST05工具
- T-code:ST05
- 点击Activate Trace,启动追踪
- 点击打印弹出错误信息
- 点击Deactivate Trace,关闭追踪
- 点击Display Trace,进入追踪信息
- 点击Execute,执行
- 选择黄色位置,点击Display ABAP Call Location,显示报错代码位置。