deadlock-detect/detect-plugin
Your Name 0b2723f90f 注入方式的锁分析 2022-11-22 17:37:56 +08:00
..
.vscode fix build issue 2022-09-13 16:18:48 +08:00
detect-tools 注入方式的锁分析 2022-11-22 17:37:56 +08:00
src 注入方式的锁分析 2022-11-22 17:37:56 +08:00
static 添加检测任务模块及死锁检测bug修改 2022-10-12 15:12:11 +08:00
.eslintrc.json fix build issue 2022-09-13 16:18:48 +08:00
.vscodeignore fix build issue 2022-09-13 16:18:48 +08:00
.yarnrc fix build issue 2022-09-13 16:18:48 +08:00
LICENSE.txt fix build issue 2022-09-13 16:18:48 +08:00
README.md 修改readme描述问题 2022-10-20 14:47:37 +08:00
package.json 动态库注入方式锁分析 2022-11-20 16:15:29 +08:00
package.nls.json 添加检测任务模块及死锁检测bug修改 2022-10-12 15:12:11 +08:00
tsconfig.json modify project struct 2022-09-12 15:50:29 +08:00
vsc-extension-quickstart.md modify project struct 2022-09-12 15:50:29 +08:00
webpack.config.js modify project struct 2022-09-12 15:50:29 +08:00
yarn.lock 添加检测任务模块及死锁检测bug修改 2022-10-12 15:12:11 +08:00

README.md

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地址远程登录密码即可。