kw常用命令

bash 复制代码
# Klcowork 服务端

## 服务端管理

启动服务: `kwservice -r <path_to_projects_root> start`

停止服务:`kwservicke -r <path_to_projects_root> stop`

重启服务:`kwservice -r <path_to_projects_root> restart`

查看服务运行状态:`kwservice -r <path_to_projects_root> check`

## 服务端分析流程

创建项目:`kwadmin --url http://<kw_host>:<kw_port> create-project <项目名称>`

获取 buildspec (*.out 文件):

* C/C++:`kwinject -o kwinject.out <你的编译命令>`

执行分析:`kwbuildproject --url http://<kw_host>:<kw_port>/<项目名称> -f -o tables kwinject.out`

上传分析结果:`kwadmin --url http://<kw_host>:<kw_port> load <项目名称> tables`

# Klocwork 客户端

## 客户端分析流程

创建项目:`kwcheck create --license-host xx.xx.xx.xx --license.port xxxxx [--host xx.xx.xx.xx --port xxxx --project xxxxx]`

* [... ] 中为选填内容

获取 buildspec (*.out 文件):

* C/C++:`kwinject -o kwinject.out <你的编译命令>`

导入分析配置:`kwcheck import xxx.out xxx.pconf xxx.mconf`

执行分析:`kwcheck run`

导出分析结果:`kwcheck list -F detailed --report report.txt`

# 不同语言项目获取buildspec (*.out 文件)

***获取buildspec 前,请先执行 clean***

## C/C++ 项目采集 buildspec

```
<clean命令>

kwinject -o kwinject.out <编译命令> 
```

例如:

```
make clean

kwinject -o kwinject.out make 
```

## Java 项目采集 buildspec

### Ant 项目

对于ant项目,进到被测项目配置文件(build.xml)所在路径下执行如下命令进行编译参数采集;

```
ant clean
kwant <build_target>
```

### Maven 项目

对于maven项目,进到被测项目配置文件(pom.xml)所在路径下执行如下命令进行编译参数采集;

```
mvn clean
kwmaven <build_target>
```

### Gradle 项目

对于gradle项目,进到被测项目配置文件(build.gradle)所在路径下执行如下命令进行编译参数采集;

```
gradle clean
kwgradle  <build_target>
```

## C# 项目采集 buildspec

### 使用kwinject命令采集

命令行进到被测项目工程文件(.sln、.csproj)所在路径下,使用如下命令进行编译参数采集:

```
kwinject --overwrite msbuild <csproj_file> /t:Rebuild /p:UseSharedCompilation=false /p:ProduceReferenceAssembly=false
```

参数说明:

* -o 用来指定生成的out文件的名字;
* <csproj_file>:为C#工程文件, 即.csproj文件或者.sln文件;

### 使用kwcsprojparser命令采集

命令行进到被测项目工程文件(.sln、.csproj)所在路径下,使用如下命令进行编译参数采集:

`kwcsprojparser -o kwinject.out  <csproj_file>  -c  "build_config"`

参数说明:

* <csproj_file>:为C#工程文件 即.csproj文件或者.sln文件;
* "build_config":为C#工程的编译配置 Debug|Win32或者Release|Win32,如果不知道有哪些编译配置,请用如下命令查看:`kwcsprojparser <csproj_file>  -lc`

### .NET Core 工程

#### windows:

```
kwinject dotnet msbuild <csproj_file> /p:UseSharedCompilation=false /p:ProduceReferenceAssembly=false
```

#### linux:

```
kwinject sh -c 'dotnet msbuild <csproj_file> /t:Rebuild /p:UseSharedCompilation=false /p:ProduceReferenceAssembly=false /NodeReuse:false'
```


## Python 项目采集 buildspec

Klocwork 2021.3 版本开始支持Python语言代码的分析,Klocwork 提供了 kwpyspec 工具 用于提取 Python 语言代码的编译参数,生成 kwpyspec.out 文件。

 `kwjsspec  -o  kwjsspec.out  ./src`

其中:`./src`为源码路径。

用户还可以按照项目的实际运行环境给出详细的参数。例如:

`kwpyspec --py-version python3 ./src`

## JavaScript 项目采集 buildspec

Klocwork 2021.2 版本开始支持Javascript语言代码的分析,Klocwork 提供了kwjsspec 工具 用于提取Javascript语言代码的编译参数,生成kwjsspec.out文件。

`kwjsspec  -o  kwjsspec.out  ./src`

其中:`./src`为源码路径。

用户还可以按照项目的实际运行环境给出详细的参数。例如:

`kwjsspec -e node -e es6 -e browser -v 2018 -m --typescript -w react --ignores-file joplin.ignore ./src`

上例中的参数及含义如下:

| 参数                                                                        | 含义                    | 取值                                           |
| --------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------- |
| --environment, -e                                                           | javascript 程序类型     | amd, applescript, atomtest, browser, commonjs, |
| embertest, es2017,es2020, es2021, es6, greasemonkey, jasmine, jest, jquery, |                         |                                                |
| meteor, mocha, mongo, nashorn, node, phantomjs, prototypejs, protractor,    |                         |                                                |
| qunit, serviceworker, shared-node-browser, shelljs, webextensions, worker   |                         |                                                |
| --version,-v                                                                | ECMA 版本               | 默认版本是12                                   |
| --use-modules,-m                                                            | 是否使用JavaScript 模块 | -                                              |
| --typescript, -t                                                            | 是否使用typescript      | -                                              |
| --framework,-w                                                              | 使用的JavaScript框架    | react, vue                                     |
| --ignores-file,-x                                                           | 要忽略的文件或目录      | -                                              |
bash 复制代码
# Klcowork 配置文件

1. Klocwork 服务配置文件:`<安装位置>/projects_root/config/admin.conf`
2. Klocwork 编译器配置文件:`<安装位置>/config/kwfilter.conf`
3. Klocwork 数据库配置文件:`<安装位置>/config/kwmysql.ini`
4. Klocwork 运行内存参数配置文件:`<安装位置>/config/java_wrappers_memory.conf`
5. Klocwork 检查器分类配置文件:`<安装位置>/taxonomies/`

# Klocwork 日志文件

1. 服务端日志
   1. license 服务运行日志:`<安装位置>/projects_root/projects_root/logs/license.log`
   2. database 服务运行日志:`<安装位置>/projects_root/projects_root/logs/database.log`
   3. Klocwork 服务运行日志:`<安装位置>/projects_root/projects_root/logs/klocwork.log`
2. 服务端分析过程日志
   1. 分析过程日志:`<分析执行位置>/<tables>/build.log`
   2. 上传过程日志:`<分析执行位置>/<tables>/kwloaddb.log`
3. 客户端分析日志
   1. 分析过程日志:`<分析执行位置>/.kwlp/workingcache/tables/build.log`

# 手动开启debug模式获取日志

Klocwork 的命令支持debug 模式, 使用方式如下:

`<kw命令> --debug <其余部分> >debug.log 2>&1`

例如:

`kwinject --debug -o kewinject.out make >debug.log 2>&1`

`kwbuild --debug --url htpp://<kw_host>:<kwport>/<kw_project> -f -o tables kewinject.out  >debug.log 2>&1`
bash 复制代码
# 恢复数据库

## 方法一

1. 停服务:

```
```

`kwservice -r <projects_root> stop`

2) 确认所有服务都停掉 .

```
kwservice -r <projects_root> check
```


3) 备份 projects_root 目录.
4) 重命名每一个项目的cache文件夹:

```
```

`<projects_root>\projects\<project>\cache`

```
to
```


```
```

`<projects_root>\projects\<project>\cache_old`

5) 单独启动数据库服务 (如果 license 服务在本地,需要同时启动 license 服务):

```
```

`kwservice -r <projects_root> start database`

6) 执行以下命令 (please run them twice on each of the projects to fix them):

```
```

`cd D:\Klocwork\Server XX.X`

```
_
```

`jvm\bin\java -cp class/dbvalidate.jar com.klocwork.dbvalidate.CleanupXXX -r d:\Klocwork\projects_root --project <project_name>`

如果你使用的是 KW 2019.3, "CleanupXXX" 就是 "Cleanup193"

7) 重启klocwork服务`kwservice -r <projects_root> restart`

## 方法二

1. 停止KW服务;
2. 备份好现有 projects_root 目录;
3. 修改 kwmysql.ini 文件,设置:innodb_force_recovery=1;
4. 重新启动 kw 服务
bash 复制代码
# 如何手动删除不正确的项目名

0. 停掉所有服务,并使用下面的命令确认:`kwservice -r <projects_root> check`

1. 备份整个 projects root

2. 删除全部的<projects_root>/data/`<project>`_build_x
   确保项目名是正确的,可以参考<projects_root>/project/`<project>`/`<project>`.conf,
   数据库中的项目名称与文件系统中的`<project>` 名称一致,可能与页面不一致

3. 单独启动数据库:`kwservice -r <projects_root> start database`

4. mysql 数据库中删除该项目

```
<klocwork server>/3rdparty/bin/mysql -ukw -P <db port> -h <server hostname> --protocol=tcp -e "drop database <project__shared>;"
```

`<db port>` 端口号根据"kwservice -r <projects_root> check"的结果填写

5. 确认删除下面这个目录:`<projects_root>/data/<project>__shared`

6. 删除可能遗留的 lucene_index目录:
   <projects_root>/lucene_index/`<project>`

7. 删除项目文件夹:
   <projects_root>/project/`<project>`

8. 重启服务
   kwservice -r <projects_root> restart
bash 复制代码
# 找回 Klocwork管理员权限

1. 停止 Klocwork 服务:`kwservice -r <path_to_projects_root> stop`
2. 在Klocwork安装路径下找到 admin.conf
3. 在该文件里增加一行:`init.admin.name = Administrator`
   "Administrator" 这个临时用户名不能与已有用户名重复
4. 停止 Klocwork 服务:`kwservice -r <path_to_projects_root> start`
5. 重新使用adminidtrator登录即可。
  1. 确认删除下面这个目录:`<projects_root>/data/<project>__shared`

  2. 删除可能遗留的 lucene_index目录:

<projects_root>/lucene_index/`<project>`

  1. 删除项目文件夹:

<projects_root>/project/`<project>`

  1. 重启服务

kwservice -r <projects_root> restart