ABAP基础-错误处理

作者: 常威爆打来福 | 来源:发表于2018-10-25 14:05 被阅读4次

    1 静态错误检查

    1 语法检查

    语法检查可以在程序编辑的任何时候进行(Check功能按钮),而且在程序激活和第一次运行过程中还将自动进行。

    2 扩展语法检查

    在激活或则运行ABAP程序前,一般都需要进行语法检查,但这样检查不够详尽。例如引用程序或者功能模块的语法检查,静态断点检查以及子程序等,这些通过Check功能无法发现错误。可以使用其他工具,例如SLIN检查(事务代码SLIN)。
    在ABAP编辑器的初始化界面输入程序名后,选择Program->Check->Enhanced Program Check

    2 运行时错误控制

    因为无法确定运行时变量的值,静态检查不能完全避免运行时错误的出现。

    1 可捕捉的运行时错误

    SAP中可以捕捉的运行时错误组成一个运行时错误类,通过CATCH控制语句对这些错误进行处理。

    CATCH SYSTEM-EXCEPTIONS exc1 = rc1 ... excn = rcn.
      ...
    ENDCATCH.
    

    其中excn表示一个单一的可捕捉错误或者一个ERROR类,rcn则代表一个数字。如果其中指定的错误之一在CATCH和ENDCATCH语句之间出现,程序就不会终止,而是直接跳至ENDCATCH语句。在该语句之后,系统将指定的错误代码rcn赋给字段SY-SUBRC,可以通过对该字段的值确定所发生的错误并进行相关处理。
    CATCH控制结构类似于IF结构,可以进行嵌套,但必须在同一个处理块内部结束。此外该结构只能捕获当前调用级别的运行时错误,而不能对CATCH/ENDCATCH语句块内部调用的过程块中产生的错误进行处理。

    REPORT z_carch_endcatch.
    DATA: result TYPE p DECIMALS 3,
          number TYPE i VALUE 11.
    CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 10.
      DO.
        number = number - 1.
        result = 1 / number.
        WRITE: / number, result.
      ENDDO.
    ENDCATCH.
    SKIP.
    IF sy-subrc = 10.
      WRITE / 'Dicision by zero!'.
    ENDIF.
    
    CATCH

    2 不可捕捉的运行时错误

    有些运行时错误是无法捕捉的(或者是没有对可捕捉的错误进行捕获),一旦出现该类错误,系统无法继续处理程序,将创建并进入Short Dump界面。

    相关文章

      网友评论

        本文标题:ABAP基础-错误处理

        本文链接:https://www.haomeiwen.com/subject/jreozftx.html