CN114840251A - 脚本处理方法、终端、存储介质及程序产品 - Google Patents

脚本处理方法、终端、存储介质及程序产品 Download PDF

Info

Publication number
CN114840251A
CN114840251A CN202210470940.1A CN202210470940A CN114840251A CN 114840251 A CN114840251 A CN 114840251A CN 202210470940 A CN202210470940 A CN 202210470940A CN 114840251 A CN114840251 A CN 114840251A
Authority
CN
China
Prior art keywords
script
original script
original
hook function
model
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210470940.1A
Other languages
English (en)
Inventor
梁锦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN202210470940.1A priority Critical patent/CN114840251A/zh
Publication of CN114840251A publication Critical patent/CN114840251A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种脚本处理方法、终端、存储介质及程序产品,该脚本处理方法包括:基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;执行所述钩子脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果;根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释,并显示注释后的原始脚本,通过为原始脚本添加执行结果对应的注释,提高了脚本的可读性和执行过程的可视化程度,进而降低了脚本问题排查的难度,以及提高了脚本问题排查的效率。

Description

脚本处理方法、终端、存储介质及程序产品
技术领域
本申请涉及计算机软件技术领域,尤其涉及一种脚本处理方法、终端、存储介质及程序产品。
背景技术
在机械制造领域,如板式家具设计制造领域,为了提高模型设计和修改的便捷性,采用对模型进行参数化公式设计,通过公式约束不同参数之间的对应关系,设计师或者其他用户可以通过对参数进行调整,得到期望的模型。
当设计师反馈模型的参数存在异常时,程序员需要基于对模型的原始脚本进行分析、调试,以进行问题排查。
在一些场景下,模型的参数化公式定义较为复杂,如包括大量的条件分支、参数节点连接关系复杂等,导致分析脚本代码需要耗费较长时间,从而导致脚本的问题排查效率低下,无法满足需求。
发明内容
本申请提供一种脚本处理方法、终端、存储介质及程序产品,通过钩子函数对原始脚本进行注释,提高了脚本的可读性和脚本执行的可视化程度,进而提高了脚本问题排查的效率。
第一方面,本申请提供一种脚本处理方法,包括:
基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;
执行所述钩子脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果;
根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释,并显示注释后的原始脚本。
第二方面,本申请提供另一种脚本处理方法,包括:
获取并拷贝用户输入的目标模型参数对应的原始脚本,其中,所述原始脚本包含用于确定所述目标模型参数的表达式语句;
基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;
执行所述处理后的脚本,以获取所述钩子函数截取到的所述表达式语句的执行结果;
根据所述表达式语句的执行结果,对所述表达式语句进行注释;
向用户显示注释后的原始脚本。
第三方面,本申请提供一种脚本处理装置,包括:
钩子函数模块,用于基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;
执行模块,用于执行所述钩子脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果;
脚本注释模块,用于根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释;
脚本显示模块,用于显示注释后的原始脚本。
第四方面,本申请提供另一种脚本处理装置,包括:
脚本获取模块,用于获取并拷贝用户输入的目标模型参数对应的原始脚本,其中,所述原始脚本包含用于确定所述目标模型参数的表达式语句;
处理模块,用于基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;
脚本执行模块,用于执行所述处理后的脚本,以获取所述钩子函数截取到的所述表达式语句的执行结果;
注释模块,用于根据所述表达式语句的执行结果,对所述表达式语句进行注释;
显示模块,用于向用户显示注释后的原始脚本。
第五方面,本申请提供一种脚本处理终端,包括:
至少一个处理器,以及与所述至少一个处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,以实现本申请第一方面或第二方面提供的脚本处理方法。
第六方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现本申请第一方面或第二方面提供的脚本处理方法。
第七方面,本申请提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现本申请第一方面或第二方面提供的脚本处理方法。
本申请提供的脚本处理方法、终端、存储介质及程序产品,通过基于钩子函数对原始脚本的代码或语句进行增强,在该原始脚本被执行时,通过钩子函数截取被执行的各个表达式语句的执行结果,并基于执行结果,对原始脚本中的各个表达式语句进行注释,通过向用户显示注释后的原始脚本,使得用户,如设计师或调试人员,可以快速确定被执行的语句及其执行结果,从而提高了脚本的可读性和脚本执行的可视化程度,通过在原始脚本中添加的表达式语句执行结果的注释,降低了脚本问题排查的难度,使得用户可以快速确定问题代码块,提高了脚本问题排查效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例的一种应用场景的示意图;
图2为本申请实施例提供的脚本处理方法的主要过程的示意图;
图3为本申请实施例提供的一种脚本处理方法的流程示意图;
图4为本申请一个实施例提供的语法树的结构示意图;
图5为本申请另一个实施例提供的脚本处理方法的流程示意图;
图6为本申请一个实施例提供的模型设计页面的示意图;
图7为本申请另一个实施例提供的脚本处理方法的流程示意图;
图8为本申请实施例提供的一种脚本处理终端的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
首先对本申请涉及的名词进行解释:
钩子(Hook)函数:在计算机编程中,钩子函数主要用于通过拦截在软件按键之间传递的函数调用、消息或事件,来改变或增强操作系统、应用程序或其他软件按键的行为。处理这种截获的函数调用、事件或消息的代码称为钩子,它的本质就是用以处理系统消息的程序,通过系统调用,把它挂入系统。
参数化公式:将公式和方程式表示为包括标注约束参数、用户定义参数的表达式。
图1为本申请实施例的一种应用场景的示意图,如图1所示,在设计师基于用户终端100上参数化设计工具提供的模型进行产品模型设计时,在参数化设计工具的模型设计页面可以显示模型库,模型库中包括多个模型,如图1中的模型01至模型03,在模型显示区域可以显示设计师选中的模型对应的三维图,如模型02,设计师还可以通过该模型的参数详情区域查看并调整该模型的部分参数,通过该模型的参数化公式对应的脚本,对模型的其他参数进行适应性调整,从而得到预期的模型。
当模型的参数存在异常时,设计师或调试人员,需要查看该模型的参数化公式对应的原始脚本,通过分析原始脚本的代码,确定存在问题的代码或参数语句,从而实现对脚本的问题排查。
在一些应用场景中,产品模型结构复杂或包括较多的参数,其对应的参数化公式的定义也较为复杂,导致调试人员或设计师无法快速的定位问题代码块,尤其是设计师,通常不具备开发经验,无法快速读懂脚本,脚本问题排查难度较高、学习成本高,导致脚本问题排查耗时、效率低下。
为了提高脚本的可视化程度以及脚本问题排查的效率,本申请提供了一种基于钩子函数的脚本处理方法,通过在原始脚本中添加钩子函数,确定各个被执行的表达式语句的执行结果,并将语句的执行结果以注释的方式添加到原始脚本中,提高了原始脚本的可读性和可视化程度,使得调试人员或设计师可以快速确定被执行的语句以及每个被执行的语句的执行结果,从而基于执行结果快速定位问题语句,提高了问题排查的效率。
图2为本申请实施例提供的脚本处理方法的主要过程的示意图,如图2所示,当用户需要查看模型参数化公式对应的原始脚本时,通过后台拷贝该原始脚本,如图2中的脚本110,并在拷贝的原始脚本中添加预设的钩子函数,通过该钩子函数获取原始脚本中表达式语句的执行结果,进而基于执行结果,在原始脚本中添加注释,具体为在各表达式语句后添加该表达式语句的执行结果对应的注释,得到注释后的原始脚本,如图2中的脚本120,并向用户显示注释后的原始脚本,即脚本120。
图2中以脚本110中包括两个代码块,即代码块01和代码块02,为例,代码块01和代码块02在脚本110执行时均被执行。代码块01由5条语句组成,即语句11至语句15,代码块02由6条语句组成,即语句16至语句21,其中,语句12至语句15,语句16以及语句21为表达式语句,各表达式语句对应的注释分别为注释1至注释6,每条注释的内容为对应的表达式语句的执行结果。在注释后的原始脚本,即脚本120中,在每条表达式语句处紧跟了一条注释,以告知相关人员该条语句的执行结果,从而便于基于各条表达式语句的执行结果进行问题排查,提高了问题排查的效率。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图3为本申请实施例提供的一种脚本处理方法的流程示意图,该方法可以由任意一个具备数据处理功能的设备执行,如上述用户终端100或后续的脚本注释终端,如图3所示,该脚本处理方法包括以下步骤:
步骤S301,基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本。
其中,原始脚本可以为浏览器或其他软件的显示页面显示的按键对应的脚本,如参数化公式对应的按键、功能按键等。原始脚本可以为基于JS(JavaScript)脚本语言编写的脚本。
具体的,参数化公式可以为模型,如家具产品模型,其中一个参数相关的公式,如不可调参数、中间参数等,参数化公式可以用于描述模型参数之间的关系,如尺寸、材质、类型、位置等相关参数的关系。原始脚本用于对模型,如家具产品模型,至少一个参数进行处理。原始脚本可以用于根据可调参数,如用户输入或调整的可调参数,确定与该可调参数相关的参数的值,如不可调参数。
在一个实施例中,钩子函数可以用于获取原始脚本中各表达式语句的执行结果。钩子函数还可以用于获取被执行的代码块或语句。
在家具模型设计领域,表达式语句用于表示家具产品模型的参数的计算过程,如尺寸、材质、位置等参数,或者与这些参数关联的中间参数,中间参数仅用于计算不可调参数,是过程参数,不会被原始脚本输出。
具体的,可以将预先设计的钩子函数添加至所拷贝的原始脚本中,得到处理后的脚本。
具体的,可以基于钩子函数,对拷贝的原始脚本中的各个表达式语句进行改写,从而在改写后的表达式语句被执行时,基于钩子函数可以获取该表达式语句的执行结果。
示例性的,以当参数a大于0时,执行表达式语句“b+c+d”为例,为该表达式语句添加钩子函数后,或者通过钩子函数对该表达式语句进行改写或增强之后,该表达式语句为“$get(b+c+d)”,其中,$get()即为上述钩子函数。当该表达式语句被执行时,可以通过$get()截取该表达式语句的执行结果。
具体的,可以在检测到原始脚本对应的显示请求之后,拷贝该原始脚本,并基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本。
用户可以通过输入设备,如鼠标、键盘、麦克风等,输入显示请求。在接收到用户输入的显示请求之后,拷贝该显示请求对应的软件按键的原始脚本。
具体的,用户可以通过点击预设按键的脚本查看功能,触发该预设按键的原始脚本的显示请求,从而基于该显示请求,获取并拷贝该预设按键对应的原始脚本。
示例性的,预设按键可以为产品模型的其中一个或多个参数化公式的按键。
可选的,所述钩子函数包括第一钩子函数,所述第一钩子函数用于截取对应的表达式语句执行时的执行结果;基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本,包括:
将拷贝的原始脚本转换为语法树;基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理,得到处理后的脚本;其中,所述表达式节点为原始脚本中表达式语句对应的节点。
其中,语法树是一种树状结构,由多个节点组成,如代码块节点、语句节点等,源代码即拷贝的原始脚本的代码中每个语句对应语法树中的一个节点。根节点通常为代码中的“body”代码块对应的节点。脚本中用大括号括起来的代码段为一个代码块。
具体的,可以通过对所拷贝的原始脚本进行词法分析和语法分析,基于分析结果将拷贝的该原始脚本转换为语法树。
具体的,可以通过JS引擎,如nashorn引擎,将拷贝的原始脚本转换为语法树。
具体的,可以采用递归遍历的方式、按照层级进行遍历的方式等遍历方式,遍历语法树的每个节点,若当前的节点为表达式语句对应的节点或节点类型为表达式类型时,则获取该节点对应的代码或语句,基于第一钩子函数对该及节点对应的代码或语句进行处理,如增强处理;若当前的节点不是表达式语句对应的节点或节点类型不是表达式类型,则获取下一节点。
示例性的,图4为本申请一个实施例提供的语法树的结构示意图,如图4所示,每个节点采用标志“f”表示,每个节点采用“节点名称={节点类型@节点标识}”表示,节点后面紧跟的引号里的内容,为该节点对应的代码的内容,节点名称可以根据节点对应的元素、函数、变量或语句确定,如body、token、his等;节点类型包括代码块类型(Block)和表达式类型,表达式类型为表达式语句对应的节点的类型,可以为赋值语句、关系表达式语句、逻辑表达式语句、算术表达式语句等;在图4中节点标识采用三位数字表示,如787。在图4中,原始脚本对应的语法树的根节点为body代码块的节点,节点标识为787,body代码块包括一个子节点,即test节点(节点标识为808),该子节点对应一条if分支语句,以判断a是否大于10;test节点包括2个子节点,即pass节点(节点标识为809)和fail节点(节点标识为810);pass节点对应a大于10的情况,pass节点包括一个子节点,即expression节点,该节点用于计算b+c+d;fail节点对应a小于或等于10的情况,该节点用于返回0。
通过语法树,实现了基于钩子函数对语法树中表达式节点进行增强,易于实施,且表达式语句的覆盖率高,不易遗漏语句。
步骤S302,执行所述处理后的脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果。
其中,执行结果为模型的参数随着表达式语句被执行后的取值。
具体的,可以通过浏览器执行该处理后的脚本,得到执行结果。从执行结果中,提取各个钩子函数截取的信息,即各表达式语句的执行结果。
以原始脚本用于计算模型其中一个不可调参数(如后续的第二参数)为例,执行结果可以包括该不可调参数的取值,还可以包括与该不可调参数关联的中间参数的取值。
示例性的,以柜子为例,柜子的总高度、总长度和总宽度均为可调参数。柜门、底板等部件的尺寸可以为不可调参数,可以通过参数化公式对应的原始脚本基于柜子的总高度、总长度和总宽度进行计算。如柜门的宽度可以为柜子总宽度的40%、50%等。
步骤S303,根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释,并显示注释后的原始脚本。
具体的,针对每个表达式语句,可以将该表达式语句的执行结果,以注释的方式添加至原始脚本中该表达式语句处,如添加至该表达式语句之后,即在注释后的原始脚本中,每个被执行的表达式语句后会紧跟一条注释。以表面该表达式语句的执行结果,从而便于用户基于该注释,知悉该表达式语句的执行结果。
在一个实施例中,注释可以采用“/**/”或“//”表示。
示例性的,以表达式语句“r=thin_groove_y;”为例,其执行结果为6,则注释后的该表达式语句为“r=thin_groove_y/*6*/;”,其中,“/*6*/”为注释。
本实施例提供的脚本处理方法,通过基于钩子函数对原始脚本的代码或语句进行增强,在该原始脚本被执行时,通过钩子函数截取被执行的各个表达式语句的执行结果,并基于执行结果,对原始脚本中的各个表达式语句进行注释,通过向用户显示注释后的原始脚本,使得用户,如设计师或调试人员,可以快速确定被执行的语句及其执行结果,从而提高了脚本的可读性和脚本执行的可视化程度,通过在原始脚本中添加的表达式语句执行结果的注释,降低了脚本问题排查的难度,使得用户可以快速确定问题代码块,提高了脚本问题排查效率。
图5为本申请另一个实施例提供的脚本处理方法的流程示意图,本实施例是在图3所示实施例中的基础上,对步骤S301的进一步细化,以及在步骤S302之后,增加对原始脚本被执行的代码块进行颜色设置的步骤,如图5所示,本实施例提供的脚本处理方法可以包括以下步骤:
步骤S501,显示模型被选中的部件对应的参数化公式对应的按键。
其中,模型可以为任意一个物体的二维或三维模型,如家具的模型、建材的模型等。该模型可以为模型库中的任意一个模型。参数化公式对应的按键可以为页面中显示的任意一个被容器包裹的元素,如链接、标题、文本、按钮等。
模型被选中的部件为用户选中的模型的任意一个部件,如柜子模型的底板、汽车模型的车门等,若用户点击,如单击或双击,模型的任意一个部件,或者若用户将鼠标停留在模型其中一个部件的时间达到预设时间,如1s、2s、3s等,该部件即为被选中的部件,则可以在模型的下方、侧边等位置处显示该部件对应的一个或多个参数化公式对应的按键。
具体的,在用户从模型库中选中或拖出一个模型之后,可以在模型设计页面,显示该模型,模型设计页面还可以显示该模型对应的结构树,其中,结构树中每个节点为该模型的每个部件。模型设计页面还可以显示该模型对应的各个参数、基础属性等信息。用户可以对模型的各个部件进行查看,如点击所显示的模型中部件对应的区域,或者点击结构树中该部件对应的节点。用户还可以对模型的可调参数进行调整,从而更新模型的参数,以及所显示的模型。
示例性的,图6为本申请一个实施例提供的模型设计页面的示意图,如图6所示,图6中以单门左开吊柜为例,在模型设计页面的中间区域显示该模型对应的三维图,在三维图的两侧分别显示模型的参数和模型的结构树。在图6中,该单门左开吊柜对应10个参数,即参数001至参数010,可调参数(如图6中的参数001、参数003、参数004以及参数008至参数010)旁设置有输入框,以允许用户调整该可调参数的值,该单门左开吊模型的参数包括尺寸、材质、颜色、相对位置、类型等对应的参,该单门左开吊柜包括左侧板、右侧板、顶板、底板、两个活动层板和左开门等部件,每个部件的节点还可以包括子节点。用户可以通过三维图或结构树进行部件信息的查看,如部件对应的参数、部件对应的参数化公式、部件的属性、相关信息等。
可选的,所述方法还包括:
当检测到模型的第一参数被更新时,基于新的第一参数,对所述第一参数对应的参数化公式的原始脚本进行初始化;运行初始化后的原始脚本,以确定所述模型的至少一个第二参数;根据所述新的第一参数和所述至少一个第二参数,更新显示的模型。
其中,第一参数为模型的可调参数,如柜子的总宽度、沙发的总长度等,第二参数为随着第一参数变化的参数,如双开门柜子的柜门的宽度,第二参数可以为不可调参数。
具体的,可以在显示模型时,在模型的一侧显示模型的各个第一参数。用户可以通过输入设备对第一参数进行调整,当检测到任意一个第一参数被更新时,则获取该被更新的第一参数,即新的第一参数,并基于该新的第一参数对对应的参数化公式的原始脚本进行初始化,通过运行初始化后的原始脚本,得到或更新该第一参数对应的至少一个第二参数。进而基于新的第一参数及其对应的新的第二参数,对显示的模型进行更新,从而向用户显示基于第一参数更新后的模型。
在模型的可调参数更新时,通过参数化公式对应的原始脚本,进行显示模型的适应性调整,实时显示调整后的模型,提高了模型设计的交互的实时性和直观性,提高了模型设计的体验。
步骤S502,监听各个所述参数化公式对应的按键的事件。
步骤S503,当检测到参数化公式对应的按键的点击事件时,拷贝所述参数化公式的原始脚本。
其中,点击事件可以为单击、双击或者其他操作触发的事件。该点击事件用于查看对应的参数化公式的原始脚本。
具体的,用于可以点击在浏览器或其他软件上显示的模型设计页面上的其中一个参数化公式对应的按键,从而触发对应的点击事件,基于该点击事件,获取并拷贝该参数化公式的原始脚本。
通过参数化公式按键的可视化,使得用户得以通过该按键进行脚本的查看、调试等操作,提高了脚本查看的便捷性。
步骤S504,将拷贝的原始脚本转换为语法树。
具体的,可以基于语法解释器,将拷贝的原始脚本转换为语法树。
步骤S505,基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理。
其中,所述表达式节点为原始脚本中表达式语句对应的节点。
步骤S506,遍历所述语法树中各个代码块节点,将第二钩子函数添加至拷贝的原始脚本的各个代码块中。
其中,所述代码块节点为所述原始脚本中代码块对应的节点。
在一个实施例中,第二钩子函数可以添加在每个代码块节点对应的代码块的开头部分、结尾部分或者其他位置。
在一个实施例中,可以采用递归遍历的方式,遍历语法树中各个代码块节点。
具体的,可以遍历语法树中的各个代码块节点,并为每个代码块节点设置一个代码块标识,以及在每个代码块节点中插入一个第二钩子函数。
步骤S505和步骤S506可以并行执行也可以串行执行,如先执行步骤S505再执行步骤S506,或者先执行步骤S506再执行步骤S505,本申请对此不进行限定。
通过步骤S505和步骤S506对拷贝的原始脚本的处理,得到处理后的脚本。
步骤S507,执行所述处理后的脚本,以获取第一钩子函数的执行结果和第二钩子函数的执行结果。
其中,第一函数的执行结果即为原始脚本中对应的表达式语句的执行结果。
其中,第二钩子函数的执行结果可以为该第二钩子函数所在的代码块的标识,或者该第二钩子函数的执行结果可以为第三参数,每个第二钩子函数对应的第三参数均不相同,以基于第三参数与代码块的标识之间的对应关系,确定被执行的代码块。
示例性的,第二钩子函数可以为$record(N),其中,N为第二钩子函数对应的代码块被执行时,返回的值,可以为第二钩子函数所在的或对应的代码块的标识,或者为第三参数。
步骤S508,根据第一钩子函数的执行结果,对所述原始脚本的各表达式语句进行注释。
具体的,基于第一钩子函数的执行结果,确定该第一钩子函数对应的表达式语句的执行结果,将该表达式语句的执行结果以注释的方式添加至原始脚本中该表达式语句处。
示例性的,表达式语句的执行结果可以仅包括变量的取值,如10,还可以包括变量及其取值,如底板长度为10、a=10或a当前为10等。
步骤S509,基于第二钩子函数的执行结果,确定所述原始脚本被执行的代码块。
在一个实施例中,第二钩子函数的执行结果为第三参数,则获取第三参数与代码块的标识之间的预设对应关系;基于第二钩子函数的执行结果中的各个第三参数以及该预设对应关系,确定被执行的各个代码块的标识,进而确定原始脚本被执行的各个代码块。
进一步地,在确定原始脚本被执行的各个代码块之后,还可以在模型设计页面显示被执行的各个代码块的名称,如代码块对应的函数名,以便于用户知悉被执行的各个代码块。其中,所显示的各个代码块的名称可以按照代码块被执行的顺序进行排序。
步骤S508和步骤S509可以并行执行也可以串行执行,如先执行步骤S508再执行步骤S509,或者先执行步骤S509再执行步骤S508,本申请对此不进行限定。
可选的,在基于第二钩子函数的执行结果,确定所述原始脚本被执行的代码块之后,所述方法还包括:
根据所述原始脚本被执行的代码块,生成并显示所述原始脚本的执行路径。
其中,执行路径可以由按照执行顺序排序的各个被执行的代码块的名称组成。
在一个实施例中,执行路径可以由多个路径节点组成,每个路径节点对应一个代码块,路径节点可以由对应的代码块的名称以及对应的代码块的返回值。
具体的,针对原始脚本中每个被执行的代码块,获取该代码块的名称以及该代码块的注释;根据各个被执行的代码块的名称以及各个被执行的代码块注释,生成并显示该原始脚本的执行路径。
在一个实施例中,代码块的注释,可以包括代码块各表达式语句的执行结果,即第一钩子函数的执行结果,还可以包括原始脚本的编写者为原始脚本的代码块添加的注释。
通过向用户显示代码块的执行路径,提高了原始脚本执行逻辑的可视化,且用户可以基于简短的执行路径,初步对原始脚本进行排查,从而确定可能存在问题的代码块,进而仅需查看原始脚本少量的代码块的代码即可实现对整个原始脚本的问题排查,提高了代码排查的效率。
步骤S510,将所述原始脚本被执行的代码块的颜色调整为预设颜色。
其中,预设颜色可以为与原始脚本的代码自身的颜色不同的任意一种颜色,如绿色、红色、黄色等。
通过对执行的代码块颜色的调整,使得用户可以直观地确定被执行的代码,从而减少用户所需查看的代码的数量,提高用户代码问题排查的效率。
步骤S511,显示颜色调整以及注释后的原始脚本。
具体的,可以在模型设计界面的底部、侧部或者其他位置,显示颜色调整以及注释后的原始脚本,从而使得用户基于显示的原始脚本进行问题排查。
在本实施例中,通过第一钩子函数和第二钩子函数,分别获取参数化公式的原始脚本中表达式语句的执行结果和被执行的代码块,进而通过颜色区分的方式区分被执行和未被执行的代码块,以及在每个被执行的表达式语句后紧跟该表达式语句的执行结果,使得用户可以通过颜色直观地区分被执行的代码块,从而减少用户所需查看的代码的数量,提高了脚本问题排查的效率;通过在表达式语句后添加其执行结果,使得用户快速明晰代码执行过程中各变量的取值,从而无需用户掌握参数化公式的上下文,降低了公式脚本的学习成本以及脚本问题排查的难度,进一步提高了脚本问题排查的效率。
图7为本申请实施例提供另一种脚本处理方法的流程示意图,本实施例是图3实施例中的基础上,在步骤S301之前,增加用户交互的过程,如图7所示,本实施例提供的脚本处理方法可以包括以下步骤:
步骤S701,获取并拷贝用户输入的目标模型参数对应的原始脚本。
其中,所述原始脚本包含用于确定所述目标模型参数的表达式语句。
步骤S702,基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本。
步骤S703,执行所述处理后的脚本,以获取所述钩子函数截取到的所述表达式语句的执行结果。
步骤S704,根据所述表达式语句的执行结果,对所述表达式语句进行注释。
步骤S705,向用户显示注释后的原始脚本。
其中,目标模型参数可以为模型的任意一个参数,如尺寸、材质、颜色等相关的参数。模型可以为家居产品的3D模型。
示例性的,用户在显示界面查看模型,并调整模型的部分参数,如可调参数,从而更新所显示的模型及其与所调整的参数关联的参数。用户可以选择所显示的任意一个参数,作为目标模型参数,从而触发上述脚本处理方法,通过该脚本处理方法,向用户显示其选中或输入的目标模型参数对应的注释后的原始脚本,以便于用户基于注释,快速掌握目标模型参数的计算过程,从而判断该目标模型参数是否存在异常。
在一个实施例中,用户可以通过按键的点击事件,输入目标模型参数。或者可以通过输入框输入目标模型参数。
在一个实施例中,还可以向用户显示该目标模型参数对应的参数化公式,用户可以点击所显示的参数化公式,从而查看所点击的参数化公式对应的注释后的原始脚本。
在一个实施例中,还可以通过钩子函数确定原始脚本被执行的代码块,从而将向用户显示的原始脚本被执行的代码块的颜色调整为预设颜色,如绿色。
在一个实施例中,还可以向用户显示原始脚本的执行路径。
可以基于上述图3和图5对应的任意实施例提供的技术方案,对原始脚本进行注释、颜色调整和执行路径确定等步骤,本实施例此处不再赘述。
本申请实施例提供一种脚本处理装置,该装置包括:
钩子函数模块,用于基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;执行模块,用于执行所述钩子脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果;脚本注释模块,用于根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释;脚本显示模块,用于显示注释后的原始脚本。
可选的,所述钩子函数包括第一钩子函数,所述第一钩子函数用于截取对应的表达式语句执行时的执行结果;钩子函数模块,具体用于:
将拷贝的原始脚本转换为语法树;基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理,得到处理后的脚本;其中,所述表达式节点为原始脚本中表达式语句对应的节点。
可选的,钩子函数模块,包括:
脚本转换单元,用于将拷贝的原始脚本转换为语法树;第一钩子函数单元,用于基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理;第二钩子函数单元,遍历所述语法树中各个代码块节点,将第二钩子函数添加至拷贝的原始脚本的各个代码块中;其中,所述代码块节点为所述原始脚本中代码块对应的节点。
可选的,所述装置还包括:
颜色调整模块,用于在所述处理后的脚本之后,基于所述第二钩子函数的执行结果,确定所述原始脚本被执行的代码块,将所述原始脚本被执行的代码块的颜色调整为预设颜色。
相应的,脚本显示模块,具体用于:
显示颜色调整以及注释后的原始脚本。
可选的,所述装置还包括:
执行路径生成模块,用于在基于第二钩子函数的执行结果,确定所述原始脚本被执行的代码块之后,根据所述原始脚本被执行的代码块,生成并显示所述原始脚本的执行路径。
可选的,所述装置还包括:
部件按键显示模块,用于显示模型被选中的部件对应的参数化公式对应的按键;事件监听模块,用于监听所述参数化公式对应的按键的事件;脚本拷贝模块,用于当检测到参数化公式对应的按键的点击事件时,拷贝所述参数化公式的原始脚本;其中,参数化公式用于表征所述模型至少两个参数的对应关系。
可选的,所述装置还包括:
模型更新模块,用于当检测到模型的第一参数被更新时,基于新的第一参数,对所述第一参数对应的参数化公式的原始脚本进行初始化;运行初始化后的原始脚本,以确定所述模型的至少一个第二参数;根据所述新的第一参数和所述至少一个第二参数,更新显示的模型。
本申请实施例提供的脚本处理装置,可用于执行上述图3和图5对应的任意实施例提供的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
本申请实施例提供另一种脚本处理装置,该装置包括:
脚本获取模块,用于获取并拷贝用户输入的目标模型参数对应的原始脚本,其中,所述原始脚本包含用于确定所述目标模型参数的表达式语句;处理模块,用于基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;脚本执行模块,用于执行所述处理后的脚本,以获取所述钩子函数截取到的所述表达式语句的执行结果;注释模块,用于根据所述表达式语句的执行结果,对所述表达式语句进行注释;显示模块,用于向用户显示注释后的原始脚本。可选的,所述钩子函数包括第一钩子函数,所述第一钩子函数用于截取对应的表达式语句执行时的执行结果;处理模块,具体用于:
将拷贝的原始脚本转换为语法树;基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理,得到处理后的脚本;其中,所述表达式节点为原始脚本中表达式语句对应的节点。
可选的,处理模块,具体用于:
将拷贝的原始脚本转换为语法树;基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理;遍历所述语法树中各个代码块节点,将第二钩子函数添加至拷贝的原始脚本的各个代码块中;其中,所述代码块节点为所述原始脚本中代码块对应的节点。
可选的,所述装置还包括:
调色模块,用于在所述处理后的脚本之后,基于所述第二钩子函数的执行结果,确定所述原始脚本被执行的代码块,将所述原始脚本被执行的代码块的颜色调整为预设颜色。
相应的,显示模块,具体用于:
向用户显示颜色调整以及注释后的原始脚本。
可选的,所述装置还包括:
路径生成模块,用于在基于第二钩子函数的执行结果,确定所述原始脚本被执行的代码块之后,根据所述原始脚本被执行的代码块,生成并显示所述原始脚本的执行路径。
可选的,脚本获取模块,具体用于:
显示模型的目标模型参数对应的参数化公式对应的按键;监听所述参数化公式对应的按键的事件;当检测到参数化公式对应的按键的点击事件时,获取并拷贝所述参数化公式的原始脚本;其中,参数化公式用于表征所述模型至少两个参数的对应关系。
可选的,所述装置还包括:
更新模块,用于当检测到模型的第一参数被更新时,基于新的第一参数,对所述第一参数对应的参数化公式的原始脚本进行初始化;运行初始化后的原始脚本,以确定所述模型的至少一个第二参数;根据所述新的第一参数和所述至少一个第二参数,更新显示的模型。
本申请实施例提供的脚本处理装置,可用于执行上述图7对应的任意实施例提供的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图8为本申请实施例提供的一种脚本处理终端的结构示意图,如图8所示,本实施例的提供的脚本处理终端包括:
至少一个处理器810;以及与所述至少一个处理器通信连接的存储器820;其中,所述存储器820存储有计算机执行指令;所述至少一个处理器810执行所述存储器存储的计算机执行指令,以使所述电子设备执行如前述任一实施例提供的方法。
可选的,存储器820既可以是独立的,也可以跟处理器810集成在一起。
在一个实施例中,脚本处理终端还包括显示器,用于显示采用本申请提供的方法处理后的原始脚本,如注释后的原始脚本、颜色调整以及注释后的原始脚本。
在一个实施例中,该显示器还用于显示模型设计页面。
本实施例提供的脚本处理终端的实现原理和技术效果可以参见前述各实施例,此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当所述计算机执行指令被处理器执行时,可以实现前述任一实施例提供的方法。
本申请实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前述任一实施例提供的方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(Central Processing Unit,简称CPU),还可以是其它通用处理器、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称ASIC)中。当然,处理器和存储介质也可以作为分立按键存在于电子设备或主控设备中。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例提供的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。

Claims (11)

1.一种脚本处理方法,其特征在于,包括:
基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;
执行所述处理后的脚本,以获取所述钩子函数截取到的所述原始脚本的各表达式语句的执行结果;
根据各表达式语句的执行结果,对所述原始脚本的各表达式语句进行注释,并显示注释后的原始脚本。
2.根据权利要求1所述的方法,其特征在于,所述钩子函数包括第一钩子函数,所述第一钩子函数用于截取对应的表达式语句执行时的执行结果;
基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本,包括:
将拷贝的原始脚本转换为语法树;
基于所述第一钩子函数,对所述语法树中表达式节点对应的原始脚本的代码进行处理,得到处理后的脚本;
其中,所述表达式节点为原始脚本中表达式语句对应的节点。
3.根据权利要求2所述的方法,其特征在于,所述钩子函数还包括第二钩子函数,所述第二钩子函数用于截取所述原始脚本被执行的代码块;
在将拷贝的原始脚本转换为语法树之后,所述方法还包括:
遍历所述语法树中各个代码块节点,将第二钩子函数添加至拷贝的原始脚本的各个代码块中;
其中,所述代码块节点为所述原始脚本中代码块对应的节点。
4.根据权利要求3所述的方法,其特征在于,在所述处理后的脚本之后,所述方法还包括:
基于所述第二钩子函数的执行结果,确定所述原始脚本被执行的代码块;
将所述原始脚本被执行的代码块的颜色调整为预设颜色。
5.根据权利要求4所述的方法,其特征在于,在基于第二钩子函数的执行结果,确定所述原始脚本被执行的代码块之后,所述方法还包括:
根据所述原始脚本被执行的代码块,生成并显示所述原始脚本的执行路径。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
显示模型被选中的部件对应的参数化公式对应的按键;
监听所述参数化公式对应的按键的事件;
当检测到参数化公式对应的按键的点击事件时,拷贝所述参数化公式的原始脚本;
其中,参数化公式用于表征所述模型至少两个参数的对应关系。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当检测到模型的第一参数被更新时,基于新的第一参数,对所述第一参数对应的参数化公式的原始脚本进行初始化;
运行初始化后的原始脚本,以确定所述模型的至少一个第二参数;
根据所述新的第一参数和所述至少一个第二参数,更新显示的模型。
8.一种脚本处理方法,其特征在于,包括:
获取并拷贝用户输入的目标模型参数对应的原始脚本,其中,所述原始脚本包含用于确定所述目标模型参数的表达式语句;
基于钩子函数对拷贝的原始脚本进行处理,得到处理后的脚本;执行所述处理后的脚本,以获取所述钩子函数截取到的所述表达式语句的执行结果;
根据所述表达式语句的执行结果,对所述表达式语句进行注释;
向用户显示注释后的原始脚本。
9.一种脚本处理终端,其特征在于,包括:
至少一个处理器,以及与所述至少一个处理器通信连接的存储器;
所述存储器存储有计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-8任一项所述的方法。
11.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一项所述的方法。
CN202210470940.1A 2022-04-28 2022-04-28 脚本处理方法、终端、存储介质及程序产品 Pending CN114840251A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210470940.1A CN114840251A (zh) 2022-04-28 2022-04-28 脚本处理方法、终端、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210470940.1A CN114840251A (zh) 2022-04-28 2022-04-28 脚本处理方法、终端、存储介质及程序产品

Publications (1)

Publication Number Publication Date
CN114840251A true CN114840251A (zh) 2022-08-02

Family

ID=82567066

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210470940.1A Pending CN114840251A (zh) 2022-04-28 2022-04-28 脚本处理方法、终端、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN114840251A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115951868A (zh) * 2022-11-11 2023-04-11 芯华章科技(北京)有限公司 执行脚本命令的方法、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115951868A (zh) * 2022-11-11 2023-04-11 芯华章科技(北京)有限公司 执行脚本命令的方法、设备及存储介质
CN115951868B (zh) * 2022-11-11 2024-03-12 芯华章科技(北京)有限公司 执行脚本命令的方法、设备及存储介质

Similar Documents

Publication Publication Date Title
CN107844299B (zh) 一种Web应用开发工具的实现方法
US9612806B2 (en) Verification of computer-executable code generated from a model
US6961924B2 (en) Displaying variable usage while debugging
CN112650766B (zh) 数据库数据操作的方法、系统及服务器
Hunter et al. ergm. userterms: A Template Package for Extending statnet
US20030131342A1 (en) Debugger with activity alert
EP2870531A2 (en) Query-based software system design representation
US20130036129A1 (en) Search Utility Program for Software Developers
WO2019109556A1 (zh) cube文件的创建方法、装置、存储介质及终端
Mengerink et al. Empowering OCL research: a large-scale corpus of open-source data from GitHub
CN114840251A (zh) 脚本处理方法、终端、存储介质及程序产品
CN116048480B (zh) 一种基于代码工具自动生成图表的方法及装置
CN111460235A (zh) 图谱数据的处理方法、装置、设备及存储介质
US7900191B1 (en) System and method of using an active link in a state programming environment to locate an element in a graphical programming environment
US20230195825A1 (en) Browser extension with automation testing support
Liu et al. Automated pattern-directed refactoring for complex conditional statements
CN112597011B (zh) 一种基于多语言的算子测试用例生成和优化方法
CN115033436A (zh) 页面测试方法及装置、电子设备、存储介质
CN104850494B (zh) 一种用于存储系统测试的方法与设备
CN114860759A (zh) 一种数据处理方法、装置、设备及可读存储介质
CN114564773A (zh) 一种基于bim模型的构件筛选检查方法和系统
JP3516843B2 (ja) データベースアクセス方法
CN113139372A (zh) 信息处理装置、存储介质及信息处理方法
CN112015423A (zh) 数据处理系统及方法
CN114138425B (zh) 一种基于公式生成表单的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination