2.4 KiB
2.4 KiB
C/C++ 程序锁分析
仓库
介绍
deadlock-detect 是一款基于OpenKylin社区kylin-code的拓展插件,用于C/C++程序的死锁检测及锁状态分析,帮助开发者在Linux系统下识别多线程死锁状态、互斥锁自旋锁等状态异常问题,并对程序加锁位置分析。
功能
- C/C++ 多线程程序锁分析
- 可视化观察临界区进入次数、耗时、条件变量等待时长
- 线程退出未释放锁异常
- 可执行程序死锁检测
- 进程死锁检测
- 远程环境进程死锁检测
使用方法
检查依赖
依赖binutils、libc-bin、sshpass软件包
安装方式sudo apt install binutils libc-bin sshpass -y
内核版本在4.19以上,支持BPF,内核选项CONFIG_BPF_EVENTS=y
C/C++ 多线程序锁分析
- 打开目标C/C++工程,点击
终端
->配置任务
选择deadlockdetect: 可执行程序锁检测
task.json文件中自动添加的锁检测任务如下:
{
"type": "deadlockdetect",
"command": "被检测可执行程序",
"args": [
"可执行程序参数(可选)"
],
"options": {
"env": {
"程序执行所需额外环境变量如 DISPALY" : "1"
}
},
"problemMatcher": [],
"label": "deadlockdetect: 可执行程序锁检测"
}
根据实际情况输入待检测程序,其中`args`,`options` 为空时可以删除。有多个检测任务时,可以修改不同的label字段。
- 执行锁检测任务
- 选择
终端
->运行任务
->选择相应锁检测任务
; - 输入当前用户密码;
- IDE终端中会显示被检测程序相关输出;
- 当被测程序终止时,若检测到锁信息会有在相关页面展示;
- 也可选择在终端中右键
终止终端
或选择菜单栏中终端
->终止任务
,结束被测程序执行,若检测到锁信息会有在相关页面展示。
- 选择
进程死锁检测
打开命令面板,选择C/C++程序死锁检测
,默认会打开一个页面,按要求添加进程Pid
、用户密码
即可。
远程进程死锁检测
确保远程主机及用户可以SSH
登录 本地依赖工具sshpass
打开命令面板,选择C/C++程序死锁检测
,默认会打开一个页面,按要求添加进程Pid
、远程用户
、远程IP地址
、远程登录密码
即可。