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-----------
以上各输出项含义如下:
- Task_name:xxx, ID:xxx, holds the Mutexs below:表示疑似死锁的任务名和ID,后面几行信息是该任务持有的各个互斥锁信息,如果为“null”表示该任务并没有持有互斥锁。
- <MutexN info>:后面几行是该互斥锁的详细信息,包括:
输出项
说明
Ptr handle
该互斥锁的控制块地址
Owner
持有该互斥锁的任务名
Count
该互斥锁的引用计数
Pended Task
正在等待该互斥锁的任务名,如果没有则为null