二维码

[调试] 在SAP ABAP开发Debug调试的几种常用方法

Twilight发表于 2015-02-09 17:54Twilight 最后回复于 2015-02-09 17:54 [复制链接] 10271 0

ABAP 中的断点分为静态和动态两种.
一、 静态断点(Static Breakpoints) 是程序员在程序中用代码设定的, 当程序运行到该断点时, 会进入调试状态.
语法:
break-point.
也可以将其标号以明确其位置.
break-point 1.
...
break-point 2.
如:
  1. DATA:lv_sum TYPE i.
  2. break-point 1.
  3. lv_sum = 1.
  4. lv_sum = 2.
  5. lv_sum = 3.
  6. break-point 2.
  7. WRITE: lv_sum.
复制代码
当然也可以针对具体某个用户设定断定.
break username.
如:
  1. DATA:lv_sum TYPE i.
  2. lv_sum = 1.
  3. lv_sum = 2.
  4. lv_sum = 3.
  5. break 用户名.
  6. WRITE: lv_sum.
复制代码

将“用户名”换成你登陆的用户名

二、动态断点
在ABAP编辑器中有两个按钮用于设置断点
debug 1.jpg
第一个(set/delete session breakpoint)用于设置临时断点, 该断点只有在当前Session 才有效, 若退出, 该断点则被自动取消。
第二个(set/delete external breakpoint)用于设置外部断点, 该断点在当前 Session 有效, 但在SAP退出后,重新登录运行程序时不会再执行该断点功能, 而是在原来的代码处留下一个标签, 必须手动删除, 而且也有时间的限制。

三、调试方法
F5 为单步执行, 程序逐步执行, 若遇到子程序或函数, 则会转入该函数中.
F6 只在本程序中单步执行, 遇到子程序或函数时会直接执行, 而不进入函数内部.
F7 会一次性执行完当前代码所在的过程, 如子程序和函数, 若在主程序中, 则直接执行完该程序.
F8 则是一次性执行完全部程序, 直到遇到下一个断点时才终止.

四、Watchpoint观察点的用法
用于设置在程序执行中遇到某个条件时才进入 Debug 状态
debug 2.jpg
输入一个要观察的变量和值
debug 3.jpg
设置好断点后, 按F7 或F8 程序会一直执行到Watchpoint条件满足的地方。
如果一个内表有1000条数据,你想定位的数据在第750条,输入此字段对应的值直接定位,是不是很方便呀

四、查看程序执行中的参数
在程序Debug状态下能够查看当前程序中的所有参数的值,而且还可以更改这些参数的值。
在内表数据浏览窗口的右侧还有一个工具栏, 可以通过该工具实现对内表数据的控制, 修改, 删除, 下载。
debug 4.jpg
如果内表的数据特别多,而又需要分析内表里的数据,就可以通过此工具导出到Execl中,然后再数据分析,此工具还是很实用的

五、实现调试功能的其它方法
  • background job 的debug方法
    输入SM37, 找出想要Debug的job, 在job前打勾, 已经完成或是Release都可以。 在输入栏输入 JDBG,进入debug
  • 在程序运行界面进入debug
    在程序的运行界面, 控制框输入 /h
  • 正在运行的程序进入debug
    输入SM50, 找出正在运行的程序, 然后进入Debug
  • Call Function in update 的 debug
    我们在 update task的 function里面设断点的话, 正常是进不去debug的。
    我们在 debugger 里面路径 setting->Display/change debugger settings,这里面会有 update debugging 选上以后, 我们运行到update task的 function 后会自动开辟新的 session 进行debug
    请参考:ABAP Debug调试Update/Background Task两种异步RFC
  • sm13 error message 的 debug
    有些时候我们在程序运行的时候会报一些update的 error message
    进入 sm13 可以找到相应的item 就可以进行 debug
  • RFC 的debug
    在RFC所在的系统, 用RFC连接所用的用户账号去设断点,然后再进行debug
    请参考:SAP如何debug远程调用的函数模块 即外部断点调试
  • 针对一些弹出窗口的debug
    可能有时候我们程序运行过程中会出现一些弹出窗口, 没有输入 /h 的地方, 但我们想 debug ,这时怎么办?
    新建一个 txt 文档, 内容如下: 当我们需要 debug 某个窗口的时候直接把它个 txt 文档插入对应窗口即可实现 debug。
    1. [FUNCTION]
    2. Command=/H
    3. Title=Debugger
    4. Type=SystemCommand
    复制代码

  • 为 debug 命令创建快捷键
    debug 5.jpg
    debug 6.jpg
    可以看到桌面产生如下一个图标,点击直接进入程序debug,实际与第7个相同
    debug 7.jpg

参考扩展:ABAP常用DEBUG的八种方式
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表