新浪博客

LabVIEW 的调试环境

2006-09-08 17:13阅读:

1. LabVIEW 的全局选项

在 LabVIEW 8.2 中打开 Tools -> Options 菜单项,选择其中的 Debugging,会出现如下四个选项:
LabVIEW <wbr>的调试环境
图1:LabVIEW 与调试相关的选项
a) Show data flow during execution highlighting 表示在高亮显示执行的过程中显示数据的流动。
b) Auto probe during execution highlighting 表示在高亮显示执行的过程中,数据从每个接线端流出时,显示数据的数值。
c) Show warnings in Error List dialog by default 表示在默认情况下,在错误列表的对话框中显
示警告信息。
d) Prompt to investigate internal errors on startup 表示在 LabVIEW 启动时检查是否存在内部错误。
如果你仅从字面上还不能理解上述几个选项的含义,不要紧,后面的章节里会详细介绍它们的含义。

2. VI 的属性

某些 VI 的属性设置可能会导致你无法调试这个 VI。比如,VI 被设置为有密码保护,而你又不知道密码是什么;又比如,VI 被设置为不允许调试等。禁止 VI 调试可以大大提高 VI 的运行速度,降低 VI 的内存占用,所以,在 VI 发布给用户之前,最好把它设为不可调试。
LabVIEW <wbr>的调试环境
图2:VI 的属性设置

3. 调试工具

VI 程序框图上的工具栏中,某些按键是用于调试的。
LabVIEW <wbr>的调试环境
图3:正在运行的一个 VI 的程序框图
图3 是一个正在运行的 VI 的程序框图。我们看到的工具栏上的按钮的图形,基本就可以猜出它的功能了。
LabVIEW <wbr>的调试环境 用于停止整个程序的执行。
LabVIEW <wbr>的调试环境 用于暂停或者继续程序的执行。
LabVIEW <wbr>的调试环境 用于启动高亮显示执行。在高亮显示执行时,LabVIEW 会放慢代码的执行速度,并且在程序执行到每一个节点时,高亮显示这个正在被执行的结点。高亮显示执行的速度非常慢,所以启用它要非常小心。如果启动高亮显示的同时,你的某个 VI 前面板是模式的(modal),那么你想中途关掉它是不可能的了,你只能非常痛苦地等待程序的结束,或杀掉整个 LabVIEW 进程。
LabVIEW <wbr>的调试环境 用于保留 VI 程序框图上数据线中的数据。
LabVIEW <wbr>的调试环境 用于单步执行,它们三个分别表示进入、跳过或跳出某个节点、结构以及子 VI。
LabVIEW <wbr>的调试环境 下拉框表示 VI 的调用关系。打开下拉框,可以看到当前 VI 从低层到高层的逐级被调用关系。选择下拉菜单中的某一项,即可跳到那个 VI 被调用的地方。
LabVIEW <wbr>的调试环境 是设置断点的地方。
LabVIEW <wbr>的调试环境 是设置探针的地方。图3 上的悬浮窗口显示的就是探针所在处的数据。
在需要设置断点和探针的地方按鼠标右键,在弹出菜单里可以选择 Set Breakpoint 或者 Probe,或者通过使用工具选板(Tool Palette)上的断点和探针工具进行设置。

相关文章:
断点和探针
《我和 LabVIEW》的其它文章
编辑

2006/9/11 18:09:45 | 添加评论 | 阅读评论 (1) | 固定链接 | 写入日志 | 我和 LabVIEW

LabVIEW 的运行效率 2 - 程序慢在哪里

二、程序慢在哪里?

仅仅使用内存和信息工具还不能发现所有程序效率问题的。并且一旦程序的主体部分已经完成,再对其进行修改,成本是比较高的。尤其是涉及到结构性的改动时更是如此:以前做过的测试需要重新做,构建在这个模块之上的代码需要作相应更新。如果时间紧迫,同时考虑到这种代码改动所带来的风险,完全可能在程序完成后就无法再对其性能进行优化了。
所以最有效的编写高效率程序的方法是在设计程序结构的时候,就考虑到可能会影响程序效率的所有因素,直接设计出高效率的程序。而不是在程序完成后,再回头查找程序瓶颈。
下面讨论的是一些常见的运行比较慢的程序代码部分。一个程序运行效率的瓶颈通常就出现在这些部分。所以在设计程序时,对这些部分要格外注意。

a) 读写外设、文件

相对于计算机的中央处理器、内存读写的速度而言,计算机的外围设备的处理和传输数据的速度是非常慢的。比如,GPIB 的传输速率最高也只有 1Mbps,比内存的传输速率低了两个数量级以上。在一个测试应用软件中,造成整个系统效率低下的瓶颈很可能就在于这类数据传输当中,程序的大部分时间都消耗在等待外部数据上了。

b) 界面

界面刷新和等待事件也是比较耗费时间的工作,这是由于人的反应速度远不如计算机引起的。比如你可以设置屏幕上的数据指示控件中的数值以每秒一千次的速度刷新,但是这对于用户来说毫无意义,因为人眼和大脑根本处理不了如此快速的变化。还有,在显示给用户一条信息后,等待用户的后续指令也需要等待一段时间。

c) 循环内的运算

设计循环的时候总是要格外小心些,因为就算一段代码运行得再快,循环个几千,甚至几百万次,耗费是时间也不得了了。所以越是执行次数多的循环,他内部代码的效率对整体影响越大。

d) Global Variable

全局变量不但会破坏LabVIEW的代码风格,并且它的代码读写速度也是特别的慢。

e) 子VI

使用子VI是会有一定开销的,但是我们在其它文章(LabVIEW 程序的内存优化)里曾经讨论过,使用子VI利大于弊。从这一点来说,子 VI 使用得越多越好。不过需要注意的是,动态调用子VI的速度是非常慢的。因为他需要先把被调用的VI从磁盘装入到内存中,然后才能运行。而且,装载 VI 的工作一定是在界面线程(LabVIEW 的执行系统)中执行的。如果被动态调用的 VI 太大,就会迟滞界面刷新,影响用户的感觉。

f) 调试信息

这一条对于已经做成可执行文件的程序是没有意义,因为 LabVIEW 在把 VI 转换成可执行文件的时候,一定会去除调试信息的。但是还有相当一部分程序是以 .vi 文件的格式,直接在 LabVIEW 的编译环境中运行的,去除调试信息可以让这种程序降低约 50% 的 CPU 占用时间和内存。

g) 多线程和内存使用不当

LabVIEW 是自动多线程运行的,并且自动开辟、回收内存空间。这意味着对于 LabVIEW 初级用户来说,可以不去关心有关线程和内存的问题。但是对于高级用户而言,需要追求更高的效率,还是需要考虑多线程和内存对程序的影响的。
相关文章:
LabVIEW 的运行效率 1 - 找到程序运行速度的瓶颈
《我和 LabVIEW》的其它文章
编辑

我的更多文章

下载客户端阅读体验更佳

APP专享