zoukankan      html  css  js  c++  java
  • 如何获取ABAP程序执行的调用堆栈 [SYSTEM_CALLSTACK]

    介绍一个有趣的函数SYSTEM_CALLSTACK(),这个函数可以得到abap程序执行的堆栈,包括事件(event),form。。。

    例子代码如下:

    REPORT ztest_stack.
    DATA: num1 TYPE i,
          num2 TYPE i,
          sum  TYPE i.
    
    num1 = 2. num2 = 4.
    PERFORM frm_call.
    
    *&---------------------------------------------------------------------*
    *&      Form  frm_call
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_call.
      sum = num1 + num2.
      PERFORM frm_output.
    ENDFORM.                    "frm_call
    
    *&---------------------------------------------------------------------*
    *&      Form  frm_output
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM frm_output.
      FIELD-SYMBOLS: <fs> TYPE any.
      DATA: l_cstack_tab  TYPE sys_callst,
            ls_cstack_tab LIKE LINE OF l_cstack_tab.
    
      WRITE: / 'Sum of', num1, 'and', num2, 'is', sum.
      CALL FUNCTION 'SYSTEM_CALLSTACK'
        IMPORTING
          et_callstack = l_cstack_tab. " internal table
    * l_cstack_tab 里就是abap的调用堆栈
      WRITE: sy-uline.
      LOOP AT l_cstack_tab INTO ls_cstack_tab.
    
        WRITE: / sy-tabix, ls_cstack_tab-eventtype,  ls_cstack_tab-eventname.
    
        CLEAR: ls_cstack_tab.
      ENDLOOP.
    
    ENDFORM.                    "frm_output

    执行结果,先触发事件 start-of-selection,然后调用frm_call,最后是frm_output.

    2017-02-25_20-13-29

    以上

  • 相关阅读:
    C++11的enum class & enum struct和enum
    c++11 中成员变量初始化的顺序
    c++11 lambda
    Java-NIO
    .Net之路(十五)图解LoadRunner压力測试
    activiti入门3排他网关,并行网管,包括网关,事件网关
    [移动端]移动端上遇到的各种坑与相对解决方式
    《软件调试艺术》读后感四
    [C++设计模式] command 命令模式
    iOS学习笔记23-音效与音乐
  • 原文地址:https://www.cnblogs.com/datie/p/11435767.html
Copyright © 2011-2022 走看看