調(diào)試鴻蒙App源代碼的兩種方式
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
調(diào)試是開發(fā)App的必備技能,畢竟任何一個比較復雜的App都不可能一次編碼成功,如果App的預期與自己期望的不同,或由于某些原因異常中斷,就需要查中斷的原因,這些都需要調(diào)試程序。
調(diào)試程序有多種方法,比較常用的有設(shè)置斷點和輸出日志兩種方式,本文將詳細介紹這兩種調(diào)試App的方式。
1. 設(shè)置斷點
如果認為需要跟蹤的代碼或bug在某行代碼的附近,可以單擊該行代碼前面的部分為該行設(shè)置斷點,這時會在這行代碼前面出現(xiàn)一個紅點,如圖1所示。
圖1 設(shè)置斷點
然后點擊上方工具欄中如圖2所示的調(diào)試運行按鈕。
圖2 調(diào)試運行按鈕
如果未遇到斷點,點擊該按鈕會正常運行程序,一旦遇到斷點,程序執(zhí)行就會在斷點處停止執(zhí)行。知道按F7或F8鍵才繼續(xù)一行一行執(zhí)行程序,以便監(jiān)控程序中的相關(guān)變量的狀態(tài)。F7表示Step Into,F(xiàn)8表示Step Over。其中Step Into表示會跟蹤到方法內(nèi)部,例如,當前正在執(zhí)行一個方法,按F7鍵會繼續(xù)跟蹤到方法內(nèi)部,然后繼續(xù)一行一行代碼執(zhí)行。Step Over會將方法當做一行代碼執(zhí)行,不會跟蹤到方法內(nèi)部。所以如果認為某一個方法肯定沒有問題,就按F8,如果認為該方法可能會有一些問題,就按F7。
調(diào)試過程的效果如圖3所示。我們可以看到,在下方的Variables視圖中會顯示相關(guān)變量的當前值。

2. 輸出日志
另外一種調(diào)試代碼的方式就是輸出日志,可以直接使用System.out.println(...)的方式將信息輸出到LogCat視圖中,例如,執(zhí)行下面的代碼,會在LogCat視圖中看到如圖4所示的信息。
System.out.println("hello world");
圖4在LogCat視圖中輸出的調(diào)試信息
HarmonyOS還提供了另外一種輸出日志的方式,這就是HiLog類,該類提供了多個靜態(tài)方法,用于輸出不同級別的日志信息。這些靜態(tài)方法如表1所示。
表1 HiLog類中用于輸出日志信息的方法

這5個方法的參數(shù)完全相同,例如,error方法的原型如下:
- public static int error(HiLogLabel label, String format, Object... args);
其中l(wèi)abel參數(shù)表示輸出日志的相關(guān)信息,類型是HiLogLabel對象,format表示要輸出的日志文本(可以包括格式化占位符),args參數(shù)表示格式化的參數(shù)值,是可選的參數(shù)。
使用輸出日志方法的案例如下:
- HiLogLabel label = new HiLogLabel(HiLog.LOG_APP ,223, "MY_TAG");
- HiLog.error(label, "這是一行錯誤信息,原因:%{private}s","Url不可訪問");
- HiLog.warn(label,"這是一個警告,原因是:%{public}s", "變量的值可能是負數(shù)");
其中HiLogLabel構(gòu)造方法的第1個參數(shù)表示日志類型,目前只能是HiLog.LOG_APP,后續(xù)會開放更多的日志類型。第2個參數(shù)是domain,就是一個整數(shù)類型,第3個參數(shù)是日志的標簽。Domain和日志標簽都會以某種形式顯示在日志信息上。
在輸出日志信息時,運行格式化日志信息,也就是為日志信息指定占位符。占位符需要在%和符號(如s、d)之間加{private}或{public},如果加{private},輸出的信息就是
執(zhí)行這段代碼,會在HiLog視圖中輸出如圖5所示的日志信息。
使用error方法會輸出深紅色的日志信息,日志的內(nèi)容與其他方法輸出的日志內(nèi)容相同。不過要注意,使用HiLog的相關(guān)方法輸出的日志分為5個級別,分別是DEBUG(調(diào)試)、INFO(信息)、WARN(警告)、ERROR(錯誤)、FATAL(致命錯誤)。這5個級別分別用5個整數(shù)表示,這些整數(shù)都在HiLog類中定義,代碼如下:
- public final class HiLog {
- public static final int DEBUG = 3;
- public static final int INFO = 4;
- public static final int WARN = 5;
- public static final int ERROR = 6;
- public static final int FATAL = 7;
- … …
- }
如果要在HiLog視圖中過濾這些級別的信息。只有不大于當前級別的信息才會給顯示。例如,要過濾WARN信息,只有DEBUG、INFO和WARN這3類信息才會被顯示,由于ERROR和FATAL的值逗比WARN大,所以這兩類信息不會被顯示。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz