一、文档版本记录...................................................................................................................2二、基本操作方法及断点简介...............................................................................................21.常用按键...........................................................................................................................22.断点简介...........................................................................................................................31)断点种类介绍...........................................................................................................32)加断点方式介绍.......................................................................................................4三、DEBUG界面概览..............................................................................................................5四、常用跟踪工具方法介绍...................................................................................................81.如何在对象模块查看某内表某行的某个字段?...................................................82.为全部某关键字增加断点。...................................................................................93.如何使用监控点.....................................................................................................104.如何查看一个特别长的变量里的值.....................................................................145.如何用自己的账号跟踪外部调用RFC函数?.....................................................156.如何快捷获取到传入函数的数据?.....................................................................16声明:本文档由甄晓达制作,欢迎转载及共享,但请不要用此牟利,譬如设置资源分或者卖钱之类的~也欢迎他人修改完善本文档。一、文档版本记录记录文档的版本及修改时间,方便核对同名文档的差异。大修改增加大版本号,小修改增加小版本号。时间版本修改人修改内容2016.11.17V1.0甄晓达创建文档二、基本操作方法及断点简介1.常用按键F5:单步执行。逐行执行语句,如果遇到FUNCTION、子程序、方法等代码块时,也会进入到相应代码块内部(注:DEFINE定义的宏命令不会进入!所以不建议在宏命令里写很复杂的语句,否则DEBUG的时候会很麻烦)F6:当前代码块单步执行。和F5类似,执行每一条语句,但遇到FUNCTION、子程序、方法等其他代码块时会直接执行完毕相应代码块的内容而不是进入到代码块内部。F7:直接执行完毕当前代码块的所有代码。譬如如果当前在子程序内部,会直接执行完毕该子程序所有代码;如果是在FUNCTION内部,会直接执行完毕FUNTION所有代码。F8:执行程序。直接运行所有代码。以上4个按键和下图示中红框的四个按钮分别对应,不过推荐直接使用按键,更方便快捷,但有时某些按键会失效,譬如用QQ远程协助时,此时只能通过点击按钮来跟踪。SHIFT+F12:直接跳至光标所在行,被跳过的代码不执行;可以往回跳也可以往前跳。(注:不能从LOOP循环外部直接跳入LOOP循环。)也可以在想跳转的行项目上点“鼠标右键——转到语句”来实现此功能,不过仍然推荐使用按键,方便快捷。2.断点简介1)断点种类介绍会话断点,当前登录账号的本次登录会话有效。顾名思义,当前账号登录系统并打开的所有(一般最多6个多余6个会提示不允许新开窗口)窗口生效;当前账号重复登录系统,在之前登录打开的窗口加的会话断点在本次登录并不生效。外部断点,当前登录账号的所有登录会话均有效。外部断点有时间限制,一般为两个小时。外部断点对当前账号的所有会话均有效,譬如用加了外部断点的账号在其他机器上登录或者在本机重复登录时也能看到之前加的外部断点。外部断点在RFC调用时很有用,RFC调用本系统程序时会使用一个公用的账号,使用外部断点可以用任何账号为公用账号打断点,具体方法见后面的内容。临时断点,当前跟踪程序生效,当跟踪完毕退出程序后失效。注:会话断点和外部断点只能在DEBUG之前添加,临时断点只能在跟踪的过程中添加。不过这三种断点类型在跟踪时可以相互转化,转化的方式见后面的内容。2)加断点方式介绍增加断点有两种方式:一是选择想要增加断点的语句行,然后点击工具栏上的断点按钮。此种方法可以添加会话断点以及外部断点。如下图所示:二是直接点击想要增加断点的代码行的最左侧即可。该方法只能增加会话断点。如下图所示:三、DEBUG界面概览①此部分为当前程序的主程序名,代码块名,代码位置以及两个简单变量值显示框简单变量显示框里默认会显示系统字段SY-SUBRC和SY-TABIX的值,可修改成其他简单变量,不能在此处显示表等复杂的变量。②模块区。上图红框为代码模块为标签页中的多个模块之一,每个标签页都有不同的模块。③标签页,每页具体功能如下:注:桌面1、桌面2、桌面3、Standard标签页类似,放到一起统一说功能(默认使用的Standard标签页)1.Standard标签页。默认代码模块在左,ABAP和屏幕堆栈模块在右上,对象模块在右下显示的标签页,如图:代码模块,可以看到程序执行的具体代码以及当前执行到了哪一行,可以去掉断点或者添加临时断点(直接点击已有断点可以去掉断点,点击没有断点的代码最左侧可以添加临时断点),可以双击某对象,让对象出现在对象模块里即时的观察该对象值的变化。ABAP和屏幕堆栈模块:这个模块显示了从程序开始运行到当前程序位置经过的所有代码块名称(子程序名、FUNCTION、方法等等),双击某一行可以直接显示调用该行代码块时的相关代码。对象模块,本模块可以及时的跟踪某个对象值的变化(可以双击代码模块中的对象将对象添加到对象模块,也可以在对象模块里手动输入想要查看的对象名),并可以修改某个对象的值,保存当前跟踪的所有变量,将内表数据下载等等多种操作,可以自己研究下。某些重要功能后面也会有描述。该模块多标签页功能如下(不同的CLIENT拥有的标签页数量可能不一致):变量1、变量2标签页。功能一样,可以自由的设置想要跟踪的对象,两个标签页可以分别存放不同的内容。如果有权限,还可以对跟踪对象的值进行修改。本地标签页。本标签页显示了当前程序断点位置所有可用的局部对象。全局标签页。本标签页显示了当前程序断点位置所有可用的全局对象。注:以上两个标签页在不清楚需要跟踪的对象时会用到,譬如你不知道程序代码当前位置有没有对象存储了你关心的数据,就可以挨个搜索一下这两个标签页的所有对象。自动标签页。用途不详,后者补充……内存分析标签页。可以查看当前程序断点位置某对象占用的内存大小。2.桌面1,默认代码模块在上,跟踪界面模块在下方式显示的标签页,如图:3.桌面2,默认代码块在左,ABAP和屏幕堆栈模块在右显示的标签页,如图:4.桌面3:代码模块在左,对象模块在右显示的标签页。如图:5.Structures:该标签页用于查看某结构的具体字段以及相应的值,也可以通过在对象模块中双击某结构跳到该标签页。6.Tables:该标签页用于查看某内表的具体字段以及相应的值,也可以通过在对象模块中双击某内标跳到该标签页。另外下图箭头指向的功能按键还可以对对内表数据进行增删改查以及下载等一系列辅助功能,就不在此一一介绍了,感兴趣的同事可以实际去点一点。7.Objects:该标签页用于查看类,同样可以通过在对象模块中双击某类进入。8.DetailDisplay:该标签页用于查看某变量或者常亮,同样可以通过在对象模块中点击相应变量常量进入。9.DataExplorer:可以显示各种数据对象。不过因为前面的标签页已经有分别显示各种数据对象的功能,所以该标签页功能不常用。10.Break./Watchpoints:断点管理标签页。该标签页可以对添加的各种断点、监控点进行管理:譬如删除、激活/反激活、切换断点类型、查看断点位置等等。这些功能均有对象的按钮实现,且大都为常见按钮,就不一一分别介绍了,分不清楚的可以把鼠标放到相应按钮上看说明或者点一点看效果11.Diff:用于对比不同的变量的差异,譬如下图比较了内表TABLE第一行和第二行的字段数值差异。当字段较多且差异不大时用此法可以快速的找到差异点。12.Script:没有深入研究该选项卡的功能以及作用,留待后人补充四、常用跟踪工具方法介绍1.如何在对象模块查看某内表某行的某个字段?应用场景:程序里有一个内表有多行数据,一般来说想要查看内表数据需要进入Tables选项卡查看内表具体数值,但内表比较大字段比较多时很麻烦,如何在监控模块里快速查看该内表第3行’NAME’字段呢?方法:可以使用如下写法来查看内表第三行的’NAME’字段值:T_TABLE[3]-NAME,如下图所示:2.为全部某关键字增加断点。应用场景:某程序调用了生成会计凭证的BAPI,生成会计凭证时有诸多的地点可以做替代和增强。现在运行时报了一个MESSAGETYPEE类型的错误,需要找到具体的报错地点查询相应的代码做分析。分析:我们从屏幕返回的数据已经可以知道该错误是通过关键字MESSAGE报出的,但无法准确定位到具体位置。所以我们可以把所有的MESSAGE语句全部加上断点,然后按F8执行,总会找到具体的报错语句。方法:首先在程序的最开始或者进入调用BAPI时增加断点并执行程序进入到调试界面。按照如下顺序选择顶部菜单栏:断点——断点位置——语句处断点在弹出的界面里输入想要添加断点的关键字“MESSAGE”回车即可,这样所有的MESSAGE语句均会被增加上临时断点小提示:已经找到具体的位置想要快速执行完毕程序时,可以在Break./Watchpoints选项卡删除或者反激活该断点。3.如何使用监控点应用场景:执行完某代码块以后发现变量G_NUM的值发生了变化,我们想要找到究竟是哪里的代码让G_NUM的值变成了5。分析:用搜索的方式发现该变量调用的地方非常之多,而且均会修改该字段的值,当然我们可以一步一步跟踪程序或者把所有用到G_NUM的代码行统统加上断点,但如果调用的非常之多亦或是某标准程序的全局标量,该