更新时间:2021-07-08 GMT+08:00
分享

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

相关文档