文章目录
- 一、启动 Debug 模式
- 二、debug 的每个操作按钮
- 1. Step Over(F8)
- 2. Step Into(F7)
- 3. Force Step Into
- 4. Step out
- 5. Run to Cursor
- 三、Debug 进阶用法
- 1. Watches
- 2. Set Value
- 3. 查看所有断点
- 4. 停止 debug 调试
- 5. 已经运行的程序,避免重新运行程序的情况下,怎么添加 debug 调试。
一、启动 Debug 模式
- 在需要打断点的代码行数上稍微偏右,点击鼠标左键,如图:
- 点击小爬虫按钮,启动 debug 模式。
- 运行成功后如下。可以看到红色框内,从下往上的顺序运行方法,一直阻塞在我们打断点的方法里;绿色款内,则是展示目前阻塞方法内变量和参数的数值。
二、debug 的每个操作按钮
1. Step Over(F8)
作用:程序向下一步执行,但是要注意,这个按钮不会主动进入方法体内,而是会直接运行完整个方法后直接运行下一步。
例如:我当前运行的 debug,如果一直点击这个按钮的话,他会在 onCreate() 方法内,执行完 add() ,再执行完 sub() ,然后直接结束,并不会进 add 和 sub 方法内去打印。
2. Step Into(F7)
作用:程序向下一步执行,和Step Over的区别是如果该行有方法调用且为自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。
例如:我当前运行的debug,如果你想进入到add()方法里,那么点击Step Into。假如我的add()方法里,还调用了其他的自定义方法,如果此时你都想进入各个方法查看则继续用Step Into,假如你只想停留在add()方法里,其他方法只需要得到个返回值的话,这个时候应该用Step Over。
3. Force Step Into
作用:可以进入包括官方类库在内的任何方法。一般我认为这个比较适合研究源码。
4. Step out
假如此时调试在add()方法里,如果我们觉得add()方法没有问题,想跳出这个方法继续debug其他断点时,那么点击Step out,跳出该方法。
5. Run to Cursor
他是移动到下个断点的意思,测试如下:
- 假如在我们当前运行的debug,如果还在onCreate()方法内,当前断点在add()方法时,点击Run to Cursor,断点确实会移动到下个断点停留在sub()方法。
- 如果此时我们已经进入到add()方法体内,点击Run to Cursor,我们会看到,他只是运行完一次for循环后,继续堵塞。如下图:
那么此时,如果我们已经在add()方法内,就是想直接运行到下个断点 sub() 上,怎么操作呢?点击 Resume Program
这个按钮不会管你在不在方法内,直接回到下一步断点上。
三、Debug 进阶用法
1. Watches
- 方法1:在我们观察的Variables里,找到那个变量右键,选择Add to Watches
- 方法2:在我们的Watches界面,点击+号,在输入框内,输入i,进行搜索,也能添加到Watches,方便我们debug调试
2. Set Value
比如在我们的 add() 方法里,有一个 for 循环,正常调试是每次都会从i=0的时候进行调试,如果我们想直接从i=5的时候进行调试,那么我们可以在 Variables 界面,找到那个变量值,右键选择 Set Value 后,输入我们5,就能跳过前几次循环。
3. 查看所有断点
开发中你打了很多断点忘记取消的情况下,你可以点击 View Breakpoints 查看所有断点
打开如下界面:
4. 停止 debug 调试
5. 已经运行的程序,避免重新运行程序的情况下,怎么添加 debug 调试。
这里多说几句,因为是在已经运行的程序上,添加debug调试,那么比如进入一个页面,onCreate()方法里的代码,都已经全部执行完了,比如我们点击一个按钮,需要运行的方法,在这个方法里我们才能添加debug调试。比如首先是一个正常运行的程序,我们给点击事件里加断点。
然后,点击 Attach Debugger to Android Process
弹出如下页面,点击 OK 就行了,点击按钮就能进行 debug 调试了