deadlock-detect/detect-plugin/README.md

2.4 KiB
Raw Permalink Blame History

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字段。
  • 执行锁检测任务
    1. 选择终端->运行任务->选择相应锁检测任务;
    2. 输入当前用户密码;
    3. IDE终端中会显示被检测程序相关输出;
    4. 当被测程序终止时,若检测到锁信息会有在相关页面展示;
    5. 也可选择在终端中右键终止终端 或选择菜单栏中终端->终止任务,结束被测程序执行,若检测到锁信息会有在相关页面展示。

进程死锁检测

打开命令面板,选择C/C++程序死锁检测,默认会打开一个页面,按要求添加进程Pid用户密码即可。

远程进程死锁检测

确保远程主机及用户可以SSH登录 本地依赖工具sshpass 打开命令面板,选择C/C++程序死锁检测,默认会打开一个页面,按要求添加进程Pid远程用户远程IP地址远程登录密码即可。