dingo hunter
1.0.0
这是一个静态分析仪,用于建模并发并在GO代码中找到死锁。该工具的主要目的是从GO源代码中推断出其并发模型以两种格式中的任何一种:
然后将推断的模型传递给单独的工具进行正式分析。在两种方法中,我们都将文献中已知的系统应用于会话类型,以寻找潜在的沟通不匹配以抢占潜在的僵局。
可以通过go get安装dingo-hunter ,需要GO版本go1.7.1 。
$ go get -u github.com/nickng/dingo-hunter
基于两项研究工作,有两种方法(CFSM和MIGO类型)。
该方法生成CFSM作为程序中产卵的Goroutines的模型,然后将CFSMS传递到合成工具中以构建全局编排并检查有效性(请参阅论文)。
首先通过检查子模块来安装合成工具gmc-synthesis :
$ cd $GOPATH/src/github.com/nickng/dingo-hunter; git submodule init; git submodule update
$ cd third_party/gmc-synthesis
关注README安装和构建gmc-synthesis ,即
$ cabal install MissingH split Graphalyze
$ ./getpetrify # and install to /usr/local/ or in $PATH
$ ghc -threaded GMC.hs --make && ghc --make BuildGlobal
在example/local-deadlock/main.go上运行CFSM生成:
$ dingo-hunter cfsms --prefix deadlock example/local-deadlock/main.go
输出应说2个通道,然后在提取的CFSM上运行合成工具
$ cd third_party/gmc-synthesis
$ ./runsmc inputs/deadlock_cfsms 2 # where 2 is the number of channels
SMC check行指示全局图是否满足SMC(即安全)。
这种方法生成了Migo类型,这是本工作中引入的行为类型,以通过在通道使用情况下称为围栏的限制来检查安全性和行为(请参阅论文)。
Migo类型的检查器可在昵称/锣上找到,请按照说明来构建该工具:
$ git clone ssh://github.com/nickng/gong.git
$ cd gong; ghc Gong.hs
在example/local-deadlock/main.go上运行Migo类型生成。
$ dingo-hunter migo example/local-deadlock/main.go --no-logging --output deadlock.migo
$ /path/to/Gong -A deadlock.migo
这是一个研究原型,可能对所有GO源代码不起作用。请提出一个看起来像错误的问题的问题。
Dingo-Hunter已获得Apache许可证的许可