Eclipse CDT(macOS)にPVS-Studioを組み込みました

LinuxのさまざまなIDE( EclipseAnjuta )にPVS-Studioを埋め込むことに関する一連の記事が登場した後、Eclipse for macOSで開発されたプロジェクトをテストするためにPVS-Studioを起動したいという要望がありました。 しかし、PVS-Studio開発者はまだmacOSのバージョンをリリースする予定はありません。 さて、今のところこのギャップを埋めてください。







与えられた:





チャレンジ:





実際にはいくつかの解決策があります。









私はDocker、tkに立ち寄った。 仮想マシンは多くのリソースを消費するため、理論的には、たとえばNFS + SSHバンドルを使用して別のコンピューターでチェックを整理することは可能ですが、動作が遅すぎるのではないかと思います。







Dockerにも短所がありました。 むしろ、1つの大胆な-私はDockerについて何も知りませんでした。 Habréには紹介記事があります。 彼らの助けを借りて、アイデアを実装するのに1日半かかりました。







クイックスタートには数分しかかかりません。 スクリプトとEclipceを構成する必要があります。







スクリプト



5つのファイルが必要です。







run_once.sh
#!/bin/sh echo "Fetching last timurey/docker-pvs image" /usr/local/bin/docker pull timurey/docker-pvs:latest echo "Testing" /usr/local/bin/docker run -i timurey/docker-pvs echo "Ready to run"
      
      





eclipse-pvs.sh
 #!/bin/bash debug() { if [ "$debug" == "1" ]; then d=$1 echo $d fi } usage() { echo "usage: eclipse-pvs [[-w <path> -n <name> [-d]]| -h]" echo "where args:" echo " -w(--workspace) <path> set path to workspace directory" echo " -n(--projectname) <name> project name in eclipse" echo " -c(--config) <config> config descriptor (Debug or Release)" echo " -d(--debug) some debuging info" echo " -h(--help) show this message" } clean () { debug "Clean" make -f makefile clean exit } analyze() { debug "running command:" debug "/usr/local/bin/docker run --security-opt seccomp:\"""$workspace/docker-pvs/strace.json""\" -v \"""$workspace""\":/root/workspace -i timurey/docker-pvs /root/workspace/docker-pvs/client.sh -n \"""$projectname""\" -c \"""$config""\"" /usr/local/bin/docker run --security-opt seccomp:"$workspace/docker-pvs/strace.json" -v "$workspace":/root/workspace -i timurey/docker-pvs /root/workspace/docker-pvs/client.sh -n "$projectname" -c "$config" exit } while [ "$1" != "" ]; do case $1 in -w | --workspace ) shift workspace=$1 ;; -c | --config ) shift config=$1 ;; -n | --projectname ) shift projectname=$1 ;; -d | --debug ) debug=1 ;; -h | --help ) usage exit ;; clean ) clean exit esac shift done if [ "$workspace" != "" ]; then if [ "$projectname" != "" ]; then if [ "$config" != "" ]; then debug "workspace path: \"$workspace\"" debug "project name: \"$projectname\"" debug "config description: \"$config\"" analyze else echo "config description is not defined" >&2 exit fi else echo "project name path is not defined" >&2 exit fi else echo "workspace is not defined" >&2 exit fi
      
      





client.sh
 #!/bin/bash while [ "$1" != "" ]; do case $1 in -n | --projectname ) shift projectname=$1 ;; -c | --config ) shift config=$1 ;; esac shift done if [ "$projectname" != "" ]; then TEMPLOG=$(tempfile) cd "/root/workspace/$projectname/$config" #   `strace`,      : pvs-studio-analyzer trace -- make -f makefile all 2>&1 | sed '/strace: umovestr:/d' - pvs-studio-analyzer analyze --compiler arm-none-eabi-gcc -o "$TEMPLOG" --cfg /root/workspace/docker-pvs/pvs-studio.cfg #   ,       : RC=$(plog-converter -t errorfile "$TEMPLOG" | sed '/The documentation for all/d' -) rm -f "$TEMPLOG" echo "$RC" fi
      
      





strace.json
 { "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ { "name": "strace", "action": "SCMP_ACT_ERRNO" } ] }
      
      





pvs-studio.cfg
 exclude-path = /usr/arm-none-eabi/include platform = linux64 preprocessor = gcc analysis-mode = 4 sourcetree-root = /root/workspace
      
      





Eclipseは、プロジェクトが保存されているワークスペースディレクトリを使用します。 その中にdocker-pvsディレクトリを作成し、上記のすべてのファイルをそこに配置します。 実行可能なスクリプトを作成します。







 $ chmod +x run_once.sh eclipse-pvs.sh client.sh
      
      





日食



コンパイル時にアナライザーを実行します。 1つのバージョンのコンパイラーをコンテナーとEclipseで使用することが望ましいです。 イメージにはバージョン5-2016-q3(2016-09-19から)が含まれているため、launchpad.netからmacOSバージョン5-2016-q3(2016-09-28から)をダウンロードしてインストールします。







プロジェクトのプロパティで、デバッグに基づいて新しい構成を作成します







構成を管理する



クリック可能







次に、新しい構成のオプションで:







1. 「デフォルトのビルドコマンドを使用」のチェックを外します







2. Buildコマンドで、次のコマンドを入力します。







 ${workspace_loc}/docker-pvs/eclipse-pvs.sh -w "${workspace_loc}" -n ${ProjName} -c Debug -d
      
      





3. Makefileの自動生成を祝う







C / C ++ビルド



クリック可能







プロジェクトのプロパティを閉じ、新しく作成された構成をアクティブにし、







⌘+ B



クリック可能







どのように機能しますか?



チーム







 ${workspace_loc}/docker-pvs/eclipse-pvs -w "${workspace_loc}" -n ${ProjName} -c Debug -d
      
      





スクリプトを実行し、次のパラメーターをスクリプトに渡します。









eclipse-pvs.sh



スクリプトeclipse-pvs.sh



、必要なパラメーターを確認した後、ドッカーを起動します







 /usr/local/bin/docker run --security-opt seccomp:"$workspace/docker-pvs/strace.json" -v "$workspace":/root/workspace -i timurey/docker-pvs /root/workspace/docker-pvs/client.sh -n "$projectname" -c "$config"
      
      





さらにいくつかのオプションがあります。









自分で画像を組み立てたい人のために:







Dockerfile
 FROM ubuntu:14.04 RUN apt-get update && apt-get install -y strace software-properties-common cmake wget \ && add-apt-repository ppa:team-gcc-arm-embedded/ppa \ && apt-get update && apt-get install -y gcc-arm-embedded RUN wget http://files.viva64.com/pvs-studio-6.11.20138.1-amd64.deb RUN dpkg -i pvs-studio-6.11.20138.1-amd64.deb RUN rm pvs-studio-6.11.20138.1-amd64.deb RUN echo Asia/Yekaterinburg >/etc/timezone && ln -sf /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
      
      





結論の代わりに



Web開発者だけがDockerを使用しているようです。 しかし、これはそうではありません。 Dockerは、マイクロコントローラーを含むC / C ++の開発にも使用できます。








All Articles