> 程序員Feri一名12年+的程序員,做過開發(fā)帶過團隊創(chuàng)過業(yè),擅長Java、嵌入式、鴻蒙、人工智能等,專注于程序員成長那點兒事,希望在成長的路上有你相伴!君志所向,一往無前!
---
# 1.預(yù)覽+日志的方式debug
這種方式只能進行基本數(shù)據(jù)類型的打印,適合簡單調(diào)試
- 原始類型,也就是非字符串需要String() 或者 .toString()
- 對象類型,需要JSON.stringify轉(zhuǎn)換
- 預(yù)覽器-沒事,模擬器-打印必須加前綴 **否則找不到**
代碼示例:
```
@Entry
@Component
struct Index {
//記錄 點擊次數(shù)
@State cs: number = 1
build() {
Column() {
Text('點擊次數(shù)=' + this.cs)
Button('打印調(diào)試').onClick(() => {
this.cs++
// console.log(this.cs) 報錯?為什么呢?
console.log(this.cs.toString())
console.log(String(this.cs))
// console.log({id:1,age:22}) 報錯?
console.log(JSON.stringify({ id: 1, age: 22 }))
// 模擬器必須加前綴
console.log('Feri ' + this.cs)
})
}
}
}
```
# 2.斷點調(diào)試
以模擬器為例,具體實現(xiàn)步驟:
**第一步:編碼**
```
@Entry
@Component
struct Index {
@State message: string='Hello World'
build() {
Row(){
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width("100%")
}
.height("100%")
}
}
```
**第二步:打斷點**

**第三步:點擊右上角開始調(diào)試**
點擊Debug圖標(biāo),開始調(diào)試。如果您的應(yīng)用已經(jīng)在運行,請點擊Attach Debugger to Process圖標(biāo)!
當(dāng)應(yīng)用運行到代碼處,會在代碼處停住,并高亮顯示。

## Debug相關(guān)功能鍵使用
| **按鈕** | 名稱 | **功能**| **快捷鍵** |
| ------------------------------------------------------------ | --------------- | ------------------------------------------------------------ | ---------------------------------------------- |
|
| Resume Program | 當(dāng)程序執(zhí)行到斷點時停止執(zhí)行,單擊此按鈕程序繼續(xù)執(zhí)行。 | **F9**(macOS為**Option+Command+R**) |
| | Step Over | 在單步調(diào)試時,直接前進到下一行(如果在函數(shù)中存在子函數(shù)時,不會進入子函數(shù)內(nèi)單步執(zhí)行,而是將整個子函數(shù)當(dāng)作一步執(zhí)行)。 | **F8**(macOS為**F8**) |
|
| Step Into | 在單步調(diào)試時,遇到子函數(shù)后,進入子函數(shù)并繼續(xù)單步執(zhí)行。 | **F7**(macOS為**F7**) |
|
| Force Step Into | 在單步調(diào)試時,強制進入方法。 | **Alt+Shift+F7**(macOS為**Option+Shift+F7**) |
|
| Step Out | 在單步調(diào)試執(zhí)行到子函數(shù)內(nèi)時,單擊Step Out會執(zhí)行完子函數(shù)剩余部分,并跳出返回到上一層函數(shù)。 | **Shift+F8**(macOS為**Shift+F8**) |
| | Stop | 停止調(diào)試任務(wù)。 | **Ctrl+F2**(macOS為**Command+F2**) |
|
| Run To Cursor | 斷點執(zhí)行到鼠標(biāo)停留處。 | **Alt+F9**(macOS為**Option+F9**) |
# 3 hilog實戰(zhàn)使用
在應(yīng)用開發(fā)過程中,可在關(guān)鍵代碼處輸出日志信息。在運行應(yīng)用后,通過查看日志信息來分析應(yīng)用執(zhí)行情況(如應(yīng)用是否正常運行、代碼運行時序、運行邏輯分支是否正常等)。
系統(tǒng)提供不同的API供開發(fā)者調(diào)用并輸出日志信息,即HiLog與console。
hilog日志打印最多打印4096字節(jié),超出限制文本將被截斷。
具體示例代碼如下所示:
```
import { hilog } from '@kit.PerformanceAnalysisKit';
@Entry
@Component
struct Index {
build() {
Column() {
Button('打印調(diào)試').onClick(() => {
// 鋪墊1:十六進制(簡寫為hex或下標(biāo)16)是一種基數(shù)為16的計數(shù)系統(tǒng),是一種逢16進1的進位制。通常用數(shù)字0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F表示10~15,這些稱作十六進制數(shù)字。
// 鋪墊2:計算機信息都是0和1表示的也就是二進制,單對于人類來說二進制太長 -> 需要做精簡,因此轉(zhuǎn)化為十六進制 hexadecimal 簡稱 hex
// 鋪墊3:在 C 語言中,十六進制數(shù)以”0x”或“0X”開頭,A表示10,F(xiàn)表示16。
// 鋪墊4:此后00000000~11111111就可以用0x00~0xFF來表示了。
// info函數(shù)第1個參數(shù) domain:用于指定輸出日志所對應(yīng)的業(yè)務(wù)領(lǐng)域,取值范圍為0x0000~0xFFFF,開發(fā)者可以根據(jù)需要進行自定義。 例如win藍屏代碼0x00000ffff是一個錯誤代碼
// info函數(shù)第1個參數(shù) tag:用于指定日志標(biāo)識,可以為任意字符串,建議標(biāo)識調(diào)用所在的類或者業(yè)務(wù)行為。tag最多為31字節(jié),超出后會截斷,不建議使用中文字符,可能出現(xiàn)亂碼或者對齊問題。
hilog.info(0xFF00, "slj", 'hello');
})
}
}
}
```
封裝起來用相對方便后期維護
實戰(zhàn)推薦@open/log
示例代碼,如下所示:
```
ohpm install @open/log
import log from '@open/log';
log.info(數(shù)據(jù))
```
>好啦,關(guān)于HarmonyOS NEXT開發(fā)實戰(zhàn)調(diào)試技巧就說到這里啦。
本文來自博客園,作者:程序員Feri,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/feiyi/p/18788718
浙公網(wǎng)安備 33010602011771號