首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

原创
作者头像
Jerry Wang
修改2019-09-30 09:43:33
4070
修改2019-09-30 09:43:33
举报

Jerry的Restful ABAP Programming模型介绍系列的前两篇文章:

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

今天咱们来聊聊SAP云平台ABAP环境上的调试问题。

Jerry在SAP社区上写了600多篇博客,阅读量最高的大概要算下面这篇写于2013年的文章:Six kinds of debugging tips to find the source code where the message is raised

其实实际阅读量远大于14万,因为2016年SAP社区改版,之前的阅读量清零了。

这个数字也说明广大SAP开发者们对代码调试这个话题的重视程度。

Jerry之前在SAP Cloud Platform上进行nodejs和Java开发的时候,对运行在云上的用这两门语言开发的应用的单步调试很头痛。尽管仍然可以通过Jerry这篇文章 如何提高后台服务应用问题的排查效率?日志 VS 远程调试 里介绍的端口映射方式实现在本地电脑上调试云端应用的功能,但Jerry还是怀念On-Premises ABAP里面那种单步调试的便捷性——鼠标轻轻一点,断点即设置好,无需任何配置,立即就能进行单步调试。

那么现在ABAP到了云端后,其单步调试还和之前的On-Premises环境里一样易于使用么?答案是肯定的。

咱们就拿一个具体例子来体验。

Jerry通过Restful ABAP Programming系列的前两篇,已经开发出了一个支持增删改查,支持自定义数据校验和Action的Fiori应用。

我选中ID为103这条记录,点击Accept Travel按钮后,期望通过该Action将其状态设置为Accepted:

不幸的是,我没能看到期望中的状态变化,而是下面这个所有ABAP编程人员都不愿意看见的ABAP运行时错误提示界面。

不过,大家注意到了上图右下角的Debug超链接么?和SAPGUI一样,点击之后立即就能打开调试器,能够观察发生这个运行时错误的调用栈,引起错误的详细代码位置和相关变量的值。

顺便提一句,如果您想自定义在SAP GUI里出现的ABAP运行时错误显示(就是在On-Premises环境下ST22事务码里看到的内容),比如添加一段"佛祖保佑,永无BUG",那么可以参考Jerry这篇文章:

你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

回到ABAP Development Tool里,我们先点击Show超链接,就可以看到运行时错误明细:Short Text告诉我们,我们点击Accept按钮后,相关的处理框架有意地抛出一个CX_CSP_ACT_RESPONSE的异常。抛出异常的位置是在程序CL_CSP_ACT_CHECK_FEATS_ACTIONS里,这暗示我们,这个错可能和Action执行前的检查(CHECK)有关。

继续向下滑动鼠标,发现在框架代码内,因为从第353行内表it_feature_result里没有读出任何内容,因此sy-subrc不为0,导致进入第355行的RAISE SHORTDUMP分支。

在SAP Cloud Platform ABAP环境下当前登录用户发生的所有运行时错误,可以在ABAP Development Tool的Feed Reader视图下查看,这个功能相当于SAP GUI里的ST22事务码。

现在我们关于这个运行时错误的静态信息了解得差不多了,下一步在调试器里观察。

重新启动Fiori应用,再次点击Accept按钮,出现运行时错误后点击Debug超链接,ABAP调试器自动弹出,引起运行时错误的那一行代码被高亮,同时左边显示出调用栈。

把鼠标放在it_feature_result上,发现这个内表是空的,当然无法从里面读出数据了。这个内表是当前ABAP类CL_CSP_ACT_CHECK_FEATS_ACTIONS的方法handle_rejected_instances的输入参数,需要搞清楚为啥这个输入参数为空。

从抛出运行时异常的栈帧往外看一帧,就知道这个输入的内表是通过第291行的execute_feature_controllers生成的,这个方法会通过回调函数的方式,调用我们在Behavior Definition实现的一个get_features方法里:

这里我们就找到了引起这个运行时错误的根源:因为之前Jerry出于测试目的,注释了一段代码,导致get_features被框架回调时,没有返回框架期望的数据:

当Jerry把这段需要的代码重新enable然后设置断点,点击Accept按钮,通过调用栈可以清晰看到框架的execute_feature_controllers是如何调用到我们实现的get_features回调方法的。

希望通过Jerry这个简单的例子能够让大家对SAP Cloud Platform ABAP编程环境里如何进行调试有一个初步的印象,感谢阅读。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档