本主题可帮助您解决 C/C++test 使用过程中可能遇到的问题。
C/C++test 直接分析 C/C++ 源文件,间接分析头文件。根据当前选择,C/C++test 将分析所有 C/C++ 源文件,并报告所选项中所有源文件和头文件的违规(仅针对源文件包含的头文件)。
例如:
选择 Parasoft> 首选项,选择控制台,然后选择所需的详细级别(高、正常、低)。
高 | 正常 | 低 | |
---|---|---|---|
关于当前步骤的名称和状态(完成、失败、最新)的基本信息 | 有 | 有 | 有 |
错误 | 有 | 有 | 有 |
警告 | 有 | 无 | 无 |
命令行 | 有 | 有 | 无 |
静态分析和单元测试执行期间打印的违规 | 有,完整格式 | 有,短格式 | 无 |
为了防止 C/C++test 耗尽内存,应将内存参数添加到您用来启动 C/C++test 的脚本或快捷方式中。这两个参数是 JVM 的初始大小值(Xms)和 JVM 的最大大小值(Xmx)。通常,两者都设置为相同的大小(例如,1024MB)。但是,如果偶尔出现问题,但又不想总是分配大量内存,可以将参数设置为不同的大小(例如,初始大小为 1024MB,最大为 1400MB)。您可以设置的最大值取决于您的操作系统和 JVM。
示例:
C/C++test 独立版:cpptest.exe -J-Xms1024m -J-Xmx1400m
C/C++test Eclipse 插件:eclipse.exe -vmargs -Xmx1400m
-Xmx
设置的值,使用 CPPTEST_ENGINE_EXTRA_ARGS 选项自定义分配内存的大小。这可能对于执行静态分析或向 DTP 报告结果而言尤其有用。详细信息请参阅配置高级选项。如果 C/C++test 在生成报告时内存耗尽,请参阅C/C++test 在生成报告时内存耗尽该怎么办?。
如果您怀疑问题是由网络或连接问题引起的,您可以通过将这些 Java 系统属性传递到 Eclipse 进程来尝试调整超时:
选项 | 说明 |
---|---|
parasoft.ws.timeout | 为所有服务设置套接字超时。该值以秒为单位。 |
parasoft.ws.connection.timeout | 为所有服务设置连接超时。该值以秒为单位。 |
示例:
C/C++test 独立版:
cpptest.exe -J-Dparasoft.ws.timeout=180 cpptest.exe -J-Dparasoft.ws.connection.timeout=15 |
C/C++test Eclipse 插件:
eclipse.exe -vmargs -Dparasoft.ws.timeout=180 eclipse.exe -vmargs -Dparasoft.ws.connection.timeout=15 |
如果只设置了 parasoft.ws.timeout,将同时影响套接字和连接超时。
C/C++test 自动检测并使用 Eclipse 中指定的代理设置。不需要额外的配置。
请参阅准备技术支持压缩包。
检查当前安装的 C++test 版本的步骤:
尝试使用 -clean
选项启动 Eclipse(一次)。这将强制刷新内部(Eclipse)注册表/缓存。
当无法写入安装目录中保存配置文件的位置时,Eclipse 可能会崩溃。这种情况在 Eclipse 设置为允许多个用户共享一个安装区域时十分常见。为防止这种情况发生,应将配置文件存储在主目录中。请参阅要求和多用户安装。
网络环境的变化可能会影响用于计算机器码的接口,从而导致机器码不稳定。您可以使用 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,请删除 <DRIVE>:\Users\<USER_NAME>\.parasoft\C++test\10.x\license 中的 license 文件。
与消息在不同版本之间发生更改的规则相关联的抑制可能在 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.
在启动 Eclipse(包括 $PATH、$LD_LIBRARY_PATH 等)之前,确保您已正确配置特定编译器的环境。
如果 C/C++test 安装在名称中带有空格的目录(例如,C:\Program Files
),QNX GCC 编译器可能会阻止 C/C++test 正常工作。
如果您想同时使用 C/C++test 与 QNX 编译器,应确保 C/C++test 安装目录的名称不包含空格。
如果您对使用 Visual Studio 2019 附带的 Microsoft Visual C++14.2 编译器编译的代码进行调试,应在调试前启动 Visual Studio 2019 IDE 并确保在后台运行,直到 C/C++test 运行结束为止。
要确保分析完成,您可以执行以下操作之一:
cpptest.analyzer.source.timeout=<TIMEOUT_IN_SECONDS>
。
收集静态覆盖率数据时未找到文件的设置问题表明文件的本地路径与其构建时路径不一致。
您可以使用 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 文件中的每一项都被视为一个单独的条目。
在某些情况下,链接过程可能会耗尽可映射页面。具体表现为,尽管机器有足够的空闲 RAM,仍然无法分配内存。要解决此问题,应增加每个进程的最大映射页面数。默认为 65530。将这个值增加十倍应能解决该问题。为此,可使用以下命令:
sysctl -w vm.max_map_count=655300 |
如果问题仍然存在,则可能需要进一步增加该值。
生成报告时,请指定包含以下条目的报告配置文件:
results.report.active_rules=true
Parasoft 产品生成的报告要求您的环境中使用无衬线字体。如果报告无法正确显示某些字符(如国家或地区的特殊字符),应确保系统上安装了无衬线字体。
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 |
将 C/C++ 或 C++test 设置为当前透视图(选择窗口> 打开透视图> 其他,然后从打开的对话框中选择 C/C++ 或 C++test)。
由于某些 Eclipse 版本中的 bug,覆盖滚动条可能会遮挡列表或树中最后一项的一部分,导致用户无法点击该项。在 Linux 上,您可以通过设置以下系统变量来禁用覆盖滚动条: GTK_OVERLAY_SCROLLING=0
使用最新的 Ubuntu Linux(21.10 或更高版本)时,应考虑使用以下命令安装额外的 'webkit2gtk-driver' 系统包:
> sudo apt install webkit2gtk-driver |
当使用基于 Snap 的浏览器作为默认系统浏览器的 Ubuntu Linux 时(Ubuntu 21.10 及更高版本的默认设置),Eclipse IDE 可能无法启动此浏览器(请参阅 https://github.com/eclipse-platform/eclipse.platform.swt/issues/221)。
一种解决方法是,在 Preferences> General> Web Browser> External web browsers 中将 Eclipse 配置为使用特定的外部 web 浏览器。
Name:Firefox (env)
Location:/usr/bin/env
Parameters:firefox %URL%
在 Linux C/C++test 独立版中,对于新工作空间,该 Firefox 浏览器已预先配置并自动选择。如有需要,可更新配置以匹配您的环境。
另一种解决方法是,安装非 Snap 版本的目标浏览器,并将其设置为默认系统浏览器。
基于 Snap 的浏览器,例如基于 Snap 的 Firefox(Ubuntu 21.10 和更高版本中默认),可能无法打开位于 /home
目录外的 HTML 文件(请参阅 https://snapcraft.io/docs/snap-confinement)。
如果 C/C++test 的报告是在 /home
之外的位置生成的(例如 /tmp 中的某个位置),基于 Snap 的浏览器可能无法打开报告。要解决此问题,可使用 /home
中的某个位置作为生成报告的位置(例如。/home/<username>/parasoft/reports
)。
当 Eclipse 的 CDT 索引器无法识别 C/C++test 的特定语法时,Eclipse 可能会以红色下划线标记测试套件中正确的代码元素来指示潜在的错误。要避免这种情况,可以启用项目属性中的 Parasoft C/C+test 包含路径提供者:
此解决方法仅适用于 CDT 管理的项目。
如果您使用的是 Cygwin GDB v.10 或更高版本,Eclipse 中的调试功能可能无法使用。这是一个已知的 Eclipse 问题。解决方法是使用 GDB v.9 或更低版本。
如果在测试用例编辑器或测试用例向导中编辑表格时遇到问题(例如,单元格编辑困难,光标导航不起作用,无法更改列宽,无法保存新值),需检查您的 Linux 发行版是否使用 Wayland 显示服务器。如果您使用 Wayland 显示服务器,我们建议将其更改为 X11。
您可以通过以下方式验证 Linux 发行版使用的显示服务器:
您可以通过以下方式将显示服务器更改为 X11:
/etc/gdm3/custom.conf
(需要重新启动)如果遇到 RuleWizard UI 显示问题,请检查您的 Linux 发行版是否使用 Wayland 显示服务器。如果您使用 Wayland 显示服务器,我们建议将其更改为 X11。
您可以通过以下方式验证 Linux 发行版使用的显示服务器:
您可以通过以下方式将显示服务器更改为 X11:
/etc/gdm3/custom.conf
(需要重新启动)