admin管理员组

文章数量:1647196

2024年1月6日发(作者:)

1 MyEclipse debug

1.1 为什么要Debug

在开发系统过程中,常遇见一个功能的处理逻辑复杂、交互数据繁多和多次调用接口的情况;这时我们按照设计编写代码,运行代码,当运行结果和预期结果不一致时,我们想知道程序的每一步具体是怎么执行的,在哪一步与预期不一致。所以我们需要逐行跟踪代码的执行,找出有问题的代码行,分析执行情况,直至修改正确也即消除错误,这一过程称debug。

1.2 Debug 模式

我们平常打开MyEclipse都是企业开发模式视图,现在了解下debug模式视图,打开debug视图;可单击如下图示的位置:

Debug视图:

如图示;在debug视图下有4个主要窗口:

① 左上的Debug窗口;主要查看当前程序所在的线程,对线程可以终止、重启;终止后则不再执行程序也就不debug程序下去,重启则重新运行程序并定位在第一个断点处。

② 右上的断点状态窗口,包括了Variables,Breakpoints,Expressions三个子窗口。Variables 窗口主要查看在断点行之前的所有有效变量;Breakpoints 窗口显示整个项目中所有的断点(包括断点所在位置);Expressions 窗口主要查看用户自定义的变量,如在程序中选中某个变量然后右击选择“Watch”后,则变量将会在Expressions窗口中显示其名称和值。

③ 左下的程序窗口,即当前正在调试的类并定位在正要执行的代码行。

④ 右下的类结构窗口

1.3 Debug常用快捷键及功能

为了方便在调试程序时,控制程序的执行时序;MyEclipse为调试设置了常用的快捷键。

常用快捷键及功能:

① 双击代码行左边的标识栏则可设定一个断点(ctrl + shift +b)

② F5进入本行中引用的方法中执行

③ F6 继续执行下一步

④ F7 执行完方法,返回到进入到该方法中的最后一行语句(跳出F5进入的方法)

⑤ F8 到下一个断点处,如果没有下一个断点则执行到程序结束

⑥ Step filter 逐步过滤,在window-preferences-java-Debug-step

Filtering 中可设置不需要调试的类或者包。当在调试时如运行到配置了step filter的类时,按F5是不会进入该类方法调试的。该设置常用于一些第三方类库或者JDK基类等源码的调试过滤,因这些代码基本上是无误的;不需要进入其方法进行调试。

上图中,如果在其它类中调用了HelloWorld中的方法,而在断点调试时按F5不能进入HelloWorld对应方法调试。

⑦ Inspect 在调试时,在程序中选取特定表达式,右击选择“inspect”则可查看表达式的执行值

⑧ Watch在调试时,在程序中选取特定对象、变量,右击选择“watch”则可实时监视其值变化。

⑨ Method breakpoint方法断点,双击方法左边的标识栏,将断点设置在方法上,则相当于将断点设置在该方法可断点的第一行。

下面是断点的属性功能,右击断点,选择“Breakpoint Properties…”

⑩ Enable 右击行断点,打开页面中如果不勾选 enable 则说明该断点是无效的,程序不会停在该断点处。

⑪ Hit count 执行次数,一般使用在循环体内的语句,当满足执行次数时程序停在循环体内设置了改hit count的断点处;如:

如果这样设置了断点属性,则执行for循环时,只有当i为3时才停在输出语句处,因为i的值为3时,已经执行4次了。

⑫ Suspend thread 挂起线程,即执行到该断点时只挂起当前线程,不影响其它线程的执行。

⑬ Suspend VM 挂起jvm,即执行到该断点时同时挂起其它线程,该行代码不执行完其它线程无法执行。(在子线程中的断点设置该项无效)

图中所设,如果第22行的输出语句在j=19的时候,thread1和thread2的任务还没执行完,那么这2个线程未完成的任务将也暂停不能继续执行,直到执行完该次断点。

⑭ Conditional 条件断点; 可以对该断点设定特定的条件,条件的值必须为布尔值;即当满足该条件则挂起停在断点处。

图中所示的条件为i==4,这个和hit count == 5 效果一样。

1.4 初试断点

在一个循环体中设置条件断点,查看程序的运行情况。

1.5 常设断点位置

在设置断点时,一般将断点设置在程序判断条件复杂,业务处理逻辑处理复杂和容易出现问题的语句上。

在一个多重循环或者大数据量的循环中,可以在循环条件上设置条件断点;当循环条件满足断点设置的条件时才进行断点调试。

1.6 断点调试

在导入excel的操作中利用断点查看用户上传的excel文件名称是否规范和有没通过正则表达式的验证。

另外;在导出用户的过程中,检查是否有生日为空的用户。

本文标签: 断点执行程序条件调试