Android Studio 你需要掌握的Debug调试技巧 红太狼 2022-04-06 08:16 245阅读 0赞 从左到右依次为 Step Over:下一步,不会进入方法内部。 Step Into:进入到方法内部。 Force Step Into:进入到系统方法内部。 Step Out:跳出该方法。 Run to Cursor:进入到下个断点,只有一个断点就到下一次的该断点。 =================================================== 原文http://blog.csdn.net/yaoobs/article/details/51296198 ## 最基本的调试技巧 ## 千万不要觉得那些简单的基本的东西不重要。事实证明,这些技巧往往是我们平时使用最为频繁的,所以,先从这些讲起。 **1.设置断点** ![设置断点][20160502154946128](图1) 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。 ### 2.Debug模式启动APP(Shift+F9) ### 点击红色箭头所指向的虫子图标,Debug模式启动APP。 ![Debug模式启动APP][Debug_APP](图2.1) APP启动后,运行至第一处断点处会停下来,同时IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法Add()中,程序的第20行。红色箭头悬停的区域是程序的方法调用栈区。在这个区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。 同时也能看到,设置断点的代码行变量i处在监控之中,此时,i = 0。 ![Debug视图][Debug](图2.2) ### 3.单步调试 ### 3.1 step over(F8) 点击红色箭头指向的step over按钮(图中我们按了两次让 i =1,看的明显一些),程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。就是说不会进入到调用的其他方法中去)。 ![step over][](图3.1) 3.2 step into(F7) 点击红色箭头指向的step into按钮,程序向下执行一行。跟step over不同的是:如果该行有方法调用且为自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。 ![step into][](图3.2.1) 点击以后,进入到Add()方法之中。 ![step into][step into 1](图3.2.2) step into按钮右边的 Force step into按钮(Alt+Shift+F7)可以进入包括官方类库在内的任何方法。 3.3 step out(Shift+F8) 如果在调试的时候你进入了一个方法(如Add()),并觉得该方法没有问题,你就可以使用step out跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。 ![step out][](图3.3.1) 没有问题,点击step out按钮,跳出该方法,该方法执行完毕。 ![step out][step out 1](图3.3.2) 这个Drop frame暂时还没有搞清楚怎么用,等以后补充。。。 3.4 run to Cursor(Alt+F9) ![run to Cursor][](图3.4.1) 设置多个断点时,可利用 run to Cursor按钮在两个断点之间跳转。 ![run to Cursor][run to Cursor 1](图3.4.2) 其实Resume Program也是这个功能,它们有什么不同还不清楚。。。 3.5 Watches 如果某个类或方法中变量太多,在Variables面板里观察的话会很费劲,这时就会需要用到Watches这个工具了。 点击Watches下方的+号,然后手动输入变量的名称回车就OK了。 ![Watches][](图3.5.1) 也可以选择Variables中的变量名然后点击右键,选择Add to Watches,然后Watches面板中就有了。 ![Watches][Watches 1](图3.5.2) 还能看到SetValue选项,可以手动更改某个变量的值,有时候会很有用。 3.6 View BreakPoints(Ctrl+Shift+F8) ![View BreakPoints][](图3.6.1) 点击箭头指向的按钮,会弹出一个窗口,如下图。 ![View BreakPoints][View BreakPoints 1](图3.6.2) 在这里可以查看设置过的所有断点(箭头所指)。另外,还可以在这里设置条件断点,日志断点,异常断点等,这些高级技巧我们将在本系列的下篇文章里介绍,敬请期待! 等等!先别着急翻页,本期还有最后一个压轴的技术点要分享给大家。 想象一下下面的场景:你的APK如果已经运行在普通模式(非Debug)的情况下,你突然想Debug,而又不想重新运行浪费时间,该怎么办呢? 普通模式下想设置断点进行调试可不可以呢? 当然是可以的,不仅可以,这种方式已经渐渐替代了原先的方案,毕竟很方便,不是吗?那具体要怎么做呢? 4 attach process ![attach process][](图4.1) 正常运行APK ![attach process][attach process 1](图4.2) 运行起来之后,设置断点 ![attach process][attach process 2](图4.3) 运行Run->Attach debugger to Android process ![attach process][attach process 3](图4.4) attach process到指定进程,条件触发之后就可以直接进入调试模式。之后该怎么做不用我再说了吧? [20160502154946128]: /images/20220406/7fda28f1edb84e5db3762e957c33ef52.png [Debug_APP]: /images/20220406/07747cba57534bf09f5d89e75482aa71.png [Debug]: /images/20220406/6f3ead2cd8d74bab906ceb08404362b0.png [step over]: /images/20220406/518e9fb1576e4a9bbf242c7b4bd661af.png [step into]: /images/20220406/28410d324e88415a950804faa3e84dc8.png [step into 1]: /images/20220406/2386860bd28c4f1c9f4676195fb95af4.png [step out]: /images/20220406/34f1d7be90f345e1a4f8b5f0f32640de.png [step out 1]: /images/20220406/5db21c9cee904e938d5212d2d6e8e606.png [run to Cursor]: /images/20220406/4da551c40e5447dab3da2cacba592cde.png [run to Cursor 1]: /images/20220406/a6f8c97f94f04af5a676ae38f08fb502.png [Watches]: /images/20220406/d7b32b91f03b4296b57a3e2b95e7c7f3.png [Watches 1]: /images/20220406/4225ba51f263424db8e5516562261d26.png [View BreakPoints]: /images/20220406/45ad4cdee89143a1ac6538e61005ce9a.png [View BreakPoints 1]: /images/20220406/156731d65eec40f694538437b72cd284.png [attach process]: /images/20220406/e8af4ff68ac0473d9a9fa27d621e6d97.png [attach process 1]: /images/20220406/af87d4a4b6004fbb98c8e99a4c47bdb5.png [attach process 2]: /images/20220406/887951b2a68241e5ad66d69f9c05d1f4.png [attach process 3]: /images/20220406/2a0f82643b294e2ea0301bfefdf56497.png
还没有评论,来说两句吧...