前言:写代码不可避免有Bug。通常情况下除了日志最直接的调试手段就是debug。当我们的程序出现bug时,调试能够高速的找到bug。

进入调试状态。我们能够清晰的了解程序的整个运行过程,能够对内存的数据进行监视。以下就简单总结一下调试的基本使用和一些调试的技巧。

本文是通过查找网上的多方资源整理而来。假设有谬误的地方请大家指出,希望本文能对你有所帮助。

一、插入断点

选定要设置断点的代码行。在行号的区域后面单击鼠标左键就可以

二、进入调试状态

    设置好断点后,点击工具栏中的小臭虫(Debug)进入调试状态。

 
    当一个应用进入调试状态后,Android Studio会弹出这样的Debug窗体,即调试者状态。我们在这里能够对我们的程序进行监视和调试。
    IDE下方出现Debug视图。在①区域中显示了程序运行到断点处所调用过的所用方法,越以下的方法被调用的越早;在②区域能够给指定的变量赋值(鼠标左键选择变量,右键弹出菜单选择setValue...)。这个功能能够更加高速的检測你的条件语句和循环语句。在③区域中能够对某一个特定的变量进行监视,在高级调试部分会再次讲到。

三、经常使用的调试方式和快捷键

 1.经常使用调试功能及快捷键:

  • step into (F7):进入子函数 
  • step over (F8):越过子函数,但子函数会运行 
  • step out (Shift + F8):跳出子函数 
  • Run to Cursor (Alt + F9) 运行到光标所在的位置。
  • show Execution Point (Alt + F10) 高速定位当前调试的位置,并将该行高亮的显示出来。

 2.调试功能解释

  • step into:就是单步运行。遇到子函数就进入而且继续单步运行。比如当你运行到System.out.println("XXXX")时。使用这个功能时就会进入到System.out.println方法所在类的println方法下(当然这样做事没有必要的,假设进入了想跳出运行step out就能够了。

    ) 

  • step over:是在单步运行时,在函数内遇到子函数时不会进入子函数内单步运行,而是将子函数整个运行完再停止,也就是把子函数整个作为一步。

    比如上面的样例中。System.out.println("XXXX")运行完后是跳到下一个语句中而不会跳进去,这个功能也是比較经常使用的,一直按F8就能够了。

  • step out:就是但单步运行到子函数内时,用step out就能够运行完子函数余下部分,并返回到上一层函数。

  • Run to Cursor:运行到光标所在的位置,运行该功能后,不论你运行到哪里,程序都能够运行到你光标的所在行下。

     

  • show Execution Point:当你不知道程序当前已经运行到哪里的时候,就能够使用这个功能,Android Studio 会跳到运行行所在的界面,并将该行高亮的显示出来。

四、高级调试功能

以上的调试方法仅仅是简单调试。以下介绍一些比較高大上的调试功能。

 1、Evaluate Expression

    这个功能很有用。能够在断点处直接进入一个求值环境,在这里你能够运行不论什么你感兴趣的表达式;例如以下图:

比方在断点处有一个对象 object ,假设你要查看它的某个属性很easy,在Debug窗体就能看到,可是假设你想要运行它的某个方法看看结果是什么呢?借助这个能够实现。当然它的功能远不止这么多。相当于直接进入了一个 REPL 环境,很有用。忘了说了,快捷键 Alt + F8 :P

 2、条件断点 

    假设你的断点在一个列表的循环里面,可是你仅仅对这个列表的某一个元素感兴趣,仅仅想在遇到这个元素的时候才断下来;你是一直人肉 F9 直到满足条件吗?条件断点就是满足这样的需求的,顾名思义,在特定条件下的断点。使用起来也很easy,在你的断点上鼠标有件会出现一个小窗体,写上条件就可以。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

3、日志断点

    许多时候我们调试的时候许多其它的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面加入日志信息,输出函数參数,返回信息。输出我们感兴趣的变量信息等。
    可是这么做一个问题就是,我们加入了日志代码须要又一次编译;在没有 Instant Run 之前的黑暗时代这么做是很痛苦的。每次编译少则几十秒。多则几分钟;这样无意义的等待简直就是折磨。事实上,除了热部署工具,我们还能够使用日志断点解决问题。
    首先我们在想要输出信息的地方下一个断点;然后右键这个断点。在出现的设置框里面把这个断点的 suspend 属性设置为 False 。这样尽管叫做“断点”,可是并不会真正断下来;然后,我们在 log message 里面填上我们想要输出的日志信息。

例如以下图(注意标红位置):

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

这样,每次代码运行到这个断点的位置。这个可爱的断点并不会使我们的程序停下来,而是输出我们告诉它的日志信息,然后继续运行;很方便。

 4、方法断点

    传统的调试方式是以行为单位的。所谓单步调试。可是许多时候我们关心的是某个函数的參数。返回值。(回忆一下我们使用日志的时候打印的最多的信息难道不是函数的參数和返回值吗?)用法断点,我们能够在函数级别进行调试;假设经常跳进跳出函数或者仅仅对某个函数的參数感兴趣,这样的类型的断点很有用。详细用法有两种方式。最简单的是在你感兴趣的方法头那一行打上断点,这时候你会发现断点图标有点不一样,这就是方法断点了,例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

第二种方式是通过 断点设置窗体 , 后面介绍。

 5、异常断点

    在有些情况下,我们仅仅对某些特定的异常感兴趣,或者我们仅仅对异常感兴趣;我们希望仅仅要程序发生异常程序就能断下来。这好像保存现场一样。仅仅要发生命案了(异常)。第一时间保存现场,这样什么指纹之类的线索就会清晰许多。坏蛋就算想逃也是插翅难飞啊。
    Android Studio给了我们这个能力!那就是 异常断点 !能够在特定异常发生的时候。直接让整个程序断下来。假设你对全部异常感兴趣。直接 Throwable 就可以。
    详细做法是,进入 Run -> View BreakPoints 或者使用快捷键打开断点设置窗体。例如以下图:

点击左上角的
:heavy_plus_sign: 。会出现一个选择框;选择 Exception Breakpoint ;然后会出现一个对话框,选择你感兴趣的异常:

6、Field WatchPoint

    在上面我们加入异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的加入方式。第三个是异常断点。那么第二个 Field WatchPoint 是干什么的呢?
    有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给改动了,罪魁祸首是谁?Java尽管是值传递,可是引用也能够是值;对象全部存放在堆上面,而堆是被全部线程共享的,因此在很复杂的场景下,你根本不知道这些共享变量被谁改动了。这样很危急;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如 Erlang , Scala 对于这样的不变性都有着某种程度的支持。
    好吧,扯远了;那么我们怎么揪出这个改动我们值的捣蛋鬼呢?那就是这个 Field WatchPoint 的功能了;使用它我们能够在某个 Field 被訪问或者改动的时候让程序断下来。完美解决问题。
    下断点的方式和方法断点相似,也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变。例如以下图:

右键这个断点我们能够进行一些设置,比方默认是被改动的时候断下来,你也能够改为每次訪问这个字段就断下来。
    第二种方式是 Run -> View BreakPoint 打开设置。与异常断点相似。
兴许:因为本人能力有限,仅仅能总结到这里,事实上关于调试的功能还有许多须要总结。会在以后的时间里对文章进行改动和添加。希望本文能让大家有所收获。^-^
以下是关于Android Studio调试方面的博文,供大家查看
相关链接:

Android Studio调试工具总结的更多相关文章

  1. android常用调试工具fiddle、wireshark和android studio的配置

    Fiddle配置android代理 在wifi的同一个局域网环境的windows主机中安装fiddler,并且启动,如本次192.168.3.14 在android手机端配置代理为该主机 还有一种方式 ...

  2. Android Studio 优秀插件汇总

    第一部分 插件的介绍 Google 在2013年5月的I/O开发者大会推出了基于IntelliJ IDEA java ide上的Android Studio.AndroidStudio是一个功能齐全的 ...

  3. 拿走不谢!22 个 Android Studio 优秀插件汇总

    Google 在2013年5月的I/O开发者大会推出了基于IntelliJ IDEA java ide上的Android Studio.AndroidStudio是一个功能齐全的开发工具,还提供了第三 ...

  4. Android开发:Android Studio开发环境配置

    一.android studio下载: 1.Windows版: 下载地址:https://pan.baidu.com/s/1-sg4dN_2B5nn2YJf-C7XLQ 提取码:yedc 2.Mac版 ...

  5. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  6. Android Studio 解决ADB检测不到手机导致无法连接的问题

    ADB的全称是Android Debug Bridge,是用来管理模拟器和真机的通用调试工具. 开USB调试 方法:手机设置 - 开发人员选项 - USB调试 - 勾选(开发者调试被隐藏了,在关于手机 ...

  7. Android Studio 3.1 正式版

    欢迎大家推荐自己在Android开发过程中用的好用的工具.学习开发教程.用到设计素材.如果你觉得本站对你有用,你可以点击底部的分享按钮,把本站分享到社交网络让你的小伙伴和更多的人知道. 或者可以考虑捐 ...

  8. Android Studio 2.3 正式版新功能,你不来看看?!

    2017.3.3 Google老大发布了Android Studio 2.3正式版. 在许多2.3beta版本的基础上修复了bug然后推出了正式版.提供了一些新特性,和对部分已有功能的修改完善. Bu ...

  9. Android Studio环境解读

    一.使用IDE开发APP的流程 要熟悉一个新的IDE,可依次完成以下流程: 二.相关术语解析 Dalvik: Android特有的虚拟机,和JVM不同,Dalvik虚拟机非常适合在移动终端上使用! A ...

随机推荐

  1. webdriver高级应用- 禁止Chrome浏览器的PDF和Flash插件

    #encoding=utf-8 from selenium import webdriver # 导入Options类 from selenium.webdriver.chrome.options i ...

  2. 大数据学习——spark运营案例

    iplocation需求 在互联网中,我们经常会见到城市热点图这样的报表数据,例如在百度统计中,会统计今年的热门旅游城市.热门报考学校等,会将这样的信息显示在热点图中. 因此,我们需要通过日志信息(运 ...

  3. 精通CSS高级Web标准解决方案(1-3 规划、组织与维护样式表)

    对文档应用样式 对代码进行注释/*......*/ 结构性注释 自我提示 删除注释.优化样式表 样式指南:解释代码与站点的视觉设计是如何组织在一起的 站点结构.文件结构.命名规则 编码标准:(X)ht ...

  4. 2017"百度之星"程序设计大赛 - 资格赛

    度度熊与邪恶大魔王  Accepts: 3666  Submissions: 22474  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: ...

  5. Winform 连接Oracle10g时出错的解决方法

    环境:Win7(64位). VS2012 update3.Oracle10 (本机已安装ODTwithODAC1120320_32bit) 最近在开发一程序时莫名其妙报一个错误(未能加载文件或程序集“ ...

  6. 数据表自动生成java代码

    MyBatis生成代码需要用到mybatis-generator-core-1.3.2.jar.数据库连接驱动包和一个xml文件,xml文件一般命令为:generator.xml. Xml内容格式如下 ...

  7. 【bzoj3166】[Heoi2013]Alo 可持久化Trie树+STL-set

    题目描述 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG ,如名字所见,到处充满了数学的谜题.现在你拥有n颗宝石,每颗宝石 ...

  8. kb-07专题线段树-04--离散化;

    /* poj2528 线段树 好题,用到了离散化,二分定位,特殊的区间查寻方式:在下面的代码注释中有详细的解释: */ #include<iostream> #include<cst ...

  9. [POJ3974]Palindrome(后缀数组 || manacher)

    传送门 求一个串的最长回文子串的长度 1.后缀数组 把这个串反转后接到原串的后面,中间连一个没有出现过的字符. 然后求这个新字符串的某两个后缀的公共前缀的最大值即可. ——代码 #include &l ...

  10. Java-河内塔问题

    河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市:1883年法国数学家 Edouard Lucas曾 ...