本主题可帮助您解决 C/C++test 使用过程中可能遇到的问题。

通用

分析哪些文件?如何分析头文件?

C/C++test 直接分析 C/C++ 源文件,间接分析头文件。根据当前选择,C/C++test 将分析所有 C/C++ 源文件,并报告所选项中所有源文件和头文件的违规(仅针对源文件包含的头文件)。

例如:

  • 如果选择了项目根节点,则分析所有源文件(间接分析头文件)。
  • 如果选择了单个源文件,则只分析该文件(不分析头文件)。
  • 如果选择了单个源文件和单个头文件,则分析源文件(以及源文件包含的头文件)。
  • 如果只选择了一个头文件,C/C++test 将跳过分析(不直接分析头文件)。

如何修改 C/C++test 控制台消息的详细级别?

选择 Parasoft> 首选项,选择控制台,然后选择所需的详细级别(高、正常、低)。


高正常低

关于当前步骤的名称和状态(完成、失败、最新)的基本信息


有


有


有

错误有有有
警告有无无
命令行有有无
静态分析和单元测试执行期间打印的违规


有,完整格式


有,短格式


无

C/C++test 内存耗尽该怎么办?

您可以通过指定 -Xmx 设置的值,使用 CPPTEST_ENGINE_EXTRA_ARGS 选项自定义分配内存的大小。这可能对于执行静态分析或向 DTP 报告结果而言尤其有用。详细信息请参阅配置高级选项。

如果 C/C++test 在生成报告时内存耗尽,请参阅C/C++test 在生成报告时内存耗尽该怎么办?。


如何通过代理使用 C/C++test?

要通过代理服务器进行连接,您需要在位于以下位置的 parasoft.properties 文件中配置协议专用系统属性:

  • Visual Studio 2015-2019

<INSTALL-DIR>/plugins/com.parasoft.ptest.common.vstudio/parasoft.properties

  • Visual Studio 2022

<INSTALL-DIR>/ptest/plugins/com.parasoft.ptest.common.vstudio/parasoft.properties

例如,如果您使用的是 HTTPS 协议,应确保配置了 HTTPS 的系统属性。至少,您必须配置 https.proxySet=true、https.proxyHost=[hostname] 和 https.proxyPort=[port number]。如果代理服务器要求身份验证,则可以使用 https.proxyUser 和 https.proxyPassword 属性。

您的命令行可能类似于:

https.proxySet=true
https.proxyHost=proxy.parasoft.com.pl
https.proxyPort=3128
https.proxyUser=username
https.proxyPass=password

此外,您还可以配置 https.nonProxyHosts 属性来指定不需要通过代理连接的主机。

遇到问题时,应该向 C/C++test 支持团队发送哪些信息?

请参阅准备技术支持压缩包。

安装说明

如何防止我的机器码漂移?

网络环境的变化可能会影响用于计算机器码的接口,从而导致机器码不稳定。您可以使用 PARASOFT_SUPPORT_NET_INTERFACES 环境变量指定一个稳定的接口,防止机器码漂移。

  1. 设置 PARASOFT_SUPPORT_NET_INTERFACES 环境变量。
  2. 将变量值设置为稳定的以太网网络接口。请勿使用虚拟接口、临时接口或环回接口。
    - 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 中的 license 文件。

为什么 C/C++test 升级到新版本后,某些规则的抑制在 DTP 上不生效?

与消息在不同版本之间发生更改的规则相关联的抑制可能在 DTP 上不可用,必须重新抑制相应规则。

(info) 您可以通过配置以下高级选项(请参阅配置高级选项)来恢复 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/.cpptest.

测试与分析

C/C++test 无法在命令行模式下启动该怎么办?

安装或更新扩展或其他 Visual Studio 组件可能会损坏 Visual Studio 的 Component Model Cache,从而阻止 C++test 启动。若要清理 Component Model Cache,可尝试运行 cpptestcli 与 -clearcmc 选项。

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;...

可以在原始路径中使用允许的通配符“*”。例如:

CPPTEST_COVERAGE_SRC_ROOT=/*/path=/local/path

还可以在列表文件(*.lst)中指定路径映射列表,并将其位置设置为值。例如:

CPPTEST_COVERAGE_SRC_ROOT=/path/mapping.lst

*.lst 文件中的每一项都被视为一个单独的条目。

在 C/C++test 中使用 Bazel 构建时无法分配内存该怎么办?

在某些情况下,链接过程可能会耗尽可映射页面。具体表现为,尽管机器有足够的空闲 RAM,仍然无法分配内存。要解决此问题,应增加每个进程的最大映射页面数。默认为 65530。将这个值增加十倍应能解决该问题。为此,可使用以下命令:

sysctl -w vm.max_map_count=655300

如果问题仍然存在,则可能需要进一步增加该值。

报告

如何创建包含活动编码标准规则列表的报告?

生成报告时,请指定包含以下条目的报告配置文件:

results.report.active_rules=true

某些字符在 C/C++test·报告中无法正确显示该怎么办?

Parasoft 产品生成的报告要求您的环境中使用无衬线字体。如果报告无法正确显示某些字符(如国家或地区的特殊字符),应确保系统上安装了无衬线字体。

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 无法生成测试用例。要确保可以生成测试用例,应禁用项目缓存:

  1. 在 Visual Studio 2017 主菜单中,前往 Tools> Options。
  2. 展开 Projects and Solutions 并选择 VC++ Project Settings。
  3. 将 Enable Project Caching 选项设置为 No,禁用项目缓存。

为什么某些 Parasoft 选项在 Visual Studio 2017 或更高版本的 Solution Explorer 上下文菜单中不起作用?

要确保所有 Parasoft 选项能够在 Solution Explorer 上下文菜单中正常使用,以下 Visual Studio Workload 必须与 Visual Studio 2017 或更高版本一起安装:

  • Desktop development with C++
  • Universal Windows Platform development 或 .NET desktop development
  1. 运行 Visual Studio Installer。
  2. 出现提示时,选择相应的 Workload。

为什么我会收到 Parasoft 插件或其组件影响 Visual Studio 2017 或 2019 启动速度的通知?

在 Visual Studio 2017 和 2019 中,性能管理会监控并管理可能影响启动时间的扩展。因此,安装 Parasoft 插件时可能会出现弹出 Visual Studio 启动时间增加的警告。您可以点击弹出窗口中的 'Manage performance' 链接,查看启动时间并关闭该警告提醒。

Visual Studio 针对 C/C++test 生成的测试套件中正确的代码报告语法错误该怎么办?

当 IntelliSense(Visual Studio 的原生代码补全功能)无法识别 C/C++test 的特定语法时,Visual Studio 可能会以红色下划线标记测试套件中正确的代码元素来指示潜在的错误。  要避免该情况,您可以执行以下操作之一:

  • 配置 IntelliSense,停止报告潜在的语法错误。需注意,这将会全局禁用错误识别功能——包括测试套件和所有其他文件。
  • 使用以下指令将代码包裹在测试套件中:

    #ifndef __INTELLISENSE__
    //this code block will not be analyzed by IntelliSense
    #endif

在 Linux 中遇到 RuleWizard UI 显示问题该怎么办?

如果遇到 RuleWizard UI 显示问题,请检查您的 Linux 发行版是否使用 Wayland 显示服务器。如果您使用 Wayland 显示服务器,我们建议将其更改为 X11。

您可以通过以下方式验证 Linux 发行版使用的显示服务器:

  • 在 Linux 终端中执行以下命令:"echo $XDG_SESSION_TYPE"(适用于大多数发行版)
  • 检查桌面环境设置(并非所有发行版中都可用)
  • 在登录界面检查当前设置,通常通过点击登录界面的轮子/齿轮/菜单图标(并非所有发行版中都可用;需要关闭 Automatic Login 功能)
  • 检查 Settings/About 页面的 Windowing System 字段

您可以通过以下方式将显示服务器更改为 X11:

  • 编辑显示管理器(GDM、SDDM 等)配置文件,例如,使用 GDM 的 Ubuntu 为 /etc/gdm3/custom.conf (需要重新启动)
  • 点击登录界面的轮子/齿轮/菜单图标并选择 X11(并非所有发行版中都可用;需要关闭 Automatic Login 功能)
  • No labels