Logging 什么是TCL';用于将GUI操作转换为TCL语句的s模式

Logging 什么是TCL';用于将GUI操作转换为TCL语句的s模式,logging,tcl,command-line-interface,Logging,Tcl,Command Line Interface,我已经读到TCL作为EDA工具的命令语言的起源。我还记得一位熟悉QA的老朋友提到,一些工具将用户执行的每个GUI操作转换为TCL语句。这些语句随后被记录到一个文件中。他们提到,只要重新运行命令的日志文件,就可以重现任何bug 这似乎是一个强大的模式 是否有一套通用的规则来实现这一点。例如,如果用户在CAD应用程序中,该怎么办。如果他们用一条语句创建一行,他们以后会如何引用该行以操作该行的属性?Tcl/Tk GUI中的每个操作都会导致调用Tcl脚本;Tcl/Tk应用程序中的控制器是Tcl解释器。其

我已经读到TCL作为EDA工具的命令语言的起源。我还记得一位熟悉QA的老朋友提到,一些工具将用户执行的每个GUI操作转换为TCL语句。这些语句随后被记录到一个文件中。他们提到,只要重新运行命令的日志文件,就可以重现任何bug

这似乎是一个强大的模式

是否有一套通用的规则来实现这一点。例如,如果用户在CAD应用程序中,该怎么办。如果他们用一条语句创建一行,他们以后会如何引用该行以操作该行的属性?

Tcl/Tk GUI中的每个操作都会导致调用Tcl脚本;Tcl/Tk应用程序中的控制器是Tcl解释器。其中一些脚本由Tk本身提供(例如,定义当您将鼠标移到按钮上时发生的事情),而其他脚本由应用程序代码定义(例如,当您单击按钮时发生的事情)。通过记录所有这些小脚本,您可以完全准确地重播所发生的事情

通常不需要记录所有内容。只要跟踪动作,记录对底层模型所做的更改(而不仅仅是按钮和类似东西的显示状态),这几乎肯定就是你的熟人所谈论的。在这种日志记录方法中,您实际上并不是在同一个程序中进行重要的后期处理:您正在生成一个文本文件,其中每一行对应一个操作,并且每一行实际上都是一个格式良好的Tcl命令,这很简单(list命令非常适合系统地创建格式正确的Tcl命令)


但是,如果您正在记录日志,以便可以返回到日志并在应用程序中编辑它,或者选择其他路径,那么您将需要的不仅仅是一个文本文件方法可能是将该文本日志文件保存在类似git的SCM中;这将允许时间回溯、分支和各种有趣的功能。除此之外,您可以考虑不在数据库中保存操作记录(每个操作仍然是Tcl命令调用)(SQLite与Tcl配合得很好,但与许多其他DB引擎也有很好的集成)这将为您提供您想要的功能:行的属性仍然可以通过简单的文本操作来完成-它只是处理结构化数据的Tcl列表,因此它既简单又强大-但您也有数据库来支持您。这是您可以获得非常有创意的地方,超出了我的能力范围在堆栈溢出回答中适当地覆盖。

这里有一个关键点:“Tcl/Tk GUI中的每个操作”--我无法想象Tcl如何记录一些任意的非Tcl应用程序中发生的事情。嗨-这仍然存在一些问题。假设您创建了一行。您稍后如何引用该行?问题是由于ASLR或其他正常行为(一天中的不同时间等),您可能无法获得对象的相同ID。因此,您的引用将被破坏,脚本将失败。此外,Tcl社区中是否有相关文档?