代码审查工具Sonar(三)-- 分析c/c++代码

一。安装(详情可参考官网内容http://docs.codehaus.org/pages/viewpage.action?pageId=185073817)

1. c++ plugin(community),这个可以直接从sonar的Update Center安装。装的时候注意了,这个是免费的,还有一个c/c++ analyser plugin是要付费的,别搞错了。

2. cppcheck,专门针对c/c++代码进行静态分析的免费第三方工具,可以直接下载安装http://cppcheck.sourceforge.net/

3. RATS(Rough Auditing Tool for Security),探测代码中潜在的安全问题,下载链接https://code.google.com/p/rough-auditing-tool-for-security/downloads/list

4. Vera++,主要做代码风格的检查,下载链接https://bitbucket.org/verateam/vera/downloads

5. CppNcss,进行复杂度的检查,下载链接http://sourceforge.net/projects/cppncss/files/

6. Python 2.7,下载链接http://www.python.org

7. GCW(GCC for Windows),下载链接http://sourceforge.net/projects/gcw/files/

8. Gcov,下载链接https://github.com/gcovr/gcovr/releases

9. 因为C++代码的推荐分析方式是maven,因此需要安装Maven,下载链接:http://maven.apache.org/download.cgi

添加环境变量MAVEN_HOME指向maven的安装目录,并将%MAVEN_HOME%\bin添加到环境变量path中去。打开cmd窗口,运行命令mvn -version,如能正常显示则表明安装正确。

编辑文件%MAVEN_HOME%\conf\settings.xml,添加如下关于sonar的profile

<profile>

    <id>sonar</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <!-- Example for MySQL-->
    <sonar.jdbc.url>
      jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
    </sonar.jdbc.url>
    <sonar.jdbc.username>sonar</sonar.jdbc.username>
    <sonar.jdbc.password>sonar</sonar.jdbc.password>
      <!-- Optional URL to server. Default value is http://localhost:9000 -->
     < sonar.host.url >
        http://myserver:9000
    </sonar.host.url>
    </properties>
</profile>
添加环境变量MAVEN_OPTS,赋值为 -Xmx1024m -XX:MaxPermSize=512m。

10。 下载sonar的c++ maven插件cxx-maven-plugin,下载链接https://github.com/franckbonin/cxx-maven-plugin

下载之后,在pom.xml所在的目录下运行命令:mvn clean install来安装插件。

二,分析

1. 为项目编写运行maven必须的pom.xml文件。官网上有sample文件http://docs.codehaus.org/display/SONAR/Running+the+analysis

官网的实例完整而繁琐,下面是我们项目正在使用的pom文件片段:

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.carestream.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0.30.0</version>
<packaging>pom</packaging>
<name>sample</name>
<build>
<!-- To define the plugin version in your parent POM -->
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>cxx-maven-plugin</artifactId>
              <version>0.0.5-SNAPSHOT</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cxx-maven-plugin</artifactId>
    <configuration>
 <sourceDirs>
<sourceDir>${basedir}\..\src</sourceDir>
 </sourceDirs>
    </configuration>
<executions>
          <execution>
                <id>cppcheck</id>
                <goals>
                  <goal>cppcheck</goal>
                </goals>
                <configuration>
                  <reportIdentifier>SAMPLE</reportIdentifier>
                </configuration>
           </execution>
           <execution>
                <id>cppncss</id>
<phase>test</phase>
                <goals>
                  <goal>launch</goal>
                </goals>
                <configuration>
                <executable>cmd.exe</executable>
<commandArgs>
/c "cppncss.bat -r -v -x -k -f=cppncss-reports\cppncss-result-SAMPLE.xml ${basedir}/..\src -p=${basedir}/"
</commandArgs>
                </configuration>
              </execution>
              <execution>
                <id>vera++</id>
<phase>test</phase>
                <goals>
                  <goal>launch</goal>
                </goals>
                <configuration>
                  <executable>perl</executable>
                  <commandArgs>
     run_vera++.pl "${basedir}\..\src" "vera++-reports/vera++-result-SAMPLE.xml"
 </commandArgs>
                </configuration>
              </execution>
</executions>
</plugin>
</plugins>
<sourceDirectory>${basedir}\..\src</sourceDirectory>
</build>
<properties>
<sonar.language>c++</sonar.language>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.scm.url>scm:svn:https://shgwp1025/svn/csi/trunk</sonar.scm.url>
</properties>
</project>

其中,run_vera++.pl是用来整理vera++的结果并生成xml格式report文件的perl脚本。注意:为了正确运行vera++,请添加环境变量VERA_ROOT,其路径是scripts目录的父目录。

2. 在pom.xml文件所在的目录内运行命令: mvn clean install

3. 在pom.xml文件所在的目录内运行命令: mvn sonar:sonar

4. 从浏览器登录sonar页面,查看运行结果。

注:使用cppncss时如果发现java heap space错误,打开cppncss安装目录下的bin\cppncss.bat文件,修改第七十一行set EXTRA_JVM_ARGUMENTS=-Xms256m -Xmx512m,将最大heap space从512m增加到1024m。

你可能感兴趣的:(代码审查工具Sonar(三)-- 分析c/c++代码)