项目场景:
使用Labview调用TestStand的API开发自动化测试程序
问题描述
程序无法正常退出
关闭前面板(调用ApplicationMgr.Shutdown)或者使用Teststand的EXIT按钮均无法正常退出,会报如下故障代码,关闭故障代码后程序会崩溃,只能通过杀进程关闭Labview。
References to PropertyObjects were not released properly.
Total number of objects: 15322
Number of top-level objects: 165
Note: Some top-level objects may be included if they are referenced by
an incorrectly released top-level object. For example, an unreleased
SequenceContext object references a SequenceFile object.
The following top-level objects were not released:
Executions [4 object(s) not released]
Files [1 object(s) not released]
SequenceFile #1:
Path: ...\Multiple Execution\Multiple Execuiton Reference Sequence.seq
Type Definitions [51 object(s) not released]
Type Definition #1:
Name: NI_ParallelModelData2
Type Definition #2:
Name: NI_ParallelTestSocket2
...
原因分析:
ChatGPT给出的分析如下:
你的错误信息指出了你在 TestStand 中存在引用泄露的地方。它指出了 “Executions” 和 “Files” 两种对象类型没有被正确释放,具体包括4个 “Execution” 对象和1个 “SequenceFile” 对象。
“Execution” 对象通常对应于 TestStand 的执行或者说运行实例,每次 TestStand 运行一个序列时,都会创建一个新的 “Execution” 对象。这个对象包含了这次运行的所有状态和结果数据。
“SequenceFile” 对象对应于 TestStand 的序列文件,也就是你用来描述测试流程的文件。
你应该在你的代码中找到这些对象被创建或获取引用的地方,并确保在不再需要它们时正确地释放了它们。释放对象引用的方式通常是调用一个 “Close” 或 “Release” 的方法。
对于 “Execution” 对象,你可能在 “RunState.Engine.NewExecution” 或 “RunState.Execution” 之类的地方获取了引用,然后需要在合适的地方调用 “Execution.Release” 来释放引用。
对于 “SequenceFile” 对象,你可能在 “Engine.GetSequenceFile” 或者 “SequenceContext.SequenceFile” 之类的地方获取了引用,然后需要在合适的地方调用 “SequenceFile.Close” 来释放引用。
最终定位为下列两处调用引入的问题。
该功能是为了在运行过程中获取sequence运行的时长和当前sequence文件路径。
ExecutionViewMgr.Execution.SecondsExecuting 该调用在使用过程中能正常运行
ExecutionViewMgr.Execution.SequenceFilePath 该调用在使用过程中未正常运行
解决方案:
删除该部分代码,程序可正常关闭。