
# dlock
#### 命令功能
dlock命令用于检查系统中的任务是否存在互斥锁（Mutex）死锁，其会输出系统中所有任务持有互斥锁的信息。
#### 命令格式
dlock
#### 使用指南
- 该命令需使能LOSCFG_DEBUG_DEADLOCK，使能方式可以通过make menuconfig在菜单项中开启Enable Mutex Deadlock Debugging。
  ```
  Debug ---> Enable a Debug Version ---> Enable Debug LiteOS Kernel Resource ---> Enable Mutex Deadlock Debugging
  ```
  
- dlock检测输出的是在超过时间阈值（默认为10min）内没有获取到互斥锁的任务信息，并不能代表这些任务都发生了死锁，需要通过互斥锁信息及任务调用栈信息进一步确认。
 
#### 使用实例
举例：
输入dlock。
#### 输出说明
当系统中的任务无死锁时，dlock输出如下：
```
Huawei LiteOS # dlock
Start mutexs deadlock check:
Task_name:agenttiny_task, ID:0x0, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:SerialShellTask, ID:0x4, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
-----------End-----------
```
当系统出现死锁时，dlock输出如下：
```
Huawei LiteOS # dlock
Start mutexs deadlock check:
Task_name:SendToSer, ID:0x0, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:WowWriteFlashTask, ID:0x3, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:system_wq, ID:0x4, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:app_Task, ID:0x5, holds the Mutexs below:
<Mutex0 info>
Ptr handle:0x8036104c
Owner:app_Task
Count:1
Pended task: 0. name:mutexDlock_Task, id:0xc
*******backtrace begin*******
********backtrace end********
Task_name:Swt_Task, ID:0x6, holds the Mutexs below:
null
*******backtrace begin*******
*******backtrace begin*******
traceback 0 -- lr = 0x4    fp = 0x0
********backtrace end********
Task_name:IdleCore000, ID:0x7, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:eth_irq_Task, ID:0xb, holds the Mutexs below:
null
*******backtrace begin*******
********backtrace end********
Task_name:mutexDlock_Task, ID:0xc, holds the Mutexs below:
<Mutex0 info>
Ptr handle:0x80361060
Owner:mutexDlock_Task
Count:1
Pended task: 0. name:app_Task       , id:0x5
*******backtrace begin*******
********backtrace end********
-----------End-----------
```
图1
以上各输出项含义如下：
- Task_name:xxx, ID:xxx, holds the Mutexs below：表示疑似死锁的任务名和ID，后面几行信息是该任务持有的各个互斥锁信息，如果为"null"表示该任务并没有持有互斥锁。
- \<MutexN info\>：后面几行是该互斥锁的详细信息，包括：
  
  | 输出项         | 说明                      |
  |:---|:---|
  | Ptr handle  | 该互斥锁的控制块地址              |
  | Owner       | 持有该互斥锁的任务名              |
  | Count       | 该互斥锁的引用计数               |
  | Pended Task | 正在等待该互斥锁的任务名，如果没有则为null |
     
  
 
