此时执行EvaluateExpression,在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:右键要求值,选择evaluate Expression。此时会显示如下:
在弹出的输入框中输入求值表达式,比如这里我们输入Math.min(result,50),如下图:
点击执行,我们发现在Result中已经输出了结果,如下:
3.断点管理区
3.1 Return
点击该按钮会停止目前的应用,并且重新启动。用于想重新调试时。
3.2 Pause Program
点击该按钮将暂停应用的执行,如果想要恢复则可以使用下面提到的Resume Program。
3.3 Resume Program
该操作有恢复应用的含义,但是却有两种行为:
1. 在应用处在暂停状态下,点击该按钮将恢复应用运行;
2. 在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点,两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力。
3.4 Stop
(1)对普通的Java项目,点击该按钮意味着退出调试模式,但是应用还会执行完成;
(2)而在Android项目中,点击该按钮,则意味这APP结束运行。
3.5 View Breakpoints
点击该按钮会进入断点管理界面,在这里你可以查看所有断点,管理或者配置断点的行为,如删除,修改属性信息等:
3.6 Mute Breakpoints
使用该按钮来切换断点的状态:启动或者禁用。
在调试过程中,你可以暂时禁用所有的断点,以实现应用正常的运行。该功能非常有用,比如当你在调试过程中,突然不想让断点干扰你所关心的流程时,可以临时禁用断点。
3.7 Get thread dump
获取线程Dump,点击该按钮将进入线程Dump界面。
线程工具区中最常用的是,可以用来过滤线程,其他的不做解释了。
接下来我们来认识一下线程的类型,表示为不同的图标:
| 线程状态描述 | 图标 |
| — | — |
| Thread is suspended. | |
| Thread is waiting on a monitor lock. | |
| Thread is running. | |
| Thread is executing network operation, and is waiting for data to be passed. | |
| Thread is idle. | |
| Event Dispatch Thread that is busy. | |
| Thread is executing disk operation. |
|
3.8 Settings
点击该按钮将打开有关设置的列表:
3.8.1 Show Values lnline
调试过程中开启该功能,将会在代码右边显示变量值,即下图中红框所示部分:
3.8.2 Show MethodReturn Values
调试过程中启用该功能,将在变量区显示最后执行方法的返回值。
举个例子来说,首先,关闭该功能,我们调试这段代码并观察其变量区:
开启该功能之后,再来观察变量区的变化:
继续往下调试:
这个功能简直是棒极了!在调试一段代码,并想看该代码中最后调用方法的最终结果时就非常有用了。
3.8.3 Auto-VariablesMode
开启这个功能后,idea的Debugger会自动评估某些变量,大概就是当你执行在某个断点时,Debugger会检测当前调试点之前或者之后的变量的状态,然后在变量区选择性输出。
举个例子来说明,未开启该功能之前,变量区输出所有的变量信息:
开启之后,当你调试到第13行时,Debugger检测到num变量在之后没有被使用,那么在变量区就不会输出该变量的信息。
3.8.4 Sort valuesalphabetically
开启这个功能后,变量区中的输出内容会按照按字母顺序进行排序,不常用,还是按照默认的顺序好。
3.9 Help
这个不用说了,有任何不明白的都可以查看官方帮助文档。
其他几个操作:Settings、Pin、Close留给各位自己去使用。
4.修改变量值
在调试过程中,我们可以方便的修改某个变量的值,如下:
在上图中,当前result的值经过计算为10,这里我们通过Set Value将其计算结果修改为100。
5.变量观察区
该区域将显示你所感兴趣的变量的值。
在调试模式下,你可以通过Add to Watches将某个变量添加到观察区,操作如下:
这里我们对name比较感兴趣,希望看到它的值的变化情况,因此我们将其“特殊关照”。
需要注意,此时因为name是成员变量,因此在对象观察区也可看到该值。如果是局部变量,无疑只能用这种方式了。
6.断点
6.1 条件断点
所谓条件断点就是在特定条件发生的断点,也就是,我们可将某个断点设置为只对某种事件感兴趣,最典型的应用就是在列表循环中,我们希望在某特定的元素出现时暂停程序运行。比如,现在我们有个list中,其中包含了q,1q,2q,3q四个元素,我们希望在遍历到2q时暂停程序运行,那么需要进行如下操作:
在需要的地方添加断点,如下:
断点处左键单击,在Condition处填写过滤条件.此处我们只关心2q,因此填写s.equals(“2q”)
6.2 日志断点
该类型的断点不会使程序停下来,而是在输出我们要它输出的日志信息,然后继续执行。
具体操作如下: 同样在断点处左键单击,在弹出的对话框中取消选中Suspend。
在弹出的控制面板中,选中Log evaluated expression,然后再填写想要输出的日志信息,如下:
当调试过程遇到该断点将会输出结果,如下:
6.3 异常断点
所谓的异常断点就是在调试过程中,一旦发生异常,则会立刻定位到异常抛出的地方。
比如在调试异常中,我们非常关注运行时异常,希望在产生任何运行异常时及时定位,那么此时就可以利用该类型异常,在上线之前,进行异常断点调试非常有利于减少正式环境中发生crash的几率。
具体操作如下:在Run菜单项中,选择ViewBreakpoints,如下:
在管理断点面板中,点击+
在弹出的下拉选择列表中,我们选择Java ExceptionBreakpoints。
这里我们选中Search By Name,在下面的输入框中输入我们所关心的异常类型。
此处我们关心NullPointerException,在调试过程一旦发生NullPointerException,调试器就会定位到异常发生处。
6.4 方法断点
传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点。
结语
看到这篇文章的人不知道有多少是和我一样的Android程序员。
35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。
我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。
千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。
有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。
给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
文章的人不知道有多少是和我一样的Android程序员。
35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。
我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。
千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。
有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。
给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
[外链图片转存中…(img-pa2bCnDm-1725906317612)]