精华内容
下载资源
问答
  • IDEA中如何使用debug调试项目 一步一步详细教程

    万次阅读 多人点赞 2018-07-09 16:45:46
    在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行...

    原文链接:http://www.yxlzone.top/show_blog_details_by_id?id=2bf6fd4688e44a7eb560f8db233ef5f7

    在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。

      所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容:

        一、Debug开篇

        二、基本用法&快捷键

        三、变量查看

        四、计算表达式

        五、智能步入

        六、断点条件设置

        七、多线程调试

        八、回退断点

        九、中断Debug

        十、附:JRebel激活

     


    一、Debug开篇

      首先看下IDEA中Debug模式下的界面。

      如下是在IDEA中启动Debug模式,进入断点后的界面,我这里是Windows,可能和Mac的图标等会有些不一样。就简单说下图中标注的8个地方:

      ① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。

      ② 断点:在左边行号栏单击左键,或者快捷键Ctrl+F8 打上/取消断点,断点行的颜色可自己去设置。

      ③ Debug窗口:访问请求到达第一个断点后,会自动激活Debug窗口。如果没有自动激活,可以去设置里设置,如图1.2。

      ④ 调试按钮:一共有8个按钮,调试的主要功能就对应着这几个按钮,鼠标悬停在按钮上可以查看对应的快捷键。在菜单栏Run里可以找到同样的对应的功能,如图1.4。

      ⑤ 服务按钮:可以在这里关闭/启动服务,设置断点等。

      ⑥ 方法调用栈:这里显示了该线程调试所经过的所有方法,勾选右上角的[Show All Frames]按钮,就不会显示其它类库的方法了,否则这里会有一大堆的方法。

      ⑦ Variables:在变量区可以查看当前断点之前的当前方法内的变量。

      ⑧ Watches:查看变量,可以将Variables区中的变量拖到Watches中查看 

      [图1.1]

      

       [图1.2]:在设置里勾选Show debug window on breakpoint,则请求进入到断点后自动激活Debug窗口

      

      [图1.3]:如果你的IDEA底部没有显示工具栏或状态栏,可以在View里打开,显示出工具栏会方便我们使用。可以自己去尝试下这四个选项。

      

      [图1.4]:在菜单栏Run里有调试对应的功能,同时可以查看对应的快捷键。

      

     


    二、基本用法&快捷键

    Debug调试的功能主要对应着图一中4和5两组按钮:

      1、首先说第一组按钮,共8个按钮,从左到右依次如下:

         [图2.1]

        > Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。

        > Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。

        > Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法,如第25行的put方法。

        > Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

        > Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

        > Drop Frame (默认无):回退断点,后面章节详细说明。

        > Run to Cursor (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

        > Evaluate Expression (Alt + F8):计算表达式,后面章节详细说明。

      2、第二组按钮,共7个按钮,从上到下依次如下:

          [图2.2]

        > Rerun 'xxxx':重新运行程序,会关闭服务后重新启动程序。

        > Update 'tech' application (Ctrl + F5):更新程序,一般在你的代码有改动后可执行这个功能。而这个功能对应的操作则是在服务配置里,如图2.3。

        > Resume Program (F9):恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了。

        > Pause Program:暂停程序,启用Debug。目前没发现具体用法。

        > Stop 'xxx' (Ctrl + F2):连续按两下,关闭程序。有时候你会发现关闭服务再启动时,报端口被占用,这是因为没完全关闭服务的原因,你就需要查杀所有JVM进程了。

        > View Breakpoints (Ctrl + Shift + F8):查看所有断点,后面章节会涉及到。

        > Mute Breakpoints:哑的断点,选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled,如图2.4,则该行断点失效。

         [图2.3]:更新程序,On 'Update' actions,执行更新操作时所做的事情,一般选择'Update classes and resources',即更新类和资源文件。

           一般配合热部署插件会更好用,如JRebel,这样就不用每次更改代码后还要去重新启动服务。如何激活JRebel,在最后章节附上。

           下面的On frame deactivation,在IDEA窗口失去焦点时触发,即一般你从idea切换到浏览器的时候,idea会自动帮你做的事情,一般可以设置Do nothing,频繁切换会比较消耗资源的。

           

        [图2.4]

        

     


    三、变量查看

    在Debug过程中,跟踪查看变量的变化是非常必要的,这里就简单说下IDEA中可以查看变量的几个地方,相信大部分人都了解。

      1、如下,在IDEA中,参数所在行后面会显示当前变量的值。

       [图3.1]

      2、光标悬停到参数上,显示当前变量信息。点击打开详情如图3.3。我一般会使用这种方式,快捷方便。

       [图3.2]

       [图3.3]

      3、在Variables里查看,这里显示当前方法里的所有变量。

        [图3.4]

      4、在Watches里,点击New Watch,输入需要查看的变量。或者可以从Variables里拖到Watche里查看。

       [图3.5]

      如果你发现你没有Watches,可能在下图所在的地方。

       [图3.6]  

         [图3.7]

     


    四、计算表达式

      在前面提到的计算表达式如图4.1的按钮,Evaluate Expression (Alt + F8) 。可以使用这个操作在调试过程中计算某个表达式的值,而不用再去打印信息。

       [图4.1]

      1、按Alt + F8或按钮,或者,你可以选中某个表达式再Alt + F8,弹出计算表达式的窗口,如下,回车或点击Evaluate计算表达式的值。

         这个表达式不仅可以是一般变量或参数,也可以是方法,当你的一行代码中调用了几个方法时,就可以通过这种方式查看查看某个方法的返回值。

       [图4.2]

      2、设置变量,在计算表达式的框里,可以改变变量的值,这样有时候就能很方便我们去调试各种值的情况了不是。

       [图4.3]

     


    五、智能步入

      想想,一行代码里有好几个方法,怎么只选择某一个方法进入。之前提到过使用Step Into (Alt + F7) 或者 Force Step Into (Alt + Shift + F7)进入到方法内部,但这两个操作会根据方法调用顺序依次进入,这比较麻烦。

      那么智能步入就很方便了,智能步入,这个功能在Run里可以看到,Smart Step Into (Shift + F7),如图5.1

       [图5.1]

      按Shift + F7,会自动定位到当前断点行,并列出需要进入的方法,如图5.2,点击方法进入方法内部。

      如果只有一个方法,则直接进入,类似Force Step Into。

       [图5.2]

     


    六、断点条件设置

      通过设置断点条件,在满足条件时,才停在断点处,否则直接运行。

      通常,当我们在遍历一个比较大的集合或数组时,在循环内设置了一个断点,难道我们要一个一个去看变量的值?那肯定很累,说不定你还错过这个值得重新来一次。

      1、在断点上右键直接设置当前断点的条件,如图6.1,我设置exist为true时断点才生效。

        [图6.1]

      2、点击View Breakpoints (Ctrl + Shift + F8),查看所有断点。

        Java Line Breakpoints 显示了所有的断点,在右边勾选Condition,设置断点的条件。

        勾选Log message to console,则会将当前断点行输出到控制台,如图6.3

        勾选Evaluate and log,可以在执行这行代码是计算表达式的值,并将结果输出到控制台。

       [图6.2]

      

       [图6.3]

      

      3、再说说右边的Filters过滤,这些一般情况下不常用,简单说下意思。

        Instance filters:实例过滤,输入实例ID(如图6.5中的实例ID),但是我这里没有成功,不知道什么原因,知道的朋友留个言。

        Class filters:类过滤,根据类名过滤,同样没有成功....

        Pass count:用于循环中,如果断点在循环中,可以设置该值,循环多少次后停在断点处,之后的循环都会停在断点处。

      [图6.4]

       

       [图6.5]

      

      4、异常断点,通过设置异常断点,在程序中出现需要拦截的异常时,会自动定位到异常行。

      如图6.6,点击+号添加Java Exception Breakpoints,添加异常断点。然后输入需要断点的异常类,如图6.7,之后可以在Java Exception Breakpoints里看到添加的异常断点。

      我这里添加了一个NullPointerException异常断点,如图6.8,出现空指针异常后,自动定位在空指针异常行。

       [图6.6]

      

      [图6.7]

       

      [图6.8]

       

     


    七、多线程调试

      一般情况下我们调试的时候是在一个线程中的,一步一步往下走。但有时候你会发现在Debug的时候,想发起另外一个请求都无法进行了?

      那是因为IDEA在Debug时默认阻塞级别是ALL,会阻塞其它线程,只有在当前调试线程走完时才会走其它线程。可以在View Breakpoints里选择Thread,如图7.1,然后点击Make Default设置为默认选项。

      [图7.1]

       

      切换线程,在图7.2中Frames的下拉列表里,可以切换当前的线程,如下我这里有两个Debug的线程,切换另外一个则进入另一个Debug的线程。

      [图7.2]

       

     


    八、回退断点

      在调试的时候,想要重新走一下流程而不用再次发起一个请求?

      1、首先认识下这个方法调用栈,如图8.1,首先请求进入DemoController的insertDemo方法,然后调用insert方法,其它的invoke我们且先不管,最上面的方法是当前断点所在的方法。

      [图8.1]

       

      2、断点回退

      所谓的断点回退,其实就是回退到上一个方法调用的开始处,在IDEA里测试无法一行一行地回退或回到到上一个断点处,而是回到上一个方法。

      回退的方式有两种,一种是Drop Frame按钮(图8.2),按调用的方法逐步回退,包括三方类库的其它方法(取消Show All Frames按钮会显示三方类库的方法,如图8.3)。

      第二种方式,在调用栈方法上选择要回退的方法,右键选择Drop Frame(图8.4),回退到该方法的上一个方法调用处,此时再按F9(Resume Program),可以看到程序进入到该方法的断点处了。

      但有一点需要注意,断点回退只能重新走一下流程,之前的某些参数/数据的状态已经改变了的是无法回退到之前的状态的,如对象、集合、更新了数据库数据等等。

      图[8.2]

      

      图[8.3]

      

      图[8.4]

      

     


    九、中断Debug

      想要在Debug的时候,中断请求,不要再走剩余的流程了?

      有些时候,我们看到传入的参数有误后,不想走后面的流程了,怎么中断这次请求呢(后面的流程要删除数据库数据呢....),难道要关闭服务重新启动程序?嗯,我以前也是这么干的。

      确切的说,我也没发现可以直接中断请求的方式(除了关闭服务),但可以通过Force Return,即强制返回来避免后续的流程,如图9.1。

      点击Force Return,弹出Return Value的窗口,我这个方法的返回类型为Map,所以,我这里直接返回 results,来强制返回,从而不再进行后续的流程。或者你可以new HashMap<>()。

      [图9.1]

      

      [图9.2]

      

     


    十、附:JRebel激活

      目前本人一直使用JRebel做热部署工具,效果还算理想,修改Java代码或者xml等配置文件都能热更新。偶尔服务开久了,或更改的文件较多时,热更新没有生效,需要重新启动服务。

      这里只是简单说下我在网上看到的一种免费获得永久使用权的方式(非破解),不确定这种方式什么时候不能用。

      ① 首先你需要一个Facebook或Twitter的账号(最好Twitter)

      ② 进入这个网址:https://my.jrebel.com/,并登录,如图10.1

      ③ 然后在Install and Acticate里可以得到你的永久激活码。

      ④ 在设置里Jrebel里设置激活码,如图10.3,如果没有安装JRebel插件,先在Plugins里安装搜索安装JRebel插件。

      [图10.1]

       

      [图10.2]

      

      [图10.3]

      

    本文是作者转载用来备忘的!

    原文请看:http://www.yxlzone.top/show_blog_details_by_id?id=2bf6fd4688e44a7eb560f8db233ef5f7

     

     

    展开全文
  • java debug调试怎么用?

    万次阅读 多人点赞 2018-10-24 09:19:56
    在做项目的时候,尤其是涉及多个页面的传值的时候,debug调试十分有用,可以迅速帮你找到错误的原因! 用debug的好处: 1.跟踪变量,可以查看变量的值的变化 2.迅速找到错误的原因,节省时间,找错小帮手 那么...

    我的qq  2038373094

    在做项目的时候,尤其是涉及多个页面的传值的时候,debug调试十分有用,可以迅速帮你找到错误的原因!

    用debug的好处:

    1.跟踪变量,可以查看变量的值的变化

    2.迅速找到错误的原因,节省时间,找错小帮手

     

    那么debug调试助手怎么用,用在什么地方?

    debug用在java程序上,.class文件上面

    不适合jsp页面,不适合镶嵌在jsp页面上的java代码;

     

    使用方法:

    如果你的程序报错了

    500是空指针异常,但是变量很多,不知道哪个没有赋到值,这时候用debug最合适

    第一步:

    在错误信息提示的java页面或者你认为有问题的java页面,的左侧显示行的地方,用鼠标点击一下,出现一个点,如下图所示,这个就是打断点;

    这个断点可以打多个,这个断点的意义就是,当你启动程序的时候(记住是debug启动),程序执行到这一步的时候,就会停在这里,而且程序没有关闭;

    注意:

    关键点一:打断点之后,启动程序,怎么启动程序才能进入debug模式》

     

     点击debug server(一个虫的标志)而不是run server(一个播放的按钮);

    关键点二、

    点击debug server启动程序以后,回到页面上,重复刚才点击出现错误信息的操作,这样才能知道哪里有问题,进入调试

    当你点击到页面一直在转的时候,突然感觉操作变得好慢的时候,回到开发工具myeclipse页面

    会出现

     

    点击yes,进入debug调试模式

    进入以后

     

    这里有几个快捷键 f6 f8 f5

    1.表示当前实现继续运行直到下一个断点,快捷键为F8。

    2.表示打断整个进程

    3.表示进入当前方法,快捷键为F5。

    4.表示运行下一行代码,快捷键为F6。

    5.表示退出当前方法,返回到调用层,快捷键为F7。

    6.表示当前线程的堆栈,从中可以看出在运行哪些代码,并且整个调用过程,以及代码行号

    知识点介绍到这里;

    开始实践了:

    点击f6一步步调试,如果你想看变量的变量把鼠标放在变量上面,就会出现值了,如上图所示

    也可以看这里

     这样就可以知道变量在哪里被赋值,赋了什么值,什么时候没有值了!

    退出debug模式

    点击一下黄色的部分就可以了

    但是页面还是在转,需要停止程序;

    当你找到错误原因的时候,双击断点就没有,就可以了,启动改成 run server

    如果觉得能帮助到你,可以对我的脑力劳动进行奖励,你的奖励是我创作的动力

     

    展开全文
  • Eclipse的Debug调试技巧大全

    万次阅读 多人点赞 2017-02-12 13:43:24
    一、Debug视图 调试中最常用的窗口是: 窗口 说明 Debug窗口 主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码) 断点Breakpoints窗口 => 断点列表窗口,可以方便增加断点,设置断点...

    一、Debug视图


    调试中最常用的窗口是:


    窗口 说明
    Debug窗口 主要显示当前线程方法调用栈, 以及代码行数(有调试信息的代码)
    断点Breakpoints窗口 => 断点列表窗口,可以方便增加断点,设置断点条件,删除断点等
    变量Variables窗口 => 显示当前方法的本地变量,非static方法,包含this应用,可以修改变量值
    代码编辑窗口 => 这个不用多说了
    输出Console窗口 => 日志等输出内容,调试时,可以将关注的组件级别设置低一点,以便获得跟多输出信息


    另外辅助的窗口有:

    窗口 说明
    表达式expression窗口 => 写上自己需要观察的数据的表达式,或者修改变量值
    Display窗口 => 可以在display中执行代码块,输出内容等
    大纲Outline窗口 => 查看当前类的方法,变量等
    类型层级Type hierarchy窗口 => 查看当前所在类的继承层次,包括实现接口,类继承层次
    方法调用关系Call hierarchy窗口 => 查看当前方法被哪些方法调用,调用方法在哪些类中、第几行,可以直接打开对应的方法
    搜索结果Search窗口 => 结合快捷键可以查看变量、方法等在工作空间、项目、工作集中被引用或定义的代码位置

    1)窗口全览:





    2)Debug View(线程堆栈视图):


    debug视图允许您在工作台上管理正在调试和运行的程序,他显示了你正在调试的程序中挂起的线程的堆栈帧,程序中的每个线程作为树的节点出现。他展示了正在运行的每个目标的进程。如果线程被挂起,它的堆栈帧以子元素的形式展示。以下是一些常用的debug按钮:




    1.表示当前实现继续运行直到下一个断点,快捷键为F8。

    2.表示打断整个进程

    3.表示进入当前方法,快捷键为F5。

    4.表示运行下一行代码,快捷键为F6。

    5.表示退出当前方法,返回到调用层,快捷键为F7。

    6.表示当前线程的堆栈,从中可以看出在运行哪些代码,并且整个调用过程,以及代码行号


    详细介绍:


     Skip All Breakpoints : 将所有断点设置为被跳过的,设置了Skip All Breakpoints之后,所有断点上都会有一个斜线,表示断点将被跳过,线程不会在该断点处被挂起。


     Drop to Frame : 这个命令可以让程序回到当前方法的开头第一行重新开始执行,可以重新执行这个java堆栈帧,可以选择一个指定的堆栈帧,然后点击 Drop to Frame,这样就可以重新进入指定的堆栈帧。使用Drop to Frame时候需要注意:


    1.不能drop到已经执行过的方法栈中的方法中。

    2.drop到stack frame中时,不会改变全局数据原有的值,比如,一个包含元素的vertor并不会被清空。


     Step Filters : 这个功能比较简单,就是当我们在debug的时候想要忽略一些我们不关注的类时,可以开启Step Filters进行过滤,程序会一直执行直到遇到未经过滤的位置或断点。Step Filters功能由Use Step Filters,Edit Step Filters,Filter Type,Filter Package四项组成。具体操作如下:


    步骤 1: Windows -> Preferences -> Java -> Debug -> Step Filtering.



    步骤 2:选择‘Use Step Filters’

    步骤 3:在屏幕上选中所需的选项。你可以添加你自己代码库中的部分代码。

    步骤 4:点击‘Apply’


    原理上,Edit Step Filter命令用于配置Step Filter规则,而Filter Type与Filter Package分别指的是过滤的Java类型与Java Package。


     Step Return : 跳出当前方法,在被调用方法的执行过程中,使用Step Return会在执行完当前方法的全部代码后跳出该方法返回到调用该方法的方法中。


     Step Over : 在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步。


     Step Into:单步执行,遇到子函数就进入并且继续单步执行


     Resume:恢复暂停的线程,直接从当前位置跳到下一个断点位置。


     Suspend:暂停选定的线程,这个时候可以进行浏览或者修改代码,检查数据等。


    Eclipse通过Suspend与Resume来支持线程的暂挂与恢复。一般来讲,Suspend适用于多线程程序的调试,当需要查看某一个线程的堆栈帧及变量值时,我们可以通过Suspend命令将该线程暂挂。Resume用于恢复。


    有两种Resume需要注意:

    第一是当在调试过程中修改程序代码,然后保存,点击Resume,此时程序会暂挂于断点。

    第二是当程序抛出异常时,运行Resume,程序也会暂挂于断点。


     Terminate : Eclipse通过Terminate命令终止对本地程序的调试。


     Disconnect:Eclipse使用Disconnect命令来终止与远程JVM的socket连接。



    1、调试执行


    标记 功能 快捷键 描述
    6.4 Step Info F5 -> 单步进入(如果有方法调用,将进入调用方法中进行调试);
    6.4 Step Over F6 -> 单步跳过(不进入行的任何方法调用中,直接执行完当前代码行,并跳到下一行);
    6.4 Step Return F7 -> 单步返回(执行完当前方法,并从调用栈中弹出当前方法,返回当前方法被调用处);
    6.5 Resume F8 -> 恢复正常执行(直到遇到下一个断点);
    7.4 Run to Line Ctrl+R -> 执行到当前行(将忽略中间所有断点,执行到当前光标所在行);
    6.3 Drop To Frame -> 回退到指定方法开始处执行,这个功能相当赞
    在方法调用栈上的某个方法右键,选择Drop To Frame就可以从该方法的开始处执行
    比如重新执行本方法,可以在本方法上用Drop To Frame,将从本方法的第一行重新执行。
    当然对于有副作用的方法,比如数据库操作,更改传入参数的对象内容等操作可能重新执行就再是你想要的内容了。
    6.1+6.2 Copy Stack -> 拷贝当前线程栈信息

    如果在调试时,需要排除一些类、包等不需要进入调试,可以使用Edit Step Filters设置。 


    A6的properties: Java进程启动相关信息,包括控制台启动参数,环境参数等。如果参数启动参数有问题可以先看看这里的实际启动参数是不是有误。另外还可以查看虚拟机支持调试的相关选项。




    2、数据查看


    标记 功能 快捷键 描述
    7.4 Inspect ctrl+shift+i -> 察看选择的变量、表达式的值或执行结果, 再次按ctrl+shift+i可以将当前表达式或值添加到Expressions窗口中查看;
    7.4 Display ctrl+shift+d -> 显示选择的变量、表达式的值或执行结果, 再次按ctrl+shift+d可以将当前表达式或值添加到Display窗口中显示;
    7.4 Execute ctrl+u -> 执行选择表达式;
    7.4 Run to Line ctrl+r -> 执行到当前行(将忽略中间所有断点,执行到当前光标所在行);
    7.3 All Instances ctrl+shift+n -> 查看选择的类的所有对象,这个功能超赞;
    7.3 Instance Count -> 查看选择的类的所有对象个数;
    7.4 Watch -> 添加当前变量、表达式到Expressions窗口中;


    3)Variables View (变量视图)




    1.为变量名视图,显示当前代码行中所有可以访问的实例变量和局部变量

    2.显示所有的变量值

    3.可以通过该窗口来改变变量值


    Variables View显示与Debug View中选定的堆栈帧相关的变量信息,调试Java程序时,变量可以选择将更详细的信息显示在详细信息窗格中。此外,Java对象还可以显示出其包含的属性的值。在该窗口中选中变量鼠标右键点击可以进行许多操作,主要操作有以下这些:

    All Instances:打开一个对话框来显示该java类的所有实例,使用该功能需要java虚拟机支持实例的检索。

    All References::打开一个对话框来显示所有引用了该变量的java对象,

    Change Value::更改变量的值,该功能可以和Drop to Frame联合使用进行程序的调试。使用这两个功能就可以代替重新debug

    Copy Variables:复制变量的值,尤其在变量值很长(比如json数据)的时候,这个功能就派上用场了。

    Find:有的时候一个类中变量特别多的时候,可以进行查找。


    4)Breakpoints View (断点视图)




    1.显示所有断点

    2. 将当前窗口1中选中的端口失效,再次点击启用。

    3.异常断点


    Breakpoints View将列出你在当前工作区间里设置的所有断点,双击断点可以进入到程序中该断点的位置。还可以启用或禁用断点,删除,添加新的,根据工作组或点命中计数给他们分组。在使用断点是有以下两个技巧是十分有用的:

    Hit Count: 是指定断点处的代码段运行多少次,最典型的就是循环,如果要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。

    Conditional:顾名思义,就是条件判断,例如我们需要循环变量i==10时,线程挂起,则条件设定为i==10,选择Suspend when “true”。


    那如果上面的Hit Count和Conditional都选择的话,如果表达式和值设置不合理则会失效。如果选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。


    5)Expressions View (表达式视图)




    1.表达式

    2. 点击此可以新增一个表达式


    要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项。表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。 比如我想要计算变量a+b的值,那么就可以在表达式视图中加一个表达式:a+b


    6)Display View 




    可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查)



    7)代码查看辅助窗口


    1、代码视图:


    代码视图,用来显示具体的代码。其中绿色部分是指当前将要执行的代码




    标记 功能 快捷键 描述
    11.1~11.5 quick type hierarchy ctrl+t 查看当前类、接口的继承层次, 默认进入时,显示继承/实现当前类/方法的子类,子接口11.1;再次ctrl+t,将显示当前类、接口继承/实现的超类/接口11.2;调试时,经常用该功能,在接口或抽象类的方法调用处11.3,ctrl+t察看实现类11.4,直接导航到对应的实现方法中11.5。
      quick outline ctrl+o 查看当前类的大纲,包括方法,属性等内容; 用处不大;
      open declarations F3 查看变量、属性、方法定义的地方



    2、Call Hierarchy窗口:


    标记 功能 快捷键 描述
    12.1~12.2 open call hierarchy ctrl+alt+h 查看方法被调用层次, 可以看当前方法被调用的地方12.1,或者当前方法调用了其他类的方法12.2



    3、Type Hierarchy窗口


    标记 功能 快捷键 描述
    13.1~13.4 open type hierarchy F4 查看继承层次, 可以查看类的继承层次,包括子类父类13.1, 或者类实现的接口继承层次13.2,还会根据选择的类/接口,在右边显示该类的大纲13.3、 13.4; 13.3可以选择是否显示父类/父接口的属性、方法等


    4、Search 窗口


    标记 功能 快捷键 描述
    14.1 declarations ctrl+g 相同的方法签名在工作空间中及第三方jar包中被定义的位置14.1
    14.2 references ctrl+shif+g 当前选中的变量、属性、方法在工作空间中及第三方jar包中被引用的位置14.2
    14.3   ctrl+shift+u 查看变量、属性 、方法在当前类中出现的地方14.3
    14.4 implements   查看实现当前接口的类14.8
    14.4~14.7 显示方式   可以选择不同的显示方式,具体看图




    二、Debug


    1.设置断点

    在源代码文件中,在想要设置断点的代码行的前面的标记行处,双击鼠标左键就可以设置断点,在相同位置再次双击即可取消断点。有的时候我们还有这样的需要,就是我并不想一行一行的执行代码,比如一个for循环会循环1000多遍,我只想在第500遍的时候让线程挂起进行调试,这个时候我们可以使用条件断点。 设置条件断点:我们可以给该断点设置触发条件,一旦满足某条件是才开始调试,可以在断点处点击鼠标右键,选择Breakpoint Properties进入断点设置页面,刚刚在讲断点视图的时候我们学到过Hit Count和Conditional的用法,这里可以设置条件和执行次数。


    1.1)断点类型及断点窗口

    在调试中可以设置的断点类型有五种:

     

    1.行断点(line breakpoints) : 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。


    2.方法断点(method breakpoints ): 方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。


    3.观察断点(watch breakpoints-成员变量访问变更)

    4.异常断点(exception breakpoints)

    5.类加载断点(class load breakpoints)


    每种断点的设置有些许不一样,可以在断点上右键->Breakpoint properties进行设置,但一般在断点窗口有快速设置的界面,Breakpoint properties中多了filter, 其实比较鸡肋,用处不大。


    断点相关的快捷键:


    快捷键 说明
    ctrl+shift+b 在光标处大断点/取消断点
    ctrl+alt+b 忽略所有断点
    Alt+shift+q, b 激活断点窗口

    1、行断点: 在方法中的某一行上打断点1.11.4。行断点可以设置挂起线程/VM的条件1.3,访问次数1.2。 
    1.3中的条件是,spring在注册Bean定义(registerBeanDefinition)时,如果是org.springframework.demo.MyBean,就挂起线程,可以开始单步调试了。 
    对于命中次数(hit count)1.2的使用,一般是在循环中,第N个对象的处理有问题,设置hit count = N, 重调试时,可以方便到达需要调试的循环次数时,停下来调试。


    2、方法断点:在方法上打断点2.12.2。方法断点的好处是可以从方法方法进入或者退出时2.3,停下来调试,类似行断点,而且只有行断点和方法断点有条件和访问次数的设置功能。 
    但是方法断点还有另外一个好处,如果代码编译时,指定不携带调试信息,行断点是不起作用的,只能打方法断点。 
    有兴趣的可以通过A1将Add line number… 前的勾去掉, 调试下看看。




    3、观察断点: 在成员变量上打的断点3.13.3。只有对象成员变量有效果,静态成员变量不起作用。 
    可以设置变量被访问或者设置的时候挂起线程/VM 3.2,也就是类似3.4的所有对成员变量的访问或者设置的方法都会被监控到 


    4、异常断点: 异常断点可以通过4.6添加,或者点击日志信息中输出的异常类信息添加。 
    异常断点4.1,系统发生异常时,在被捕获异常的抛出位置处或者程序未捕获的异常抛出处4.24.4, 挂起线程/VM, 也可以指定是否包括异常的子类也被检测4.34.5。 


    另外除了以上正常设置的异常挂起,从java->debug中可以设置挂起执行,主要有下面两个:

     

    1、是否在发生全局未捕获时挂起(suspend execution on uncaught exceptions),调试时,老是有异常挂起影响调试,但是没有设置异常断点的情况,就可以勾选掉这个选项;

    2、是否在编译错误时挂起,一般在边调试边改代码时会发生这种情况;


    另外要提一个的是有main方法启动的应用,可以在调试配置中勾选stop in main A3, 程序进入时,会挂起线程,等待调试。





    5、类加载断点: 在类名上打的断点5.1。接口上是打不了类加载断点的,但是抽象类是可以的,只是在调试的时候,断点不会明显进入classloader中,单步进入知会进入到子类的构造方法中,非抽象类在挂起线程后单步进入就会到classloader中(如果没有filter过滤掉的话)5.3。类加载断点不管是打在抽象或者非抽象类上,都会在类第一次加载或者第一个子类第一次被加载时,挂起线程/VM5.2





    2.调试程序


    1、调试本地 Java 语言程序


    在所有调试中,调试一个Java程序是最简单的,主要有设置断点、启动调试、单步执行、结束调试几步。

    1)设置断点:




    2)启动调试:Eclipse提供四种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)、右键->Debug As以及快捷键(F11),在这一点上,与其他命令(例如Run)类似。




    弹出提示,需要切换到调试(Debug)工作区,勾选“Remember my decision”,记住选择,则下次不再提示,然后点击【Yes】。



    3)单步执行:主要使用前面讲过的几个视图进行调试,其中debug视图中的几个按钮有快捷键:

    Step Retuen(F7)

    Step Over (F6)

    Step Into (F5)





    结束调试:通过Terminate命令终止对本地程序的调试。


    二、案例


    场景一:小明写了一个任务执行者,该执行者不间断的执行一些任务,在现网上运行了一段时间后,发现有概率的出现一些故障,发现运行一段时间后,该任务者异常退出了,退出的因为是空指针,可以小明想要在本地debug,不知道断点打在哪里,该问题是概率事件,不一定会出现,所以小明debug几遍下来后,头晕眼花,连代码都看不清楚了,小明想要是能有个断点每当出现空指针异常的时候就停下来让他发现问题,那该多好呀。


    异常断点


    异常断点:在定位问题的过程中,常常会遇到断点无法打到合适的位置,以至于和问题的触发点千差万别,所以这个时候不妨试试异常断点,顾名思义,异常断点是指抛出某种异常后自动挂起的断点。

    点击红色部位,增加一个异常断点




    输入想要定位的异常类型,例如NullPointerException,这样系统中抛出任何NullPointerException异常后,都会挂起当前线程,给你机会去定位问题。


    场景二:小明写了一个巨大的循环,在调测代码时,小明发现每当循环到第100000次的时候,就是出现问题,没有达到自己的预期,于是小明在循环里打了个断点,想看看到底怎么回事,可小明万万没有想到,想要到达100000次循环是多么的困难,小明这个时候已经开始浮想联翩,如果能有这样的断点:

                 If 循环次数== 100000,线程停下来


    条件断点


    如右图,循环1000次,如果想要在循环到500次的时候停下来,可以创建一个条件断点,右击断点悬着Breakpoint Properties。




    选中Enable Condition

    在空白处,添加你自己的条件,如果条件返回true,线程会被挂起,如果为false,则忽略该异常

    Hit Count为该断点经过多少次后,正式挂起线程,如果设置为500,则表达前499次,经过该断点都不会停下,当第500次,该断点会挂起当前线程。




    表达式


    表达式可以查看一些在当前代码中没有的命令行,方便定位问题。


    场景三:小明最近遇到一个难题,在调用一个第三方插件时总是会有问题,小明怀疑是第三方插件的bug,但小明没有找到源码不能进行debug,小明该怎么办呢?


    Debug定位第三方插件的问题


    1.使用反编译工具将代码反编译

    2.将反编译后的源码进行过滤

    3.修复源码编译错误

    4.进行debug


    参考:

    http://blog.csdn.net/u010075335/article/details/51222493

    展开全文
  • debug调试方法

    万次阅读 多人点赞 2018-08-07 10:20:10
    debug使用方法 2016年12月26日 08:50:...3、运行程序,在后台遇到断点时,进入debug调试状态  =============================  作用域 功能 快捷键  全局 单步返回 F7  全局 单步跳过 F6  全局 单步跳入 F5  ...

    debug使用方法

    2016年12月26日 08:50:25

    阅读数:524

    1.进入debug模式(基础知识列表)
    1、设置断点 
    2、启动servers端的debug模式 
    3、运行程序,在后台遇到断点时,进入debug调试状态 
    ============================= 
    作用域 功能 快捷键 
    全局 单步返回 F7 
    全局 单步跳过 F6 
    全局 单步跳入 F5 
    全局 单步跳入选择 Ctrl+F5 
    全局 调试上次启动 F11 
    全局 继续 F8 
    全局 使用过滤器单步执行 Shift+F5 
    全局 添加/去除断点 Ctrl+Shift+B 
    全局 显示 Ctrl+D 
    全局 运行上次启动 Ctrl+F11 
    全局 运行至行 Ctrl+R 
    全局 执行 Ctrl+U 

    ============================= 
    1.Step Into (also F5) 跳入 
    2.Step Over (also F6) 跳过 
    3.Step Return (also F7) 执行完当前method,然后return跳出此method 
    4.step Filter 逐步过滤 一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering) 
    5.resume 重新开始执行debug,一直运行直到遇到breakpoint。 
        例如 :A和B两个断点,debug过程中发现A断点已经无用,去除A断点,运行resume就会跳过A直接到达B断点。 
    6.hit count 设置执行次数 适合程序中的for循环(设置 breakpoint view-右键hit count) 
    7.inspect 检查 运算。执行一个表达式显示执行值 
    8.watch 实时地监视对象、方法或变量的变化 
    9.我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint ,exception breakpoint. 
    10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂 
    11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint) 
    12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...) 
    断点属性: 
       1.hit count 执行多少次数后暂挂 用于循环 
       2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂 
       3.suspend thread 多线程时暂挂此线程 
       4.suspend VM 暂挂虚拟机 
    13.variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键--change value.一次来进行快速调试。 
    14.debug 过程中修改了某些code后--〉save&build-->resume-->重新暂挂于断点 
    15.resume 当debug调试跑出异常时,运行resume,重新从断点开始调试 
    16.如果一行有很多方法, 
    当第一次按F5键就跳入这一行第一个方法,F6一步一步调试,F7跳出这方法. 
    当第二次按F5键就跳入这一行第二个方法,F6一步一步调试,F7跳出这方法. 
    以此类推.想进入这一行第几个方法,就按几次F5和F7.

     

    2.基础知识篇(包含部分实践)

    Eclipse 调试器本身是 Eclipse 内的一个标准插件集。Eclipse 还有一个特殊的 Debug 视图,用于在工作台中管理程序的调试或运行。它可以显示每个调试目标中挂起线程的堆栈框架。程序中的每个线程都显示为树中的一个节点,Debug 视图显示了每个运行目标的进程。如果某个线程处于挂起状态,其堆栈框架显示为子元素。

    在使用 Eclipse 调试器之前,假定您已经安装了合适的 Java SDK/JRE(我推荐使用 Java VM V1.4)和 Eclipse Platform SDK V3.3,而且两者的运行都没问题。一般来说,先用 Eclipse 示例测试一下调试选项比较好。如果想开发和调试 C/C++ 项目,还需要获得并安装 C/C++ 开发工具(C/C++ Development Tools,CDT)。关于 Java SDK/JRE、Eclipse 平台和示例以及 CDT,请参阅 参考资源。 图 1 显示了 Debug 透视图的一般视图。


    图 1. Eclipse Debug 透视图的一般视图
    Eclipse Debug 透视图的一般视图
     

    调试 Java 语言程序

    在可以调试项目前,需要干净地编译和运行代码。首先,需要为应用程序创建一个运行配置,确保应用程序可以正确启动。然后,需要通过 Run > Debug 菜单以类似的方式设置调试配置。还需要选择一个类,将它作为调试的主 Java 类来使用(请参见图 2)。您可以按照自己的意愿为单个项目设置多个调试配置。当调试器启动时(从 Run > Debug),会在一个新的窗口中打开,这时就可以开始调试了。


    图 2. 在调试配置中设置项目的主 Java 类
    在调试配置中设置项目的主 Java 类
     

    接下来,将讨论 Eclipse 中的一些常用调试实践。

    设置断点

    在 启动应用程序进行调试时,Eclipse 会自动切换到 Debug 透视图。毫无疑问,最常见的调试步骤是设置断点,这样可以检查条件语句或循环内的变量和值。要在 Java 透视图的 Package Explorer 视图中设置断点,双击选择的源代码文件,在一个编辑器中打开它。遍历代码,将鼠标放在可疑代码一行的标记栏(在编辑器区域的左侧)上,双击即可设置断点。


    图 3. 编辑器左侧看到的两个断点
    编辑器左侧看到的两个断点
     

    现在,从 Run > Debug 菜单启动调试会话。最好不要将多条语句放在一行上,因为会无法单步执行,也不能为同一行上的多条语句设置行断点。


    图 4. 视图中左侧空白处的箭头指示当前正在执行的行
    视图中左侧空白处的箭头指示当前正在执行的行
     

    还有一个方便的断点视图来管理所有的断点。


    图 5. 断点视图
    断点视图
     

    条件断点

    一 旦了解到错误发生的位置,您可能想要知道在程序崩溃之前,程序在做什么。一种方法就是单步执行程序的每行语句。一次执行一行,直到运行到可疑的那行代码。 有时,最好只运行一段代码,在可疑代码处停止运行,在这个位置检查数据。还可以声明条件断点,它在表达式值发生变化时触发(请参见图 6)。除此之外,在输入条件表达式时,也可以使用代码帮助。


    图 6. 设置条件断点触发器
    设置条件断点触发器
     

    计算表达式的值

    为了在 Debug 透视图的编辑器中计算表达式的值,选择设置了断点的那行代码,在上下文菜单中,通过 Ctrl+Shift+I 或右键单击您感兴趣的变量(参见图 7)选择 Inspect 选项。在当前堆栈框架的上下文中会计算表达式的值,在 Display 窗口的 Expressions 视图中会显示结果。


    图 7. 通过 Inspect 选项计算表达式的值
    通过 Inspect 选项计算表达式的值
     

    剪切活动代码

    Display 视图允许您以剪切类型的方式处理活动代码(参见图 8)。要处理一个变量,在 Display 视图中输入变量名即可,视图会提示您一个熟悉的内容助手。


    图 8. Display 视图
    The Display view
     

    当 调试器停止在一个断点处时,您可以从 Debug 视图工具栏(参见图 9)中选择 Step Over 选项,继续调试器会话。该操作会越过高亮显示的那行代码,继续执行同一方法中的下一行代码(或者继续执行调用当前方法的那个方法的下一行代码)。执行上一 步后发生改变的变量会用某种颜色高亮显示(默认是黄色)。颜色可以在调试首选项页面中改变。


    图 9. 改变颜色的变量
    改变颜色的变量
     

    要在 Debug 视图中挂起执行线程,选择一个运行线程,单击 Debug 视图工具栏中的 Suspend。 该线程的当前调用堆栈就会显示出来,当前执行的代码行就会在 Debug 透视图中的编辑器中高亮显示。挂起一个线程时,将鼠标放在 Java 编辑器中的变量上,该变量的值就会在一个小的悬停窗口中显示出来。此时,该线程的顶部堆栈框架也会自动选中,其中的可视变量也会在 Variables 视图中显示出来。您可以通过单击 Variables 视图中合适的变量名来检查变量。

    热交换错误修正:动态代码修正

    如 果运行的是 Java 虚拟机(Java Virtual Machine,JVM)V1.4 或更高的版本,Eclipse 支持一个叫做热交换错误修正(Hotswap Bug Fixing)的功能,JVM V1.3 或更低的版本不支持该功能。该功能允许在调试器会话中改变源代码,这比退出应用程序、更改代码、重新编译、然后启动另一个调试会话更好。要利用该功能,在 编辑器中更改代码后重新调试即可。由于 JVM V1.4 与 Java 平台调试器架构(Java Platform Debugger Architecture,JPDA)兼容,所以才有可能具备该功能。JPDA 实现了在运行的应用程序中替换经过修改的代码的功能。如果应用程序启动时间较长或执行到程序失败的地方时间很长,那么这一点特别有用。

    如果在完成调试时,程序还没有全部执行一遍,在 Debug 视图的上下文菜单中选择 Terminate 选项。容易犯的一个错误是在调试器会话中使用 Debug 或 Run,而不是 Resume。这样做会启动另一个调试器会话,而不是继续当前会话。

     

    3.DEBUG调试方式(方法汇总篇)

    1、 条件断点 
    断点处点击鼠标右键 - 选择"Breakpoint Properties" 
    勾选"Enabled" 启动断点 
    勾选"Hit Count" 输入框写运行次数 
    勾选"Enable Condition" 输入框写停止条件 

    2、 变量断点 
    变量也可以接受断点,在变量的值初始化,或是变量值改变时可以停止 
    可以加条件,和上面条件断点的设置是一样的 

    3、 方法断点 
    方法断点的特别之处在于它可以打在 JDK的源码里 
    由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的 
    但是方法断点却可以,可以通过这种方法查看方法的调用栈 

    4、 改变变量值 
    在Debug 视图的 Variables 小窗口中, 
    可以在变量上右键,选择"Change Value..." 在弹出的对话框中修改变量的值 
    或是在下面的值查看窗口中修改,Ctr+S 保存 

    5、 重新调试 
    这种调试的回退不是万能的,最多只能退回到当前线程的调用的开始处 
    回退时,请在需要回退的线程方法上点右键,选择 "Drop to Frame" 

    6、 远程调试 
    用于调试不在本机上的程序 
    连接时远程服务器时,需要在Eclipse中新建一个远程调试程序 

    7、异常断点 
    要找到异常发生的地方比较困难,还好可以打一个异常断点 
    Breakpoints工具框顶右第四使用"增加Exception异常断点" 
    当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助

     

    4.各种断点设置方法(实践篇)

    大家肯定都用过Eclipse的调试的功能,在调试的过程中自然也无法避免要使用断点(breakpoint),但不知是否对Eclipse中各类断点都有所了解。本篇图文并茂地介绍了Eclipse中全部类型的断点,及其设置,希望对大家有所帮助。(2011.11.20)

    1. 示例程序
    BreakpointDemo是一个臆造的应用程序,只是为了便于讲解Eclipse中各类断点的使用罢了。其代码如下图所示,

    BreakpointDemo主要包含两个方法:
    [1]setValue,该方法根据指定的次数(count),对成员变量value进行赋值,值的范围为0-9的随机整数。
    [2]printValue,该方法会调用setValue()对value进行赋值,并打印出value的值;但,如果value能被3整除,那么就会抛出IllegalArgumentException异常。

    2. Line Breakpoint
    Line Breakpoin是最简单的Eclipse断点,只要双击某行代码对应的左侧栏,就对该行设置上断点。此处,对第20行代码设置上Line Breakpoint,如下图所示,
     
    可以为Line Breakpoint设置一个条件,那么当程序运行到该断点时,只有满足设定的条件,才会被中断。右键点击第20行的断点,选择"Breakpoint Properties..."
     
    在弹出的属性对话框中,勾选上"Conditional",然后在文本框中输入"count % 2 == 0"。
     
    该条件表示,当程序运行到第20行时,只有当count为偶数时,程序才会被中断。细心地话,你会发现该断点的图标发生了改变,多了一个问号。
     

    3. Watchpoint
    Line Breakpoint关注于程序运行的"过程",大家也常把使用这种断点的调试称为单步调试。但有时候,我们对程序的运行过程不太了解,可能也不太关心,不能确定在什么地方设置断点比较合适,而可能比较关注某个关键变量的变化或使用。此时,就可以为该变量设置一种特殊的断点--Watchpoint。在此示例,我们最关心的就是成员变量value的值,那么就可以为它设置一个Watchpoint,双击第9行代码对应的左侧栏就可以了。
     
    使用在2中所提及的方法,查看该断点的属性,
     
    默认地,当该变量被访问或它的值被修改时,程序都会被中断。但在本示例中,只希望当对value的值进行修改时程序才需要被中断,所以取消对"Access"的勾选。
     
    这时,我们会发现原来的Watchpoin图标也有变化了。
     

    4. Method Breakpoint
    与关注对某个变量的访问与修改一样,我们也可以关注程序对某个方法的调用情况,即,可以设置Method Breakpoint。在此处,设置针对方法setValue的Method Breakpoint。同理,双击第11行代码对应的左侧栏即可。
     
    仍然要查看该断点的属性。默认地,只勾选了"Entry",而没有勾选"Exit"。

    这表示,当刚进入该方法(调用开始)时,程序会被中断;而,离开该方法(调用结束)时,程序并不会被中断。在本示例中,需要同时勾选上"Exit"。

    点击OK之后,可以看到该断点的图标也有所改变。
     
    根据这里的设置,当程序运行到第20行后会在第12行被中断,尽管这里没有显式的断点,但这就是setValue()方法的入口(Entry)。必须注意地是,程序在运行到第16行时不会被中断,尽管它看起来像是setValue()方法的出口(Exit)。实际上,程序会在第17行被中断,这里才是setValue()调用结束的地方。

    5. Exception Breakpoint
    如果,我们期望某个特定异常发生时程序能够被中断,以方便查看当时程序所处的状态。通过设置ExceptionBreakpoint就能达到这一目标。本示例故意在第23行抛出了IllegalArgumentException异常,我们期望程序运行到此处时会被中断。但我们不直接为此行代码设置Line Breakpoint,而是为IllegalArgumentException设置Exception Breakpoint。设置Exception Breakpoint的方法与其它类型断点都不同,它不能通过双击左侧栏的方式在代码编辑器上直接进行设置。点击Breakpoints视图右上角形如Ji的图标,
     
    会弹出如下所示的对话框,
     
    在其中选中IllegalArgumentException,并点击OK,这时一个Exception Breakpoint就设置好了。

    当value为3的倍数时,程序会在第23行被中断,这时我们就能使用调试器来看看value具体是等于0,3或6。


    6. Class Load Breakpoint
    还有一种大家平时可能不太用的断点--Class Load Breakpoint,即当某个类被加载时,通过该断点可以中断程序。

    转载于:http://langgufu.iteye.com/blog/1168366

    博主:正在走向大牛的菜鸟

    展开全文
  • nacos源码阅读--本地单机debug调试

    万次阅读 2021-02-07 17:49:25
    取消注释,然后改成自己本地的配置: 四、然后找到console中的Nacos.class 右键edit 进行配置如下,尤其需要配置-Dnacos.standalone=true,否则为集群启动 五、运行Nacos.class本地启动nacos进行调试: 访问地址:...
  • Pycharm Debug调试心得

    万次阅读 多人点赞 2018-07-03 15:08:36
    前言:记得刚开始使用Pycharm编译器的时候,为了调试代码,然后就是各种print。现在想想,果然很粗暴。今天就用用新办法,Debug。1.操作步骤:1-1....Debug调试方式如下所示:分别为:1.show execution...
  • Pycharm Debug调试(纯干货)

    万次阅读 多人点赞 2019-05-27 16:49:15
    使用Debug调试代码 1.打断点 一个断点标记了一个代码行,当Pycharm运行到该行代码时会将程序暂时挂起。 注意断点会将对应的代码行标记为红色,取消断点的操作也很简单,在同样位置再次单击即可。 如图所示,打了两个...
  • 在日常开发中我们经常会遇到多线程Debug调试, 一般我们都是利用Spring Boot对外提供接口,Tomcat中在有多人同时访问时,会开启多线程,但是,这时有可能发生异常。 说明接口在多线程访问中不是很稳定,这时就要...
  • jetty debug调试

    千次阅读 2015-12-04 19:16:19
    mvnDebug jetty:run-> eclipse进入:Debug configurations->Remote Java Application->一般接下来都是默认->Debug。 这样就可以使用jetty debug调试
  • clion-debug调试步骤

    千次阅读 2020-04-08 21:00:53
    文章目录clion-debug调试方法(先来一道水题,方便大家理解)操作细节:1. 打断点2.点击debug3.输入数据4.下一条指令 clion-debug调试方法 ​ 脱坑神器 (先来一道水题,方便大家理解) 题目要求: 获取两个...
  • 前端页面debug调试

    万次阅读 2017-06-21 16:42:13
    常用的一般都是编码工具的debug,昨天看到前端页面也可以进行debug调试,瞬间感觉高大上,赶紧跑上来,跟大家分享一下。 首先呢,在触发文件中添加debugger; 然后访问页面触发这个js文件中的函数方法,此时页面会变...
  • IDEA 中 Debug 调试的简单使用

    千次阅读 2021-03-04 13:04:15
    Debug调试代码,需要有两个元素:断点+Debug 启动服务器 1、其中断点只需要在代码需要停的位置,在对应代码行的左边行号那里单击左键即可添加和取消。 2、启动 Debug 只需点击类似于昆虫按钮即可! 3、启动成功后...
  • android studio debug 调试

    千次阅读 2016-10-10 14:16:53
    Debug断点跟踪调试是软件开发过程中分析代码、解决BUG的一个重要手段,不同IDE下的Debug...本文就以Android Studio工具为例,展示一些一般人不知道的Debug调试技巧,掌握这些,你也算是Debug调试大师了。 基本使用
  • Android StudioDebug调试详细大全

    万次阅读 2017-06-05 01:25:02
    Android Debug调试
  • 如何使用IDEA进行服务器debug调试

    千次阅读 2019-12-04 10:09:23
    IDEA服务器Debug调试说明立马开始启动顺序 说明 debug调试会帮我们找到很多异常错误出现的代码块点位,线下的Eclipse和IDEA相信大家都使用过吧;今天说一个骚操作,IDEA服务器远程Debug调试。是不是有点小期待呢? ...
  • Pycharm Debug调试python程序

    千次阅读 2018-09-30 23:26:16
    pycharm的Debug调试是非常方便简单的,具体步骤如下: Debug步骤 首先运行一下程序,使得调试的程序是你运行的程序。 添加断点:直接在标记处点击鼠标左键即可。(删除断点只需再点击断点处即可) Debug下...
  • vscode 无法进行 debug 调试

    千次阅读 2020-06-11 13:31:12
    按照网上的 vscode 开启 PHP 扩展进行 debug 调试的教程,一步步做完却没有按照理想状态运行断点,有遇到这种情况的往下看,可能就是遇到了和我一样的问题。 首先看自己的端口是否与配置一致 其次对照自己的 vscode ...
  • 事情是这样的,我用debug调试其他任务都是OK的,比如写的前后置任务,都是可以进入debug调试,但是当我配置了spring-quartz定时任务之后,再去debug只显示执行情况,并不进入debug。以前我用同事电脑试过,他去执行...
  • Eclipse实现项目依赖项目Debug调试 Eclipse实现项目依赖项目Debug调试,在eclipse的build path中设置如下: 1) 2)
  • vs Debug调试时查看QString等变量的具体值,可按照如下设置
  • Debug调试:debug启动不起来 正常启动却可以 解决方法:取消所有断点,然后在debug启动,启动完成后再打断点 当问题出现时,我们可以换一种思路,达到同样的效果。...
  • 关于Eclipse Debug 调试步骤及注意事项

    万次阅读 2019-06-21 15:12:14
    第二步:点击eclipse上方的“蜘蛛”按钮,点击debug as,debug调试开始。 第三步:显示debug图框。debug模式的界面,分为5个区域。 (1)Debug(调试)区域,显示当前正在调试代码是什么,在第多少行 (2)Variables....
  • idea中springboot怎么开启debug调试

    万次阅读 2018-07-23 16:10:38
    网上有好多关于怎么启动springboot的debug调试的,在pom中添加属性,然后等等等等,特别麻烦。 1、打开Run/Debug Configurations, 2、选择Spring Boot 下要进行debug调试的服务, 3、在VM options:的填写框中...
  • 解决vscode无法debug调试问题

    千次阅读 2019-10-15 13:32:11
    解决vscode无法debug调试问题 本人使用的fedoraKDE……直接使用终端可以用gdb正常调试,然后在vscode按网上说的设置 { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", ...
  • Mac 电脑 IDEA debug调试

    千次阅读 2019-05-30 15:37:45
    Mac中idea debug 调试和 windows 中功能顺序一样,只是图标不一样,刚换Mac 电脑都不知道怎么调试了,有点尴尬,看一下Mac中idea debug的顺序图标 在看下windows的图标顺序 windows中,第二下绿色向下的箭头,是...
  • Mac版ideaDebug调试快捷键

    千次阅读 2019-10-30 16:20:08
    Mac版ideaDebug调试快捷键 执行路口 package cn.xiaoge.day15.demo05; /* Debug调式程序: 可以让代码逐行执行, 查看代码执行的过程, 调式程序中出现的bug 使用方式: 在行号的右边, 鼠标左键单击, 添加断点(每...
  • AndroidStudio开启debug调试模式

    千次阅读 2018-10-09 18:08:21
    Android的两种Debug模式 直接运行Debug 断点Debug Run应用后,确定断点,有两种方式可以开启Debug。 ...1、使用工具栏上的图标 ...Attach Debugger to Android ...更加详细的说明,参考:AndroidStudio Debug调试详解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,355
精华内容 18,542
关键字:

debug调试