本主题可帮助您解决 C/C++test 可能遇到的问题。
一般
分析哪些文件?如何分析头文件?
C/C++test 直接分析 C/C++ 源文件,间接分析头文件。根据当前选择,C/C++test 将分析所有 C/C++ 源文件,并报告所选内容中所有源文件和头文件的违规情况(仅针对源文件包含的头文件)。
示例:
- 如果选择了项目根目录,则将分析所有源文件(和间接头文件)。
- 如果选择了一个源文件,则仅分析该文件(不分析头文件)。
- 如果选择了单个源文件和单个头文件,则将分析源文件(以及头文件(如果源文件包含))。
- 如果只选择了一个头文件,那么 C/C++test 将跳过分析(不直接分析头文件)。
如何修改 C/C++test 控制台的详细程度?
选择 Parasoft> 首选项, 选择 控制台 然后选择所需的详细程度(高,正常,低)。
高详细度 | 正常详细度 | 低详细度 | |
---|---|---|---|
有关当前 步骤名称和状态的基本信息(完成,失败,最新) | Yes | Yes | Yes |
错误 | Yes | Yes | Yes |
警告 | Yes | No | No |
命令行 | Yes | Yes | No |
在静态分析和单元测试执行期间打印出违规 情况 | Yes, full-format | Yes, short-format | No |
如果 C/C++test 内存不足怎么办?
您可以通过指定-Xmx
设置的值,使用 CPPTEST_ENGINE_EXTRA_ARGS 选项自定义分配的内存量。当您执行静态分析或将结果报告给 DTP 时,这可能特别有用。有关详细信息,请参见配置高级选项。
如果 C/C++test 在生成报告时内存不足,请参阅What if C/C++test runs out of memory when generating the report? 。
如果遇到问题,应将什么信息发送给 C/C++test 支持团队?
请参见准备支持存档。
安装
如何防止机器码浮动?
网络环境的变化可能会影响用于计算机器码的接口,并导致机器码不稳定。您可以使用 PARASOFT_SUPPORT_NET_INTERFACES 环境变量来指定稳定的接口并防止机器码浮动。
- 设置 PARASOFT_SUPPORT_NET_INTERFACES 环境变量。
将变量值设置为稳定的以太网接口。不要使用虚拟,临时或环回接口。
- 在 Windows 上:将该值设置为您的网卡的 MAC 地址。您可以使用ipconfig -all
命令获取地址。 示例:SET PARASOFT_SUPPORT_NET_INTERFACES=00-10-D9-27-AC-85
- 在 Linux 上: 将值设置为 "inet” 或 "inet6” 系列的网络接口之一。您可以使用
ifconfig
命令获取可用接口的列表。示例:export PARASOFT_SUPPORT_NET_INTERFACES=eth1
如果问题仍然存在,可以通过设置环境变量 PARASOFT_DEBUG_NET_INTERFACES 并将其值设置为 true 来获取诊断信息。这会将可以与技术支持共享的检查过程以及用于计算机器码的界面打印到标准输出中。该接口将标有 [SELECTED] 前缀。
如果机器码是 WIN32-0 怎么办?
如果您的机器码是 WIN32-0,请删除位于<DRIVE>:\Users\<USER_NAME>\.parasoft\C++test\10.x\license中的 许可文件。
为什么在 C/C++test 升级到新版本后,一些规则的抑制无法从 DTP 上获取?
与版本之间报文变更的规则相关联的抑制可能在 DTP 上不可用,并且必须重新抑制这些规则。
您可以通过配置以下高级选项为 10.4.1 版和更高版本中的 BD 类别规则还原旧报文(请参见配置高级选项):
CPPTEST_ENGINE_EXTRA_ARGS="-property flowanalysis.legacy.messages.for.<rule_ID>=true"
示例:
CPPTEST_ENGINE_EXTRA_ARGS="-property flowanalysis.legacy.messages.for.BD.PB.ARRAY=true -property flowanalysis.legacy.messages.for.BD.PB.ZERO=true"
若要成功还原旧报文,请确保从以下位置删除包含本地 C/C++test 缓存数据的 .cpptest 文件夹:<workspace_location>/.cpptest/.dtpengine/.cpptes
t.
测试与分析
如果 C/C++test 没有在命令行模式下启动怎么办?
安装或更新扩展或其他 Visual Studio 组件可能会损坏 Visual Studio 的组件模型缓存,这可能会阻止 C++test 的启动。要清除组件模型缓存,请尝试使用-clearcmc
选项运行cpptestcli
。
如果 C/C++test 在静态分析期间报告超时,该怎么办?
为确保分析完成,您可以执行以下操作之一:
- 通过配置以下高级选项来增加超时限制:
cpptest.analyzer.source.timeout=<TIMEOUT_IN_SECONDS>
请参见 配置高级选项。
- 禁用测试配置中最耗时的规则或指标。有关时间的信息包含在控制台和报告中显示的超时消息中。
- 联系 Parasoft 技术支持。
如果在收集静态覆盖率数据时没有找到一个或多个文件怎么办?
收集静态覆盖率数据时指定未找到的文件(或多个文件)的设置问题表明该文件的本地路径与其构建时路径不同。
作为解决方法,您可以使用 CPPTEST_COVERAGE_SRC_ROOT
环境变量将原始路径映射到本地路径:
CPPTEST_COVERAGE_SRC_ROOT=original/path1=local/path1;original/path2=local/path2;...
报告
如何创建包含激活码标准规则列表的报告?
生成报告时,请指定包含以下条目的报告配置文件:
results.report.active_rules=true
如果某些字符未能在 C/C++test 报告中正确显示怎么办?
由 Parasoft 产品生成的报告需要使用 sans-serif 字体才能在您的环境中使用。如果您的报告无法正确显示某些字符(例如国家字符),请确保在系统上安装了 sans-serif 字体。
如果 C/C++test 在生成报告时内存不足怎么办?
C/C++test 使用单独的 JVM 在代码测试后生成报告。您可以通过配置 parasoft.report.separate_vm.xmx
系统属性来增加为生成 C/C++test 报告分配的内存量,例如:
parasoft.report.separate_vm.xmx=1280m
您可以通过设置 parasoft.report.separate_vm.java_home
系统属性,将生成报告的 JVM 配置为使用具有更大内存总量大小的 Java,例如:
parasoft.report.separate_vm.java_home=C:/Program Files/Java/jdk-12.0.1
在 IDE 中工作
为什么 C/C++test 在 Visual Studio 2017 中无法生成测试用例?
在 Visual Studio 2017 中启用项目缓存时,C/C++test 无法生成测试用例。为了确保可以生成测试用例,请禁用项目缓存:
- 在 Visual Studio 2017 主菜单中,转到工具> 选项。
- 展开 项目和解决方案 然后选择 VC++ 项目设置。
- 将 启用项目缓存 选项设置为 否 以禁用项目缓存。
为什么某些 Parasoft 选项在 Visual Studio 2017 或更高版本的解决方案资源管理器上下文菜单中不起作用?
为确保所有 Parasoft 选项在解决方案资源管理器上下文菜单中正常工作,必须在 Visual Studio 2017 或更高版本中安装以下 Visual Studio 工作负载:
- 使用 C++ 进行桌面开发
- 通用 Windows 平台开发 或 .NET 桌面开发。
- 运行 Visual Studio 安装程序。
- 出现提示时,选择适当的工作量。
为什么在启动时会收到 Parasoft 插件或其组件使 Visual Studio 2017 或 2019 变慢的提示?
在 Visual Studio 2017 和 2019 中,性能管理监视和管理可能影响启动时间的扩展。因而,当安装 Parasoft 插件时,可能会出现一个弹出警报,指示 Visual Studio 启动时间已经增加。您可以单击弹出窗口中的“管理性能”链接来查看启动时间并禁用显示警报。
如果 Visual Studio 报告用 C/C++test 生成的测试套件中正确的代码的语法错误,怎么办?
当 Visual Studio 的本机代码完成 IntelliSense 无法识别 C/C++test 特定的语法时,Visual Studio 可能会在测试套件中用红色下划线标记正确的代码元素,以指示潜在的错误。 为防止这种情况,您可以执行以下操作之一:
- 配置 IntelliSense 以停止报告潜在的语法错误。注意,这将–在测试套件和所有其他文件中全局禁用错误识别功能。
使用以下指令在测试套件中包装代码:
#ifndef __INTELLISENSE__ //this code block will not be analyzed by IntelliSense #endif