Android——你可能不知道的Debug細(xì)節(jié)

Android——你可能不知道的Debug細(xì)節(jié)

近期在使用Android Studio對(duì)程序進(jìn)行Debug時(shí),發(fā)現(xiàn)了一個(gè)之前自己一直忽視或者說(shuō)不了解的一個(gè)細(xì)節(jié),特此記錄下來(lái)分享給大家。
開發(fā)中,我對(duì)以下一段代碼進(jìn)行了調(diào)試:

call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
                try {
                    if (response.isSuccessful()) {
                        String result = response.body().string();
                        Gson gson = new Gson();
                        VehicleEntity vehicleEntity = gson.fromJson(result, VehicleEntity.class);
                        if (vehicleEntity == null) {
                            callBack.onNoData();
                        } else {
                            callBack.onSuccess(vehicleEntity);
                        }
                    } else {
                        callBack.onFailure();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    callBack.onFailure();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                callBack.onFailure();
            }
        });

如上述代碼,是關(guān)于一個(gè)網(wǎng)絡(luò)請(qǐng)求的過(guò)程,然后我在debugger視圖中把result添加到watcher:

image

結(jié)果debug過(guò)程中result一直為一個(gè)空的字符串,而我如果不debug直接運(yùn)行程序,則一切正常,當(dāng)時(shí)我以為這是什么奇怪的bug,百思不得其解。
后來(lái)多方詢問(wèn)終于找出了發(fā)生此現(xiàn)象的原因。大家可以看到我在watcher里面輸出的其實(shí)是一個(gè)語(yǔ)句,reslut=response.body.string()。而watcher里的語(yǔ)句,會(huì)在你的debug觸發(fā)第一個(gè)斷點(diǎn)時(shí),就會(huì)嘗試執(zhí)行,也就是說(shuō),在我這個(gè)程序遇到第一個(gè)斷點(diǎn)時(shí),“reslut=response.body.string()”這個(gè)語(yǔ)句就已經(jīng)嘗試執(zhí)行了。而巧就巧在okhttp的response.body.string()方法只能有效調(diào)用一次,所以當(dāng)debug真正執(zhí)行到這一句的時(shí)候,get到的string就已經(jīng)是空值了,并不是什么bug。
所以大家在調(diào)試程序的時(shí)候,打印變量的方式以及斷點(diǎn)的位置都要有所注意和講究,不要在這上面白白耽誤了自己的時(shí)間~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容