微信号:androidwalker

介绍:关注Android新技术、进阶开发

Android Studio之《高级篇:调试技巧》

2016-05-23 07:16 xjj_app


前言
       调试技巧是每一个开发者必须掌握的一套基本功,除了会使用外,还需要融汇贯通,在各种场合下灵活运用。


1
调试原理


        为什么可以用开发工具来调试Java?因为,有一套牛B哄哄的JPDA工具。这个JPDA的全称是“Java Platform Debugger Architecture”,也即Java平台调试体系结构。JPDA提供一套灵活的API,方便开发工具调试Java程序。JPDA主要由三部分组成:JVMTI(Java虚拟机工具接口),JDWP(Java调试线协议),JDI(Java调试接口)。

        其中JDI是最上层的接口,可供调试器调试使用。通过这些接口,调试器可以及时了解目标虚拟机的状态:比如查看目标虚拟机上有哪些类和对象等等。除此之外,调试器还可以控制目标虚拟机的执行:比如挂起和回复目标虚拟机的线程、设置断点等等。

        关于调试内容,先讲到这,有兴趣的童鞋可以自行深入学习一下!


2
连接调试器


        在Android Studio的工具栏里,有一个“attach debugger to Android process”的小工具,点击打开如下




        在弹出框里面,会显示当前运行的进程,双击该进程之后,便可以将调试器连接到该进程上。便可以开启调试之旅。


3
插入断点


1

普通断点


        断点,顾名思义就是程序执行到某一个地方中断。但这里的中断并非终止运行,而是暂停的意思。在Android Studio里面,可以单击某一行左侧来插入断点:



         

2

条件断点


        所谓条件断点则是普通断点的升级版,在调试过程中非常好用。比如,在一个for循环里,如果需要在某一个特定的循环中暂停,查看变量信息,那么就需要用到这个条件断点,具体操作如下:




1)插入普通断点

2)右键该断点,弹出条件输入框

3)输入条件语句,然后点击“Done”,就可以开始调试了。


4
按步调试


        我们程序一旦运行到指定的断点后,我们可以有如下的调试手段:




1

Step Over




        Step Over(快捷键F8),一步一步往下走。当程序运行到断点后,暂停时,可以通过该按钮,一行一行往下执行代码,不需要再增加额外的断点。


2

Step Into




        Step Into(快捷键F7),则是遇到有方法或构建函数则往里执行。在碰到执行的代码里面有调用某一个方法时,Step Over 是直接当成一步跳过去,而Step Into 则是可以进入到该方法里去,在用Step Over一步一步调试。


3

Force Step Into




        Step Into的扩展延伸,可以看到更多的调用关系。我们来对比一下差别,如下代码断点:



在上述断点处暂停后,分别作如下动作

1)如果使用Step Into,则跳转到接下来的for循环这行;

2)如果使用Force Step Into(快捷键Alt+Shift+F7),则发现进入了ArrayList类中。



4

Step Out




        配合上述的Step Into, 当使用Step Into进入到一个方法之后,想跳出来,在原来入口的代码位置继续往下走,则可以使用Step Out(快捷键Shift+F8)


5

Run to Cursor




        进入下一个断点(快捷键Alt+F9)。如果不想一步一步调试到下一个断点,则可以使用这个按钮来跳到下一个断点。


6
调试操作

1

恢复程序




        “Resume Program”也即恢复程序(快捷键F9),和“Run to Cursor”,一样,当在一个断点处暂停时,点击这个按钮,会执行到下一个断点。


2

停止调试


    

         停止调试(快捷键Ctrl+F2),可以中断调试。


3

请输入标题




        “View Breakpoints”,查看断点(快捷键Ctrl+shift+F8),可以查看到所有的断点。打开如下所示:




        从上图可以看到,默认选中了“Java工程中的断点”,同时还有一个可选项(默认不选中,需要自己手动勾选),这个可选项就有点牛掰了,它会在出现Java异常的地方,自动打上断点,一旦出现异常,则方便查看异常信息。(不得不为这个功能点赞~~~)


7
变量操作


1

观察变量


        所谓观察变量,就是指在调试过程中,有些变量随着程序一步一步的运行,一直在改变。我们为了方便查看,将这些变量添加到指定的列表中,可以方便查看变量值的改变。

        具体操作:我们加上断点,连接调试,然后程序运行到指定的断点处,便可以将关注的变量从Variables的面板添加到Watches面板中,具体如下

1)添加断点,连接调试器,运行到如下断点




2)在Variables面板中,可以右键某一个变量,在弹出的菜单中选择“Add To Watches”,这个变量便会显示在Watches面板中了。(可以同时观察多个变量)




2

设置变量值


        这个是一个很强的功能,在调试过程中,我可以修改运行时的变量,从而可以尝试多种值。(好处就是不用重新编译工程,业界良心啊~~~)

        要达到修改变量值,那么连接调试器,并设置断点是必须的。这里就讲一下,当达到某一个断点时,可以采用如下方式修改变量值:

1)右键某一个变量,比如i,在弹出菜单选择Set Value




2)在框中键入新的值,同时按下回车(这个很重要,才会生效),比如我修改为100并按下回车,发现右侧的Watches面板的值已经发生改变




3)此时,i已经为100,可以继续调试,发现退出循环(循环的大小才5)


        好的,调试技巧就讲到这,大家可以自己拿一个Demo试试,这样上手更快。



 
Android高级开发 更多文章 Android Studio 入门技巧之<基础篇> Android Studio 之<进阶篇:实用快捷键> Android Studio 之<进阶篇:IDE设置> 2015年度腾讯MIG内部技术峰会 多团队协同开发经验
猜您喜欢 Golang tls 链接通信 测试人员如何面试 PHP:40+开发工具推荐 淘宝技术部世界杯算法大赛赛况 TiDB 中的子查询优化技术