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登录即可。
-
确认删除下面这个目录:`<projects_root>/data/<project>__shared`
-
删除可能遗留的 lucene_index目录:
<projects_root>/lucene_index/`<project>`
- 删除项目文件夹:
<projects_root>/project/`<project>`
- 重启服务
kwservice -r <projects_root> restart