Android Studio Debug:编码五分钟,调试俩小时

前言

整理并积累Android开发过程中用到的一些调试技巧,通过技巧性的调试技能,辅助增强代码的健壮性、安全性、正确性

案例一:抛出明显异常

  • 常见的:除数为0问题
class MainActivty : AppCompatActivity(){
    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        button.setOnClickListener {
               val i = 1/0
        } 
    }
}

image.png

会提示错误原因,并告知在哪一行

  • 一般错误
class MainActivty : AppCompatActivity(){
    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        button.setOnClickListener {
               val s = "Candy"   //假设此处是在一个方法内,我们无法看到
               var i = 0
               i = s.toInt()
        } 
    }
}    

image.png

会提示错误原因,并告知在哪一行

错误原因可能不认识,直接找错误关键字,检索百度

案例二:逻辑问题

  • println()方式调试
class MainActivty : AppCompatActivity(){
    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        button.setOnClickListener {
            var res = 0
            for (i in 1 until 10){
               res=+i     //该处将逻辑故意写错  应为 +=
               println("i=${i},res=${res}")
            }
            val s:String = StringTo(res)
            Toast.makeText(this,s,Toat.LENGTH.SHORT).show()
        } 
    }
    private fun StringTo(res:String){
        println("将Int转换成String")
        resturn res.roString()
    }
}    

image.png

会掺杂其他方法日志

  • log方式调试
class MainActivty : AppCompatActivity(){
    val TAG = "MainActivity"
    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        button.setOnClickListener {
            var res = 0
            for (i in 1 until 10){
               res=+i     //该处将逻辑故意写错  应为 +=
               Log.d(TAG,"i=${i},res=${res}")
            }
            val s:String = StringTo(res)
            Toast.makeText(this,s,Toat.LENGTH.SHORT).show()
        } 
    }
    private fun StringTo(res:String){
        println("将Int转换成String")
        resturn res.roString()
    }
}    

image.png

筛选条件多:Debug、Info、Worn、Error以及自定义筛选等

可以直接根据key筛选

调试数据较多时,不方便查看,不够灵活

  • debug模式调试

image.png

  • resume progrem: 继续执行
  • step over: 跳入下一行
  • step into: 进入自定义方法,非方法则下一行
  • force step into:进入所有方法,非方法则下一行
  • step out: 跳出方法,且方法执行完成
  • run to cursor: 跳入逻辑的下一个标记点

image.png

debug运行时,会出现提示框,无需操作

案例三:代码丢失||项目问题

  • history
    • 不小心删除代码/文件且已save并退出

右击项目 -> Local History -> Show History -> 选择某一历史右键 -> Revert

image.png

image.png

image.png

image.png

image.png

猜你喜欢

转载自juejin.im/post/7114926062982660103