暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Android studio 专项-应用调试说明(上)

自学者 2020-08-25
853


▲ 
每日一句精选英文:

Don't forget, a person's greatest emotional need is to feel appreciated.
莫忘记,人类情感上最大的需要是感恩。


版权声明:

1、原创文章,素材《自学者》,版权归《自学者》所有,如有侵权,联系删除。

2、有用请“分享朋友、点个“在看”、朋友圈”,帮助更多的小伙伴

调试应用

To debug the application


简介:Android Studio提供了一个调试程序,就是Debug,一个菜单栏上方绿色的小虫子,以用来执行以下操作以及更多操作:


  • 选择调试设备
  • 在Java、Kotlin和C/C++代码中设置断点
  • 在运行时检查变量和对表达式求值


1

启动调试功能

START

预备工作:

    1、在Android studio设备上启动调试功能,分为两种情况

    a:启动模拟器(默认开启调试功能)

    b:真机调试(手机版本处双击开启开发者模式,连接USB调试)

    2、运行可调试的构建变体:(构建配置中包含 debuggable true 的构建变体

    android {
    buildTypes {
    customDebugType {
    debuggable true
    ...
    }
    }
    }

    此属性也适用于包含 C/C++ 代码的模块。(不再使用 jniDebuggable 属性)


    如果您的应用依赖于您也要调试的一个库模块,该库也必须使用 debuggable true 进行打包,以便保留其调试符号。为了确保应用项目的可调试变体接收库模块的可调试变体,请务必发布库的非默认版本


    2

    开启调试

    GO~

    准备工作:

        1、在应用的代码处设置断点(if判断语句、数组、对象、方法内......)

            a、移动断点:如果你发现断点添加的位置不合适,除了清除断点之外,可以将当前的断点拖动到你想要的位置,因为该移动操作保留了断点的设置。

            b、条件断点:设置条件断点,您需要右击一个断点并为其添加一个条件。这里的条件可以是任何结果为 Boolean 的代码表达式。当代码运行到这一行时,如果表达式执行结果为 True,断点就会被激活。

            例如:设置一个 player.health == 1 的条件,从而使您可以捕捉到玩家生命值降为 0 前的最后一次物体的碰撞事件。 

           (图1-0 源自谷歌开发者)

             c、依赖断点:如果您发现了只会在某个特定路径才会触发的 Bug随意为其打一个断点会造成许多无意义的运行中断。为了应对这种情况,您可以使用依赖断点。依赖断点只会在特定的断点被触发后才会激活。举例来说,您可以创建一个只会在您感兴趣的路径中被触发的断点,而其他断点便可以依赖此断点,从而使这些断点也只会在您所感兴趣的路径中被触发。为了设置依赖断点,您需要右击路径中的第二个断点,并打开 More 菜单。在 Disable until breakpoint is hit 选框中,选中您想要依赖的断点:

      (图1-0 源自谷歌开发者)

    您会发现断点的图标发生了改变:

    现在,您的应用只会在前一个断点被触发后才会在此断点停止运行。


    这个功能也可以用在其他使用了条件断点的地方,从而可以避免复制粘贴条件断点到新位置的操作。


        2、在工具栏中,从目标设备下拉菜单中选择要用来调试应用的设备

    (图1-1 源自Android developer)

       

       3、如果您未配置任何设备,则需要通过 USB 连接设备创建 AVD 以使用 Android 模拟器。(以下为AVD创建)


    (图1-2 源自《自学者》

        4、在工具栏中,点击 Debug 图标 


    如果您看到一个对话框询问您是否要“switch from Run to Debug”,这表示您的应用已在设备上运行,并且它将重启以便开始调试。如果您希望让同一应用实例保持运行状态,请点击 Cancel Debug,然后将调试程序连接到正在运行的应用


    否则,Android Studio 会构建一个 APK,使用调试密钥为其签名,将其安装在您选择的设备上,然后运行它。如果您向项目添加 C 和 C++ 代码,Android Studio 还会在 Debug 窗口中运行 LLDB 调试程序以调试您的原生代码。


        5、如果 Debug 窗口未打开,请依次选择 View > Tool Windows > Debug(或点击工具窗口栏中的 Debug 图标 ),然后点击 Debugger 标签页,如图 1-3 所示。


    (图1-3 源自Android developer)

    “Debugger”窗口,显示了变量的当前线程和对象树

    3

    连接正在运行的应用

    Link~


    如果您的应用已在设备上运行,则无需重启应用即可开始调试,具体操作步骤如下:

    1、点击 Attach debugger to Android process 图标 

    2、在 Choose Process 对话框中,选择要将调试程序连接到的进程。

    如果您使用的是模拟器或已取得 root 权限的设备,则可以勾选 Show all processes 以查看所有进程。

    从 Debugger 下拉菜单中,您可以选择其他调试类型。默认情况下,Android Studio 会使用 Auto 调试类型选择最适合您的调试程序选项,具体取决于您的项目包含 Java 代码还是 C/C++ 代码。

    3、点击 OK。

    此时将显示 Debug 窗口。

      注意:Android Studio 调试程序与垃圾回收器采用松散集成。
      Android 虚拟机可保证在调试程序断开连接之前不会对调试程序发现的任何对象进行垃圾回收。这可能会导致在调试程序处于连接状态时,对象随时间的推移逐渐积累起来。
      例如,如果调试程序发现了某个正在运行的线程,那么在调试程序断开连接之前,不会对关联的 Thread 对象进行垃圾回收,即使该线程已终止。

      4

      使用系统日志

      System~


      技巧一、Log的过滤与折叠

      经典调试法:printf 语句的一个小窍门说起。假设有一个游戏,它会在日志中打印它的帧数和用户的最终得分,那么该游戏就会在 Logcat 窗口中给出以下内容:

      (图2-1 源自谷歌开发者)

      干扰信息:例如日期和线程 ID。

      高效方案:点击 Logcat 工具栏中的设置图标,便会弹出一个 Configure Logcat Header 窗口,您可以在这里取消那些您不想看到的信息:

      (图2-2 谷歌开发

      这样设置之后,打印的数据就会简洁明了,从而获得更加简洁、更加相关的日志输出。


      然而,这里仍然留下了许多混淆视听的内容,妨碍我们专注于 High Score 信息。您可以使用搜索功能解决这一问题,只要在搜索中输入一部分调试信息来对 Logcat 窗口进行过滤:

      (图2-3 谷歌开发

      经常会用到的搜索条件,可以通过 Edit Filter Configuration 添加到自定义过滤器中:

      (图2-4 谷歌开发

      下面,添加过滤器的详细信息:

      (图2-5 谷歌开发

      #:另一种减少混乱日志的方式是使用折叠功能,它可以把近似的日志折叠为同一组。您只需选中一条日志中的部分文本,右击鼠标,并选择 Fold Lines Like This:

      (图2-6 源自谷歌开发者)

      当 Console 对话框出现时,点击 OK,就可以将包含选中文本的近似日志整理到一起:

      (图2-7 谷歌开发

      如果稍后您需要查看被折叠的信息,则可以点击某行来展开内容。这里也提供了方便您展开或收起折叠行的按钮。


      (精彩讲解,会持续更新~)

      /

      END

      (更多文章可在【自学者】菜单栏中查阅)

      分享精选GitHub项目丨传播高效自学技巧

      长按上图,识别图中二维码即可关注


      文章转载自自学者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论