netweaver 7.0 ABAP debug新功能
netweaver 7.0 ABAP debug新功能
BREAK-POINT { [ID_GROUP]
| LOG_TEXT
}
ID用来控制断点是否激活,如果没有ID,断点便会始终处于激活状态。
Dialog processing中的breakpoints
在dialog processing中如果程序碰到激活的断点,正在执行的程序就会终断,ABAP debugger被打开,未激活的断点将被忽略,breakpoint之后的语句继续被执行。
Background processing中的breakpoints
在后台处理时,程序的执行不会被中断。如果程序到达断点,记录“Breakpoint Reached”就会被写入系统日志,程序的名称以及断点在程序中的位置就会别记录。未激活的断点将被忽略。这两种情况下BREAK-POINTS后面的语句都会被继续执行。
更新进程中的断点
在同步更新和异步更新进程中,断点的行为依赖于ABAP DEBUGGER的设置:
l 如果debugger没有选择update debugging,其表现与后台处理相同;
l 如果debugger设置了update debugging,其表现就与前台处理相同。为了做到这点,更新将会在同一个application server上的dialog process上执行;
对于local update其表现与前台处理相同。
HTTP SERVER上的断点
如果ABAP程序在ICF HTTP服务器上执行,系统只在激活的断点停留然后跳到debugger。如果打开了外部debugging,external debugging只在一段周期内有效,周期通过事务SICF设置,或者在ABAP editor中设置外部断点。如果没有设置外部断点,断点的行为与后台处理一样。
系统程序中的断点
在名字以%_开始的系统程序,系统module,系统subroutine和系统function module,如果ABAP debugger激活了system debugging,断点才有效,或者可以在system toolbar的input field中输入/hs。否则的话断点就会被忽略。
对于参数ID group,如果没有ID,断点一直处于激活的状态。如果使用了ID,断点的激活状态由程序之外的checkpoint group或activation variant来控制。这一规则同样适用于checkpoint group和assert语句。然而你只能选择inactive和break作为operation mode。
如果在后台处理,update process或者在HTTP SERVER上执行ABAP程序时使用ID additon而没有设置external debuggin,那么断点就是非激活状态。没有ID addition,断点就一直是active的。
对于log_text addition,可以在系统日志中增加一个辅助文本。在前台处理时这个addition没有任何意义。在后台处理和更新进程中处理时,log_text中的内容就会被插到Breakpoint和reached之间。Log_text是一个40个字符长的变量。类型为string的变量将会被忽略。
注意:在SELECT循环语句内的breakpoint将会由于SELECT CURSOR的丢失而导致dump。这是因为debug时,会触发一个database commit。
始终处于激活状态的断点适用于辅助测试,不应该出现在生产系统上。如果breakpoint没有ID addition在enhanced program check中就会报错。
Breakpoint后面跟一个用户名不是一个语句而是一个预定义的macro。
语句breakpoint是作为ABAP程序的一部分来定义断点的。还可以通过ABAP editor和ABAP debugger来设置断点:
l Session Breakpoints:只在当前user session的所有main session中有效
l External Breakpoints 在abap editor或事务SICF中设置,它的有效性与session breakpoints一样。不过即便用户logout,它依然有效,它对于HTTP debugging和RFC debugging非常有用。
l Debugge Breakpoints:在ABAP Debugger窗体中设置,他们在当前的debugging session以及debugge的main session和internal session中有效。Debugge breakpoints可以另存为external breakpoints
Check points checkpoint group activation points
Checkpoints是在程序中定义的一些points,在程序执行过程中这些points的状态可以被测试。Checkpoints可以是conditional也可以是unconditional。Conditional checkpoints由assertions定义,unconditional checkpoints由breakpoints或log points(netweaver 7.0之后)定义。就像break point一样你可以通过事务SAAB分配checkpoint group在程序外部激活或取消激活checkpoint group。用于组织和激活checkpoints,通过事务SAAB来创建checkpoint group和维护激活设置。Checkpoint group的激活设置对于分配了这个group的checkpoints都有效。Checkpoints group的集合的设置可以通过创建activation variants来创建。一个activation variant包括checkpoint groups和compliation units的设置。它也是通过事务SAAB来创建和维护。
LOG point
LOG-POINT ID group
[SUBKEY sub]
[FIELDS val1 val2 …]
这个语句用来定义一个logpoint,其是否激活由addition ID来控制。当程序到达一个激活的logpoint,一个entry就会在log中创建,assert也会使用这个log,LOG-POINT后面的语句将会继续执行。在这个过程中,这个LOG-POINT所产生的entry缺省情况下将会被覆盖。每次写入一个entry,这个entry的counter就会递增。Log可以通过事务SAAB查看。
对于非激活状态的logpoint不会写入日志logpoint之后的语句将会被继续执行。
…ID GROUP
这个addition通过程序外部的checkpoint group或者activation variant来控制logpoint的激活状态。Logpoints可能的operation modes是active和logging。
… SUBKEY sub
当你指定了subkey,sub的content就会作为sub-key存储在log中。已经存在的相同LOG POINT的log entries只有在subkey的内容相同时才覆盖。如果没有指定SUBKEY,subkey就是initial的,sub是一个字符型的变量只有前200个字符有效。只有在log point激活时,所指定的expression或者function才会被执行。
…FIELDS val1 val2….
在FIELDS之后你可以指定一个值列表,在log中使用。在这里data objects或者functional methods可以被指定。Methods只有在logpoint处于激活状态时被执行。
注意:FIELDS后面每个data object的大小由参数abap/aab_log_field_size_limit控制。其单位是bytes,缺省值为1024,
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号