CN114741275A - 一种设备调试方法、装置和设备 - Google Patents
一种设备调试方法、装置和设备 Download PDFInfo
- Publication number
- CN114741275A CN114741275A CN202111237918.4A CN202111237918A CN114741275A CN 114741275 A CN114741275 A CN 114741275A CN 202111237918 A CN202111237918 A CN 202111237918A CN 114741275 A CN114741275 A CN 114741275A
- Authority
- CN
- China
- Prior art keywords
- function
- equipment
- debugging
- information
- identifier
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种设备调试方法、装置和设备,所述方法包括:在第一设备上的调试程序时,第一设备在执行第一函数中发生第一调试中断,显示第一图形化堆栈信息,该第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识;在第一调试中断发生后继续执行调试程序,第一设备在第一函数中调用第二设备;在第二设备的第二函数发生第二调试中断时显示第二图形化堆栈信息,该第二图形化堆栈信息包括第一设备和第二设备的设备标识、以及第一函数、第二函数的函数标识。本方法以可视化的形式显示图形化堆栈信息,可直观呈现源设备到目标设备函数调用关系以及当前执行到的方法,且不同调试设备使用不同颜色标识,有利于对分布式调用流程的追踪。
Description
本申请要求于2021年1月7日提交中国专利局、申请号为202110020068.6、发明名称为“一种设备调试方法、装置和设备”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及软件程序开发技术领域,尤其是涉及一种设备调试方法、装置和设备。
背景技术
随着终端设备的普及和应用,现代家庭环境和工作环境中越来越多地需要不用设备之间的通信交互。在未来,终端设备基于鸿蒙操作系统(Harmony OS)将具备1+8+N全场景多设备能力交互,实现从源设备到目标设备的能力调用。
其中,一种可能实现场景是,用户需求的服务功能随用户位置改变而变化。比如上车前,用户在手机上的导航应用APP中规划好行驶路线,行车时,需要将手机APP上的行驶线路自动迁移到车辆的车载屏幕上,并通过车载屏幕来展示行驶路线,当用户下车后,再将原来车载屏幕上的行驶路线等信息自动迁移回用户的手机终端上,从而达到导航服务跟随人走的目的。此外,另一种可能的场景是,手机终端的某一应用与室内设备,比如智慧屏电视之间的联动,从而实现能力互通、互助。例如,通过智慧屏电视的摄像头在智慧屏电视上拍摄的用户照片,需要将该照片回传到用户手机上。
目前,在集成开发环境(Integrated Development Environment,IDE)中,开发者通常是查看调试窗口中的堆栈列表来追踪溯源代码,堆栈列表不能直观显示程序代码的函数调用关系,尤其是有分布式调用,涉及多设备、多模块的情况下,不利于开发者对代码的分析定位。因此基于分布式应用调试场景,直观呈现设备间的分布式调用堆栈显得至关重要。
发明内容
本申请提供了一种设备调试方法和装置,用于实现多个设备之间的能力调用。具体地,公开了以下技术方案:
第一方面,本申请提供了一种设备调试方法,所述方法包括:获取在调试第一设备过程中得到的第二设备的接口信息;根据所述第二设备的接口信息在第一映射关系中查找所述第二设备被调用接口的代码行,所述第一映射关系包括所述第二设备的接口信息和所述第二设备被调用接口代码行的对应关系;根据所述第二设备被调用接口的代码行对所述第二设备进行调试,并验证调试结果,在所述调试结果符合预期的情况下,跳转回到对所述第一设备进行调试。
本方法,当需要调用第二设备接口时,根据预先建立的映射关系,快速地查找第二设备被调用接口的代码行,使得第二设备利用被调用的代码行执行第二设备应用包中的程序代码,从而实现对第二设备能力的调用。
另外,本方法不再需要开发者启动第二设备,查找第二设备被调用接口的代码行,对第二设备进行调试,上述一系列过程都可自动实现,从而对外呈现出与本地第一设备调用接口能力一致的调试流程,提高了能力调用效率。
结合第一方面,在第一方面的一种可能的实现方式中,所述第二设备的接口信息包括:设备类型、包名、接口名和接口参数类型等信息。
根据所述第二设备的接口信息在第一映射关系中查找所述第二设备被调用接口的代码行,包括:根据所述第二设备的接口信息中的设备类型确定所述第二设备;按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,在所述第一映射关系中查找所述第二设备被调用接口的代码行。
结合第一方面,在第一方面的另一种可能的实现方式中,所述按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,在所述第一映射关系中查找所述第二设备被调用接口的代码行,包括:所述按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,确定所述第一设备的类中所对应的方法名;根据所述方法名在所述第一映射关系中查找所述第二设备被调用接口的代码行。
结合第一方面,在第一方面的又一种可能的实现方式中,根据所述第二设备的接口信息中的设备类型确定第二设备,包括:如果所述第二设备的接口信息中的所述设备类型与用户期望的设备类型相同,则确定所述设备类型对应的第二设备可用。本实现方式中确定的第二设备为可用设备,从而避免发生查找到的第二设备不可用的情况,本方法提高查找第二设备的可靠性。
结合第一方面,在第一方面的又一种可能的实现方式中,所述获取在调试第一设备过程中得到的第二设备的接口信息,包括:自检测所述第一设备的调试结果,得到所述第二设备的接口信息;或者,接收所述第一设备在调试模式下,运行第一安卓应用包时输出的所述第二设备的接口信息。
本实现方式中,当利用第一设备中存储的映射关系表为第三设备查找第二设备的接口信息时,可节约第二设备的处理过程,减少了第三设备的运算量和耗电量。
结合第一方面,在第一方面的又一种可能的实现方式中,上述方法还包括:在所述第二设备被调用接口的代码行上添加断点信息;以及,在验证所述调试结果符合预期的情况下,清除所述断点信息。
本实现方式能够在第二设备被调用接口的代码行上自动打断点和删除断点信息,不需要开发者手动添加断点信息和删除断点信息,从而提高了能力调用效率。
第二方面,本申请还提供了一种设备调试装置,所述装置包括:获取单元,用于获取在调试第一设备过程中得到的第二设备的接口信息;处理单元,用于根据所述第二设备的接口信息在第一映射关系中查找所述第二设备被调用接口的代码行,所述第一映射关系包括所述第二设备的接口信息和所述第二设备被调用接口代码行的对应关系;调试单元,用于根据所述第二设备被调用接口的代码行对所述第二设备进行调试,并验证调试结果,以及在所述调试结果符合预期的情况下,跳转回到对所述第一设备进行调试。
结合第二方面,在第二方面的一种可能的实现方式中,所述第二设备的接口信息包括:设备类型、包名、接口名和接口参数类型。所述处理单元,具体用于根据所述第二设备的接口信息中的设备类型确定所述第二设备,按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,在所述第一映射关系中查找所述第二设备被调用接口的代码行。
结合第二方面,在第二方面的另一种可能的实现方式中,所述处理单元,具体用于所述按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,确定所述第一设备的类中所对应的方法名;根据所述方法名在所述第一映射关系中查找所述第二设备被调用接口的代码行。
结合第二方面,在第二方面的又一种可能的实现方式中,所述处理单元,具体用于在所述第二设备的接口信息中的所述设备类型与用户期望的设备类型相同时,确定所述设备类型对应的第二设备可用。
结合第二方面,在第二方面的又一种可能的实现方式中,所述获取单元,具体用于自检测所述第一设备的调试结果,得到所述第二设备的接口信息,或者,接收所述第一设备在调试模式下,运行第一安卓应用包时输出的所述第二设备的接口信息。
结合第二方面,在第二方面的又一种可能的实现方式中,所述处理单元,还用于在所述第二设备被调用接口的代码行上添加断点信息;以及,在验证所述调试结果符合预期的情况下,清除所述断点信息。
第三方面,本申请还提供一种设备调试方法,该方法应用于源设备,比如第一设备,该方法包括:接收第三设备发送的请求消息,所述请求消息包括待调试设备的设备标识;根据所述待调试设备的设备标识在第二映射关系中确定所述第二设备的接口信息,所述第二映射关系包括设备标识与包名、接口名和接口参数类型之间的对应关系;将所述第二设备的接口信息发送给所述第三设备。
本方面,利用源设备中存储的映射关系表为第三设备查找第二设备的接口信息,从而为第三设备查找第二设备被调用接口的代码行提供依据。并且在第一设备侧完成对第二设备的接口信息的查找过程,可节约第二设备的处理过程,减少了第三设备的运算量和耗电量。
第四方面,本申请还提供一种设备调试装置,该装置应用于源设备,比如第一设备,该装置包括:接收单元,用于接收第三设备发送的请求消息,所述请求消息包括待调试设备的设备标识;处理单元,用于根据所述待调试设备的设备标识在第二映射关系中确定所述第二设备的接口信息,所述第二映射关系包括设备标识与包名、接口名和接口参数类型之间的对应关系;发送单元,用于将所述第二设备的接口信息发送给所述第三设备。
第五方面,本申请还提供一种设备调试系统,该系统包括:第一设备、第二设备和第三设备,其中所述第一设备为源设备,第二设备为被调试设备,或者称目标设备,第三设备为调试装置,具备IDE功能模块。该系统可实现前述第一方面以及第一方面任意一种实现方式中的方法,具体地,该方法包括:
第三设备对第一设备进行调试,获取在调试第一设备过程中得到的第二设备的接口信息,根据所述第二设备的接口信息在第一映射关系中查找所述第二设备被调用接口的代码行,所述第一映射关系包括所述第二设备的接口信息和所述第二设备被调用接口代码行的对应关系;以及,第三设备进入所述第二设备被调用的接口代码行,向第二设备推送应用程序包;
第二设备接收第三设备发送的应用程序包,启动调试模式,加载并运行应用程序包中的代码,并向第三设备发送调试结果;
第三设备接收第二设备发送的调试结果,并验证该调试结果,在验证该调试结果符合预期的情况下,跳转回到对第一设备进行调试。
第六方面,本申请提供了一种调试方法,该方法可用于跨设备调试,所述方法包括:在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断时,显示第一图形化堆栈信息,所述第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识;在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备;在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识。
其中,函数标识用于表示设备运行堆栈的函数信息,设备标识用于区分函数标识所属的设备。
本方面提供的方法,在调试中断后,以可视化的形式显示图形化堆栈信息,该堆栈信息中实时直观呈现源设备到目标设备函数调用关系,堆栈可视化图展示了每个设备调试的模块以及当前执行到的方法,且不同调试设备使用不同颜色标识,从而使开发者对分布式的调用流程一目了然。
结合第六方面,在第六方面的一种可能的实现方式中,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色。
所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息显示所述第一颜色;所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息显示所述第二颜色。
本实现方式,通过不同的颜色标识不同设备的设备标识、函数标识,从而便于区分和直观辨认。
结合第六方面,在第六方面的另一种可能的实现方式中,在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息后,还包括:根据所述第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
或者,所述第三函数是预定义的第一设备调用第二设备的接口函数。
可选的,所述第三函数是onConnect函数。
本实现方式,仅显示被调用的最深合并堆栈图形显示的函数,即保留与业务相关的函数,提出与业务不相关的冗余信息,从而简化的表内容,节约存储资源,同时还避免冗余信息造成干扰。
结合第六方面,在第六方面的又一种可能的实现方式中,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,包括:在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数;其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
可选的,所述第三函数是connectAbility函数。
结合第六方面,在第六方面的又一种可能的实现方式中,所述第一设备在所述第一函数中调用第二设备,包括:根据堆栈信息确定所述第一设备调用所述第二设备。
结合第六方面,在第六方面的又一种可能的实现方式中,根据堆栈信息确定所述第一设备调用所述第二设备,包括:根据第四函数或者所述第三函数确定所述第二设备被调用,所述第四函数是所述第三函数的上级函数;根据来自所述第三函数或所述第四函数参数信息确定所述第二设备通过所述第一函数被调用。
进一步地,所述第三函数为所述第二函数,或者为所述第二函数的上级函数。
本方面提供的方法,为给开发者提供了完整的分布式调用堆栈信息,且将分布式堆栈信息以第一、第二图形化堆栈信息的形式可视化显示,方便开发者追踪溯源分布式调用的执行流程。
第七方面,本申请还提供了一种调试装置,所述装置包括:
显示单元,用于在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断,显示第一图形化堆栈信息,所述第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识;
处理单元,用于在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备;
所述显示单元,还用于在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识;
其中,函数标识用于表示设备运行堆栈的函数信息,设备标识用于区分函数标识所属的设备。
结合第七方面,在第七方面的一种可能的实现方式中,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色;
所述显示单元,还用于将所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息通过所述第一颜色显示,以及,将所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息通过所述第二颜色显示。
结合第七方面,在第七方面的另一种可能的实现方式中,所述显示单元,还用于在显示所述第二图形化堆栈信息后,根据所述第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
结合第七方面,在第七方面的又一种可能的实现方式中,所述显示单元,还用于在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数。
其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
结合第七方面,在第七方面的又一种可能的实现方式中,所述处理单元,还根据堆栈信息确定所述第一设备调用所述第二设备。
结合第七方面,在第七方面的又一种可能的实现方式中,所述处理单元,还用于根据第四函数或者所述第三函数确定所述第二设备被调用,以及根据来自所述第三函数或所述第四函数参数信息确定所述第二设备通过所述第一函数被调用,所述第四函数是所述第三函数的上级函数。
可选的,所述第三函数为所述第二函数,或者为所述第二函数的上级函数。
第八方面,本申请还提供了一种电子设备,该设备包括处理器和存储器,其中,处理器与存储器耦合,存储器用于存储计算机程序指令;处理器用于执行存储器中存储的所述指令,以使得该电子设备执行前述第一方面及第一方面各种实现方式和/或第六方面及第六方面各种实现方式中的方法。
此外,所述电子设备中还包括接口电路,所述接口电路用于实现该设备与外部的其它模块之间的通信。
可选的,所述处理器和存储器可以集成在一个处理芯片或者芯片电路。
第九方面,本申请还提供了一种计算机可读存储介质,该存储介质中存储有指令,使得当指令在计算机或处理器上运行时,可以用于执行前述第一方面以及第一方面各种实现方式,和/或第六方面及第六方面各种实现方式中的方法。
另外,本申请还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,当该指令被计算机或处理器执行时,可实现前述第一方面以及第一方面各种实现方式,和/或第六方面及第六方面各种实现方式中的方法。
需要说明的是,上述第二方面至第九方面的各种实现方式的技术方案所对应的有益效果与前述第一方面以及第一方面的各种实现方式的有益效果相同,具体参见上述第一方面以及第一方面的各种实现方式中的有益效果描述,不再赘述。
附图说明
图1为本申请实施例提供的一种多设备调试的系统架构的示意图;
图2为本申请实施例提供的一种终端设备的结构示意图;
图3为本申请实施例提供的一种电子设备的软件结构示意图;
图4为本申请实施例提供的一种调试第一设备和第二设备的流程示意图;
图5为本申请实施例提供的一种源设备调用目标设备功能的流程图;
图6为本申请实施例提供的一种设备调试方法的信令流程图;
图7为本申请实施例提供的一种获取第二设备的接口信息的流程图;
图8为本申请实施例提供的另一种获取第二设备的接口信息的流程图;
图9为本申请实施例提供的一种IDE模块的结构示意图;
图10为本申请实施例提供的一种调试方法的流程图;
图11为本申请实施例提供的一种图形化堆栈信息的示意图;
图12为本申请实施例提供的另一种图形化堆栈信息的示意图;
图13为本申请实施例提供的又一种图形化堆栈信息的示意图;
图14为本申请实施例提供的一种合并生成堆栈列表过程的流程图;
图15为本申请实施例提供的一种合并生成堆栈列表和展示的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中的技术方案作进一步详细的说明。
在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的应用场景进行说明。
本申请涉及多设备调试的应用场景,参见图1,为一种多设备调试的应用场景示意图。该场景中包括第一设备、第二设备和第三设备。其中,第三设备可通过调试接口对第一设备和第二设备进行调试,第一设备和第二设备之间可利用通信接口互联。
第一设备和第二设备可以是一种终端设备,该终端设备可以是一种便携式设备,比如智能手机、智慧屏电视(TV)、笔记本电脑、平板电脑、个人计算机(personal computer,PC)、个人数字助理(personal digital assistant,PDA),可折叠终端、车载终端、车机板子、具备无线通讯功能的可穿戴设备(例如智能手表或手环)、用户设备(user device)或用户设备(user equipment,UE)、以及增强现实(augmented reality,AR)或者虚拟现实(virtual reality,VR)设备、耳机等。本申请的实施例对终端设备的具体设备形态不做限定。另外,上述各种终端设备中包括但不限于搭载苹果(IOS)、安卓(Android)和微软(Microsoft)等。
图2示出了一种终端设备的结构示意图,该终端设备可以包括处理器21和存储器22,此外,还包括:调试接口23、通信接口24和输入/输出装置25等,并且这些模块可通过总线相连接。
具体地,处理器21可以包括一个或多个处理单元,例如:处理器21可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
存储器22用于存储和交换各类数据或软件,包括应用程序包、调试指令、被调接口的相关信息等。此外,存储器22中还可以存储有计算机程序和代码。具体地,存储器22可以包括易失性存储器(volatile memory),例如随机存取内存(Random Access Memory,RAM);还可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(Hard Sisk Drive,HDD)或固态硬盘(Solid-State Drive,SSD),存储器还可以包括上述种类的存储器的组合。
可选的,存储器22可以被设置在处理器21中,用于存储程序指令和数据。在一些实施例中,处理器21中的存储器为高速缓冲存储器。该存储器22可以保存处理器21刚用过或循环使用的指令或数据。如果处理器21需要再次使用该指令或数据,可从存储器22中直接调用,避免重复存取,减少了等待时间,提高处理效率。
在一些实施例中,处理器21还可以包括一个或多个接口。所述接口可以包括调试接口23和通信接口24。其中,调试接口23可以是通用串行总线(universal serial bus,USB)接口。通信接口24可以是使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(Wireless LocalArea Network,WLAN)、虚拟可扩展局域网(Virtual Extensible Local Area Network,VXLAN)等。比如第一设备通过通信接口24与第二设备进行无线通信。
此外,处理器21上还可以连接其他接口,比如集成电路(inter-integratedcircuit,I2C)接口,集成电路内置音频(inter-integrated circuit sound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universalasynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobileindustry processor interface,MIPI),通用输入输出(general-purpose input/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口等。
输入/输出装置25,包括显示屏、按键(比如开机键,音量键)、键盘、鼠标、麦克风、扬声器、受话器等。比如,显示屏作为一种输出装置,用于图形用户界面(Graphical UserInterface,GUI)等。在一些实施例中,上述设备可以包括1个或N个显示屏,N为大于1的正整数。键盘作为一种输入装置,可用于编译程序指令。
应理解,上述终端设备还可以包括,电源管理模块,电池,移动通信模块,无线通信模块,音频模块,扬声器,传感器模块以及摄像头等更多或更少的模块。本实施例示意的结构并不构成对终端设备的具体限定。在本申请另一些实施例中,该终端设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图2所示的部件可以以硬件,软件或软件和硬件的组合实现。
另外,第三设备是一种电子设备,具体可以是一种终端设备,比如笔记本电脑、平板电脑、PC;或者还可以是一种网络设备,比如服务器、管理器等。该电子设备的结构与前述图2所示的终端设备的结构相同,或者还可以包含其他更多或更少的模块,本实施例对其不予限定。所述第三设备中搭载Linux、Windows或Mac等操作系统。
在第三设备的软件架构中包括应用程序层,该应用程序层中包括IDE模块,所述IDE模块可用于提供程序开发环境的应用程序,主要包括菜单、工具栏和一些窗口,比如可以包括代码编辑器(Editor)、编译器、调试器(Debugger)和GUI等工具。IDE模块集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++Builder、Delphi系列等。该程序可以独立运行,也可以和其它程序并用。IDE多被用于开发超文本标记语言(Hypertext markup language,HTML)应用软件。
此外,第三设备的软件结构还可以包括其他层,比如图3所示,是本申请实施例提供的一种电子设备的软件结构示意图。该软件结构包括若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,一种软件结构从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
其中,应用程序层可以包括IDE模块,以及一系列应用程序包,比如图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。比如应用程序框架层可以包括窗口管理器,活动管理器、内容提供器,电话管理器,资源管理器,通知管理器,视图系统等。
其中,窗口管理器又可以叫窗口管理服务(window manager service,WMS)。窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。电话管理器用于提供终端设备的通信功能。例如通话状态的管理(包括接通,挂断等)。
安卓运行时(Android Runtime)包括核心库和虚拟机,运行于Linux、Windows或Mac等操作系统中。Android runtime负责安卓系统的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理等功能。
应用程序框架层以下的系统库和内核层等可称为底层系统,底层系统中包括用于提供显示服务的底层显示系统,例如,底层显示系统包括内核层中的显示驱动以及系统库中的表面管理器(surface manager)等。其中,表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。系统库可以包括多个功能模块。例如:surface manager,三维图形处理库(例如:OpenGL ES),媒体库(Media Libraries),2D图形引擎(例如:SGL)等。三维图形处理库用于实现三维图形绘图,图像渲染,合成和图层处理等。
内核层,又称硬件层,它是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动等。
应理解,上述第一设备和第二设备中也可以采用如图3所示的软件结构,本实施例对此不予限制。
图3所示的IDE模块可以理解为是基于操作系统层编写的一个应用,第三设备利用该IDE模块实现对第一设备和第二设备的功能调用。可选的,第三设备利用USB接口分别与第一设备和第二设备相连接,并且按照TCP/IP传输协议与第一设备和第二设备通信。所述TCP/IP传输协议又称作网络通讯协议。
一种建立连接的方式是,第三设备作为一个客户端(client)想要访问另一个客户端,比如第一设备时,会将请求的域名上报给网络服务端(server),server端接收后会根据自身数据库当中存储的域名与IP地址的映射关系,查找出与其关联的IP地址,比如本示例中查找到第一设备的IP地址,然后将该第一设备的IP地址发送给第三设备。第三设备接收到server端的响应数据后,解析出第一设备的IP地址,并与第一设备建立网络连接,实现特定的网络功能。同理地,该方式也同样适用于第三设备与第二设备之间网络连接的建立,此处不再赘述。
可选的,第三设备还可以通过局域网与第一设备、第二设备建立连接,实现能力调用。
第一设备与第二设备之间的互联则可利用各自的无线通信模块来实现,具体地,无线通信模块可以提供应用在终端设备上的包括WLAN,如无线保真(wireless fidelity,WiFi)网络,蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellitesystem,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near fieldcommunication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块可以是集成至少一个通信处理模块的一个或多个器件。所述无线通信模块还可以从处理器接收待发送的信号,对其进行调频、放大,经天线转为电磁波辐射出去。
本实施例主要涉及第三设备对第一设备和第二设备的功能调用,具体地,第三设备的IDE模块可以通过指令控制终端设备执行相应操作,对各个终端设备进行调试。
具体地,以第三设备利用调试接口对第一设备和第二设备进行调试为例,如图4所示,第一设备为调试设备,第二设备为被调试设备。第三设备对第一设备和第二设备的调试过程包括:
准备阶段:
开发者在IDE模块的代码编辑器中编写程序,该程序的源码目录可称为一个模块(Module),运行该程序代码可以实现某种功能。通过IDE模块的构建功能,将编写好的程序构建成一个Android安装包,比如安卓应用程序包(Android application package,APK)。该APK是类似Symbian Sis或Sisx的文件格式,通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。终端设备通过获取并运行该APK,来实现源码中的相应功能。
调试阶段:
第1步:第三设备在IDE模块的调试器中设置一系列调试参数,这些调试参数主要用于选择一个可运行该APK的终端设备,第三设备启动对第一设备的调试流程,按照TCP/IP协议规定调用第二设备的接口,检验第二设备的接口反馈的调试结果是否符合预期。其中,第一设备处于调试状态,第二设备正处于运行状态。
第2步:如果第三设备验证从第二设备接口反馈的调试结果不符合预期,则手动或自动启动第二设备,重新调试第二设备的接口。此时,第一设备处于运行状态。
第3步:如果第二设备接口反馈的调试结果符合预期,则表明对第二设备的接口调试成功,再切回到对第一设备的调试流程。如果第二设备接口反馈的调试结果仍然不符合预期,则跳回执行上述第2步。
上述方法在多设备多模块调试过程中,开发者需要在多个单模块场景中来回反复切换,不断检验第二设备接口的调试结果是否符合预期,只有当调试结果正确后才能继续调试第一设备。另外,还需要开发者主动启动第二设备的调试会话,并进行复杂繁琐的菜单配置,导致调试效率低、速度慢,为了提高调试效率,避免手动启动第二设备,调试第二设备的接口,本申请实施例提供了如下方法。
参见图5所示,为本申请实施例提供的一种源设备调用目标设备功能的流程图。以第一设备为源设备,第二设备为目标设备,IDE模块可作为第三设备举例,该流程图中包括以下方法步骤:
在准备阶段,当APK编译构建完成,对于多模块(module)的系统选择其中一个功能模块,设置调试参数,单击调试按钮,开始源设备调试。
S1:在源设备进入目标设备需要被调用的接口代码行,等待单步进入该目标设备。
S2:判断该目标设备是否可用。如果可用,则执行S3;如果不可用,则结束流程。
S3:在所述目标设备可用的情况下,动态拉起目标设备并向该目标设备推送应用程序包,比如APP。
S4:IDE模块自动在该目标设备被调用接口代码行上自动地添加断点信息。
S5:判断目标设备接口的断点是否进入。如果是,则执行S6,否则,返回步骤S3,启动重试容错机制。
具体地,如果IDE模块接收到一个返回值,比如一个标记flag,则表示进入成功了,如果没收到返回的标记,则表示进入失败,返回至步骤S3。
S6:进入目标设备后,清除IDE模块自动添加的断点信息,并开始调试目标设备。
本方法调试过程中,不再需要开发者手动启动目标设备调试以及添加断点信息,使得整个调用流程对外呈现出一致的效果,提高了对目标设备能力调用的效率。
下面实施例对第三设备调试第一设备和第二设备的方法进行详细说明。
本方法能够实现第三设备对第二设备被调用接口的自动查找,并通过该被调用的接口达到第一设备调用第二设备期望功能的目的,使得第一设备上的某一应用的功能在第二设备上实现。其中,第一设备为调试设备,或称源设备;第二设备为被调试设备,或称目标设备,第三设备为具备IDE模块功能的设备。
具体地,如图6所示,方法包括:
101、第三设备获取在调试第一设备过程中得到的第二设备的接口信息。
其中,该接口信息中包括第二设备的设备类型、包名、接口名和接口参数类型等信息。第二设备的设备类型可以是上述终端设备举例的智能手机、TV、笔记本电脑、平板电脑、PC等任意一种。
在第三设备的IDE模块编译、构建完成一个应用程序包,比如第一APK,并设置了调试参数后,单击调试按钮(Debug模式启动),此时第一设备进入调试模式。其中,每个应用程序包对应一个模块(module)功能。当需要调用某一功能时,选择该功能所对应的APK,并对其在终端设备上进行调试,从而实现该模块的相应功能。第一APK所对应的功能包括但不限于相机,图库,日历,通话,导航等。
第一设备在调试模式下,加载并运行第一APK,输出需要被调用的第二设备的接口信息。另外,第一设备在调试过程中会根据第三设备下发的指令,停留在第二设备被调用接口的代码行,并等待单步进入第二设备。
102、第三设备根据所述第二设备的接口信息确定第二设备。
具体地,第三设备根据第二设备的接口信息中的设备类型(DeviceType),判断该第二设备是否可用,进一步地,判断该接口信息中的设备类型与用户期望的设备类型是否相同;如果相同,则确定该设备类型对应的第二设备可用。如果不相同,则确定该设备类型对应的第二设备不可用。
例如,当期望的设备的设备类型为智慧屏电视(TV)时,判断步骤101中接口信息中的DeviceType是否为TV,如果是,则确定该第二设备可用。如果否,则确定该第二设备不可用。此时,第三设备可以通过显示屏弹窗的形式提示用户第二设备不可用,等待用户选择其他可用的设备,或者取消当前的调试流程。
另外,如果根据DeviceType判断出有多个可用的第二设备,则可以从多个可用的第二设备中选择一个,具体地的选择方法可以是随机选择,或者通过弹窗的形式告知用户,请求用户从中选择一个。本实施例对从多个可用的第二设备中选择一个的具体方法不予限制。
103、按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,在所述第一映射关系中查找所述第二设备被调用接口的代码行。
其中,第一映射关系包括:第二设备的接口信息和第二设备被调用接口代码行的对应关系。进一步地,第二设备的接口信息为一种密钥“key”,第二设备被调用接口代码行作为需要查找的值“value”,则第一映射关系可以表示为Map<key,value>。且该Map可被预先存储在第三设备的存储介质中。具体地,步骤103包括:
103-1、在所述第二设备可用的情况下,第三设备建立与第二设备的调试会话,启动对该第二设备的调试流程。
103-2、第三设备按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,扫描整个第一设备的代码空间,识别第一设备的类中所对应的方法名。
103-3、根据所述方法名查找第二设备的类中相应的方法所在行,以及文件绝对路径。其中,该查找的方法所在行即为所述第二设备被调用接口所对应的代码行。
具体地,在步骤103-2之前,在IDE模块预先定义了一种命名规则,该命名规则中定义源设备调用目标设备接口的映射规则,源设备调用目标设备接口所在的方法,具体地,可以由多个字段组成的字符串来指示:字段1、字段2、字段3、字段4、字段5、......。
其中,字段1用于指示源设备需要调用目标设备,通过代码可表示为“RemoteDeviceCall”;字段2用于指示目标设备的设备类型,通过代码可表示为“DeviceType”;字段3用于指示包名,通过代码可表示为“className”;字段4用于指示类中对应的方法名,通过代码可表示为“methodName”;字段5用于指示接口参数类型,通过代码可表示为“type1、type2”等。且该接口参数类型和个数(字段5)可由用户自行设定。示例性地,按照上述预设命名规则形成的一个字符串为:
$$RemoteDeviceCall$$_DeviceType_com_***_className_methodName(type1 a,type2 b)。其中,“*”为隐藏字符,这里隐藏了字段3指示的包名。type1,表示接口参数类型1;type2,表示接口参数类型2,a和b表示两种具体的接口参数。
本实施例中,设源设备为第一设备,目标设备为第二设备。
按照上述定义的命名规则,在上述步骤103-2中,第三设备通过反射、IDE的程序结构接口(Program Structure Interface,PSI)等技术查找到整个第一设备代码空间中符合如上命名规则的包名、方法名和接口参数类型等。其中所述包名、方法名以及接口参数类型可作为“key”,第三设备根据所述包名、方法名以及接口参数类型(key)在第一映射关系“Map”中查找第一设备调用对应的文件绝对路径、文件(或第二设备的类中)中对应的方法行。具体地,利用PSI功能解析文件,创建语法和语义代码模型。本实施例中,利用反射技术查找出文件的绝对路径,然后根据所述方法名和所述文件的绝对路径,通过IDE的PSI技术确定文件(第二设备的类中)中对应的方法行。本实施例对上述利用反射技术、PSI技术查找的具体过程不详细描述。
其中,文件的绝对路径、文件中对应的代码行,以及设备名称等信息可作为“value”(值),与至少一个key建立第一映射关系,并存储在第三设备的存储介质中。
103-4、第三设备在所述第二设备被调用接口的代码行上自动添加断点信息。
一种实现方式是,第三设备依据查找的所述代码行,以及文件的绝对路径,通过jdb控件控制jvm在TargetDevice类中自动添加函数断点信息。
其中,Java提供的调试命令,IDE模块包装该调试命令,将断点信息发送给第二设备的jvm。即将断点指令发送给运行在第二设备上的jvm。由于Java程序都是运行在Java虚拟机上的,所以Java虚拟机又简称为“jvm”。此外,第二设备的各种操作都可通过jvm来控制的,本示例中,利用jvm中的jdb控件实现将断点信息自动添加在第二设备上。具体地,IDE模块通过jdb自动在第二设备的getName方法的第一行添加断点信息,当“Step into”时,则会停留在第二设备的getName的第一行。
另外,还可以通过其他方式添加断点信息,比如手动方式等。
需要说明的是,本实施例对上述步骤103-1,以及步骤103-2和103-3执行的先后顺序不予限制,即步骤103-1可以在步骤103-2和103-3之前执行,也可以在步骤103-2和103-3之后执行。但在执行步骤103-4之前,需要执行步骤103-1至103-3。
可选的,本实施例的方法还包括,第三设备实时地对存储的第一映射关系进行维护,当用户准备调试或者需要调用第二设备的接口时,第三设备就会启动并执行上述步骤103,以及将产生的断点信息都存储在存储介质中,以便在需要查找第二设备的接口信息时获取。
进一步地,在一具体实现方式中,第三设备可通过以下三段代码实现上述步骤103-1至103-4的方法,具体地,
第一段伪代码,按照命名规则设置第二设备的接口信息,具体为:
public String$$RemoteDeviceCall$$_tv_com_className_TargetDevicegetName(String first,String second)
其中,$$RemoteDeviceCall$$_tv_com_className_DesDevice_getName(Stringfirst,String second)的方法名中定义了目标设备(第二设备)的设备类型、包名、类名、方法名及接口参数类型。
第二段代码,调用第二设备的接口代码,具体为:
package com.className;
public class TargetDevice{public String getName(String first,Stringsecond){return first+second;}
其中,“TargetDevice”表示在第二设备中执行一段代码,其接口(getName方法名)会被第一设备调用。
第三段代码,查找第二设备被调用接口所对应的代码行,具体为:
SourceDevice sourceDevice=new SourceDevice(new TargetDevice())/解释:识别到sourceDevice类中含有
$$RemoteDeviceCall$$_tv_com_className_DesDevice_getName(String first,String second)方法名;
解释:依据方法名找到DesDevice类中相应的方法所在行以及文件全路径;
解释:依据方法所在行以及全路径就可以通过jdb在第二设备类中添加行断点/
String s=sourceDevice.$$RemoteDeviceCall$$_tv_com_className_DesDevice_getName("first","second");
System.out.println(s)}
其中,当第三设备检测到源设备代码中有如下命名规则的字符串时
(sourceDevice.$$RemoteDeviceCall$$_tv_com_***_DesDevice_getName),表示需要调用第二设备的接口,则可开始建立第一映射关系(Map),并通过接口的名字获取Map中value的内容,第三设备通过jdb自动在第二设备类中的getName方法的第一行添加断点信息,当Stepinto时,就会停留在第二设备的getName的第一行。
继续返回图6,上述方法还包括:
104、第三设备进入所述第二设备被调用的接口代码行,向第二设备推送应用程序包。比如所述应用程序包为第二APK,启动对第二设备的调试流程。
105、第二设备启动调试模式,加载并运行应用程序包中的代码,并输出调试结果。
具体地,第二设备从第二APK中的被调用的接口代码行开始执行第二APK中的程序代码,并得到相应的调试结果,从而实现了第一设备调用第二设备的某种功能。
另外,第二设备可以在步骤104进入第二设备被调用的接口代码行时启动调试模式,或者在步骤104之前启动调试模式,本实施例对此不予限制。
106、第二设备将所述调试结果反馈给第三设备。
可选的,还包括:第三设备清除在上述步骤103-4中自动添加的断点信息。
107、第三设备接收所述第二设备反馈的调试结果,检查该调试结果是否符合预期,如果符合预期,则说明对第二设备的接口调试正常,再切回到对第一设备的调试,使得第一设备可以从被调用目标接口代码行的下一行开始继续执行第一APK的程序代码,实现相应的功能。
具体地,第三设备在第二设备的接口调试正常情况下,向第一设备发送一个指令。第一设备接收到该指令后,跳转到第一设备调用目标接口代码行的下一行,并在该下一行中继续进行调试。比如,当第一设备接收到第三设备下发的指令后,会继续执行第N行之后的第N+1行的程序代码,实现第一设备中第一APK的相关功能。
本实施例提供的方法,当需要调用第二设备接口时,根据预先建立的映射关系,快速地查找第二设备被调用接口的代码行,使得第二设备利用被调用的代码行执行第二APK的程序代码,从而实现对第二设备能力的调用。
另外,本方法不再需要开发者启动第二设备,查找第二设备被调用接口的代码行,对第二设备进行调试以及打断点信息,上述一系列过程都可自动实现,从而对外呈现出与本地第一设备调用接口能力一致的调试流程,提高了能力调用效率。
本实施例中,对于上述步骤101包括以下两种可能的实现方式。
一种可能的实现方式是,第三设备自检测第一设备的调试结果,得到所述第二设备的接口信息。具体地,如图7所示,方法包括:
101-1、第三设备向所述第一设备推送第一应用程序包,比如第一APK。
101-2、第一设备开启调试模式,加载并运行第一应用程序包。
101-3、第一设备输出运行结果,所述运行结果包括第二设备的接口信息,即第二设备被调用接口的相关信息。
具体地,第一设备加载并运行第一APK时,按照第三设备的指示逐行地运行并输出运行结果,即第一设备每执一行第一APK的程序代码,便输出一个运行结果,从而便于查找每一行程序代码是否有误。当第一设备运行到需要调用第二设备接口的代码行时,暂停运行第一APK的程序代码。例如在第一设备运行到整段程序代码的第N行时,接收到第三设备发送的“暂停”指令,则在该第N行代码起始位置暂停。所述第N行代码为需要调用第二设备接口的代码行,且这个代码行第三设备预先知道。
当第一设备接收到第三设备发送的“step into”指令时,运行当前指令所在的程序代码行,并输出第二设备被调用接口的相关信息(即第二设备的接口信息)。第二设备的接口信息中包括:第二设备被调用接口的接口名,包名、第二设备的设备类型,以及其他参数等。
其中,“step into”指令用于指示程序需要从第一设备进入到第二设备,即启动调用第二设备接口的代码行的流程。此时,第一设备当前运行的程序被挂起,第二设备被调用的接口代码行的程序执行,并等待第二设备对应接口代码程序的执行结果。
另一种可能的实现方式是,第三设备接收第一设备在调试模式下,运行第一安卓应用包时输出的第二设备的接口信息。具体地,如图8所示,方法包括:
201、第三设备向第一设备发送请求消息。对应地,第一设备接收第三设备发送的请求消息。
其中,所述请求消息包括待调试设备的设备标识(ID),所述待调试设备为第二设备,比如待调试设备为智慧屏电视时,待调试设备的设备标识为智慧屏电视的IP地址,或者设备编号、设备名称、域名等。
202、第一设备根据所述待调试设备的设备标识在第二映射关系中确定所述第二设备的接口信息,所述第二映射关系包括设备标识与包名、接口名和接口参数类型之间的对应关系。
具体地,第一设备预先存储所有终端设备的包名、接口名和接口参数类型等接口信息与各个终端设备的ID之间的映射关系,即所述第二映射关系。这些信息可从网络服务端(server)获得,或者由其他终端设备周期性地向第一设备上报来获得。
可选的,每个终端设备向第一设备上报的信息中还包括该设备的设备类型,比如第二设备向第一设备上报的信息中包括:第二设备的设备类型、设备ID、包名、接口名和接口参数类型等接口信息。且这些信息可以一次性上报,或者分多次上报,本实施例对此不进行限制。
另外,上述实施例步骤102也可以由第一设备来实现,具体地,第一设备在接收第三设备发送的请求消息后,根据请求消息中携带的待调试设备的设备ID确定待调试设备的设备类型,根据所述设备类型判断该待调试设备是否可用。具体判断待调试设备是否可用的方法可参考前述实施例的步骤102,当待调试设备的设备类型与用户期望的设备类型相同时,确定第三设备请求的待调试设备可用,此时的待调试设备可用作为第二设备。
如果待调试设备的设备类型与用户期望的设备类型不相同,则确定该待调试设备不可用,需要选择其他设备进行能力调用。
203、第一设备将所述第二设备的接口信息发送给所述第三设备。
第一设备通过通信接口将该第二设备的接口信息发送给第三设备,第一设备和第三设备之间可以有线或无线连接,所述有线连接可以是USB连接,所述无线连接包括WLAN、WiFi、蓝牙等。
下面介绍与上述方法实施例对应的装置实施例。
图9为本申请实施例提供的一种调试装置的结构示意图。所述装置可以是前述的IDE侧模块,该IDE侧模块属于终端设备的应用程序层中的一个部件,并且该装置可以实现前述实施例中的设备调试方法。
具体地,如图9所示,该装置可以包括:获取单元601、处理单元602、调试单元603。此外,所述装置还可以包括存储单元等其他的单元或模块。比如显示单元604、存储单元、发送单元等,本实施例对此不予限制。
其中,获取单元601,用于获取在调试第一设备过程中得到的第二设备的接口信息;处理单元602,用于根据所述第二设备的接口信息在第一映射关系中查找所述第二设备被调用接口的代码行,所述第一映射关系包括所述第二设备的接口信息和所述第二设备被调用接口代码行的对应关系;调试单元603,用于根据所述第二设备被调用接口的代码行对所述第二设备进行调试,并验证调试结果,以及在所述调试结果符合预期的情况下,跳转回到对所述第一设备进行调试。
其中,第二设备的接口信息包括:设备类型、包名、接口名和接口参数类型等。
进一步地,在本实施例的一种具体的实现方式中,处理单元602,具体用于根据所述第二设备的接口信息中的设备类型确定所述第二设备,按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,在所述第一映射关系中查找所述第二设备被调用接口的代码行。
可选的,在本实施例的另一种具体的实现方式中,处理单元602,具体用于所述按照预设命名规则根据所述第二设备的接口信息中的包名、接口名和接口参数类型,确定所述第一设备的类中所对应的方法名;根据所述方法名在所述第一映射关系中查找所述第二设备被调用接口的代码行。
可选的,在本实施例的又一种具体的实现方式中,处理单元602,还用于在所述第二设备的接口信息中的所述设备类型与用户期望的设备类型相同时,确定所述设备类型对应的第二设备可用。
可选的,在本实施例的又一种具体的实现方式中,处理单元602,还用于在查找第二设备被调用接口的代码行之后,在该第二设备被调用接口的代码行上自动添加断点信息。以及,在验证所述调试结果符合预期的情况下,清除所述断点信息。
可选的,在本实施例的又一种具体的实现方式中,获取单元601,具体用于自检测所述第一设备的调试结果,得到所述第二设备的接口信息,或者,接收所述第一设备在调试模式下,运行第一安卓应用包时输出的所述第二设备的接口信息。
另外,在具体硬件实现中,本实施例还提供了一种电子设备,该电子设备可以是一种终端设备,比如智能手机、笔记本电脑、平板电脑、PC、可折叠终端等,可用于实现前述实施例中的设备调试方法。
在本实施例中,当该电子设备作为一种设备调试装置时,可以实现前述实施例中图5至图8所示的方法步骤。
当该电子设备为终端设备时,其结构组成与前述图2所示的终端设备的结构相同。包含:处理器21、存储器22,以及调试接口23、通信接口24和输入/输出装置25等部件,用于实现前述设备调试装置的所有功能。其中,如图9所示的IDE模块中,所述获取单元601、处理单元602和调试单元603的功能可以由终端设备的处理器21、调试接口23、通信接口24等联合实现;存储单元的功能可以由终端设备的存储器22实现。
进一步地,当该电子设备为笔记本电脑、平板电脑或PC时,电子设备中的处理芯片或处理电路,用于获取在调试第一设备过程中得到的第二设备的接口信息,根据第二设备的接口信息在第一映射关系中查找第二设备被调用接口的代码行,根据第二设备被调用接口的代码行对第二设备进行调试,并验证调试结果,在所述调试结果符合预期的情况下,跳转回到对所述第一设备进行调试。
此外,本申请实施例还提供了一种设备调试系统,该系统包括调试装置、调试设备和被调试设备。其中,调试设备为源设备,比如第一设备;被调试设备为目标设备,比如第二设备;调试装置为前述实施例的第三设备,比如包含有IDE模块功能的设备。
其中,调试设备和被调试设备的结构可以与前述图2所示的终端设备的结构相同,也可以不相同,本实施例对每个设备的结构和具体形态不予限定。
在另一实施例中,本申请还提供一种调试方法,该方法可应用于第三设备,所述第三设备包含IDE模块功能,用于实现跨设备分布式堆栈的动态可视化显示,如图10所示,该方法包括:
301:在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断,显示第一图形化堆栈信息,所述第一图形化堆栈信息用于显示调试第一设备过程的函数、模块等信息,是一种通过特定数据结构的动态化的直观展示,比如第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识。所述第一函数标识用于表示第一设备运行堆栈的函数信息,所述第一设备标识用于区分函数标识所属的第一设备。
所述第一函数是第一设备的堆栈中的某一函数。其中,所述第一设备的堆栈可以通过堆栈列表展示,如表1所示,设所述第一设备为手机(phone)。该表1中包含的函数有:Mainability.java.transfer、Mainability.java.CallAbility、Mainability.java.on.Remote Request、Mainability.java.connectRemote、Mainability.java.connectAbility等。
表1、第一设备的堆栈列表
手机(phone) |
Mainability.java.connectAbility |
Mainability.java.connectRemote |
Mainability.java.onRemoteRequest |
Mainability.java.CallAbility |
Mainability.java.transfer |
Mainability.java.onstart |
所述第一函数可以是上述函数之一,比如.onRemoteRequest或connectAbility函数,当所述第一函数是connectAbility时,在第一调试中断时,即开发者打断点处,显示第一图形化堆栈信息如图11所示。该图11示出了第一函数的函数标识“connectAbility”,以及第一设备的设备标识,第一设备的应用模块“phone”。
另外,还可以在第一图形化堆栈信息中显示其他调用函数和历史函数,所述其他调用函数包括:onstart、transfer、CallAbility、onRemoteRequest和connectRemote等。所述历史调用的函数包括,比如“makeAction”函数,且该makeAction函数是上一函数“transfer”的一个分支,与“CallAbility”函数并列。
302:在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备。
在第一调试中断后,继续执行调试任务,此时第一设备开始调用第二设备。
303:在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识。
其中,设备标识用于区分函数标识所指示的设备。
可选的,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色;
所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息显示所述第一颜色;所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息显示所述第二颜色。
例如图12所示,在第二调试中断时,显示的一种第二图形化堆栈信息,该堆栈信息中包括上述第一设备的设备标识,手机,第二设备的设备标识,电视或智慧屏,以及第一函数和第二函数等信息,其中,手机和智慧屏的颜色不同,比如本示例中,智慧屏的颜色为第二颜色,第二颜色是相比于手机的第一颜色较深,以便直观地区分第一设备、第二设备,以及每个设备方法功能的执行情况。
所述第二函数可以是“onConnect”函数,或者还可以是第二设备堆栈信息中的其他函数,比如第三函数。
具体地,前述步骤303,在第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息后,还包括:根据第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
其中,被调用的最深合并堆栈图形显示的第三函数,可以理解为是开发者设计的第一设备调用第二设备的接口函数。可通过鸿蒙OS定义实现。
一种可能的实现方式是,第一设备预先与第二设备通信,比如预定connectAbility函数与onConnect函数为一对调用匹配关系。第一设备利用函数a向第二设备发送消息,该函数a可以是底层通信函数,第二设备接收该消息之后调用函数b,例如RFC协议调用,在堆栈列表中,函数a是函数b下一层函数,然后第二设备再调用函数c与所述第一设备通信,所述函数c可以是前述onConnect函数,在堆栈列表中位于函数b的上一层函数。
需要说明的是,由于开发者期望在堆栈信息中只显示函数c及其之后的函数,不期望显示全部函数,比如函数a和b,所以与第一设备协商的函数a和函数b不在第二图形化堆栈信息中显示。目的是,只在堆栈信息中显示开发者关注的业务函数,屏蔽与业务无关的函数,包括系统跨设备调用的细节,使显示更简洁和直观。
在一种实施方式中,在步骤303:合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,包括:在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数;其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
参见图13和表2所示,图13是一种合并显示的第二图形化堆栈信息,表2是与第二图形化堆栈信息相对应的堆栈列表。
表2、与第二图形化堆栈信息相对应的堆栈列表
根据上述表2和图13所示,所述第一函数为connectAbility函数,所述第三函数为onConnect函数,所述第二函数可以是refresh函数。在第二图形化堆栈信息中显示内容包括:在该onConnect函数开始到第二函数的堆栈信息,即refresh函数的堆栈信息,以及第一设备的堆栈信息,比如从connectAbility函数到栈底onstart函数的所有信息。
并且,所述第三函数是被调用最深合并堆栈图形显示的函数,本实施例中,最深合并堆栈图形显示的函数为onConnect,与其匹配的第一设备的调用最深合并堆栈图形显示的函数为connectAbility函数。
在本实施例中,第一设备在所述第一函数中调用第二设备时,可根据堆栈信息确定所述第一设备调用所述第二设备。具体地,一种判断标准是:根据第四函数或者所述第三函数确定所述第二设备被调用,所述第四函数是所述第三函数的上级函数。
例如,在对第一设备的调试过程中,当所述第三函数或所述第四函数被调用时,确定发生跨设备调用,然后第一设备进一步判断被调用的设备是哪个设备,因为可能存在多个跨设备的情况,因此在onConnect函数或者onConnect函数的上级函数(在图13中未示出)被调用时,需要根据参数信息确定目标设备,所述目标设备为待调用的设备,比如所述第二设备。
一种实施方式是,IDE模块在调用所述第三函数或第四函数时获取相关参数信息,该相关参数信息中包括源设备ID(source device ID),然后根据该源设备ID在当前运行环境中查找目标设备。
另一种实施方式是,从相关参数信息中获取目标设备ID(target device ID),所述目标设备ID可通过解析第三函数或第四函数获得,然后根据在当前运行环境上的其他设备的栈,查找与目标设备ID对应的栈所在的设备。比如第二设备的栈中包含的第二设备的ID与所述目标设备ID相同,则确定该第二设备是目标设备。
由于上述第四函数或者第三函数可用于确定第二设备被调用,所以对应的。根据来自所述第三函数或所述第四函数参数信息(源设备ID或目标设备ID)确定所述第二设备通过所述第一函数被调用。
本实施例提供的调试方法,在调试中断后,以可视化的形式显示图形化堆栈信息,该堆栈信息中实时直观呈现源设备到目标设备函数调用关系,堆栈可视化图展示了每个设备调试的模块以及当前执行到的方法,且不同调试设备使用不同颜色标识,从而使开发者对分布式的调用流程一目了然。
另外,将多设备调试时分散断裂的调试堆栈信息经解析、提取、合并成完整的分布式调用堆栈列表,更有利于开发者对分布式调用流程的追踪溯源。同时,还解决了多个堆栈信息独立显示,无关联,导致开发者在不同设备间调试查看堆栈信息时需要频繁切换工具窗口,操作繁琐的问题。
其中,可视化堆栈图能清晰可辨地展示当前执行到的设备、模块和函数,不同设备的函数用不同的颜色表示,并且可查看历史调用函数关系。当点击图中的函数节点,可自动跳转到编辑器,定位到该方法的第一行处高亮显示。如图13所示一个分布式应用正在调试的可视化图形堆栈信息,堆栈图上方的图例表示用户选择了第一设备和第二设备进行调试,
其中,第一设备调试应用中的“phone”模块,第二设备调试应用中的“TV”模块,这两个模块可分别用不同的颜色表示,比如第一颜色和第二颜色。另外,图13中的每个函数节点使用所调试设备的颜色表示,比如第二颜色标识第二设备的所有模块、函数和方法,第一颜色标识第一设备的所有模块、函数和方法;并且,第一函数connectAbility用动态箭头指向第三函数onConnect,表示第一设备中的connectAbility函数调用了第二设备所调试模块,响应函数为onConnect,当前正在执行第二设备中的onConnect函数处。
另外,对于上述表2所示的堆栈列表,本实施例提供一种堆栈列表关联方法,该方法将跨设备间分散断裂的堆栈列表,通过代码文件解析和栈帧信息提取,在跨设备接口调用处,将源设备的关键栈帧信息转储起来,并在目标设备实现的方法的栈帧处将源设备的栈帧和目标设备的堆栈关联起来,整合成跨设备分布式调用的完整堆栈列表,从而方便在调试过程中动态化显示。
如图14所示,一种合并生成堆栈列表的过程包括:
401:IDE模块对应用代码文件进行解析识别跨设备调用函数。
其中,所述跨设备调用函数是上述第一设备调用第二设备的调用函数,比如第一函数。
可选的,所述第一函数可以是一调用接口。
可选的,所述第一函数是connectAbility函数。
具体地,IDE模块通过对应用代码文件做PSI解析来预识别跨设备调用接口,即预先解析当前应用使用了哪些分布式调用接口。所述调用接口是通过预先定义,比如HarmonyOS就定义了如交互式数据语言(Interactive Data Language,IDL)这种跨设备调用程序框架,需要开发者以约定的写法公开跨设备调用接口,以及诸如startAbility、connectAbility等OS层定义的分布式调度方法。
经过步骤401的解析后,得到当前应用使用的多个分布式的调用接口信息,所述多个接口信息中的每个接口信息包括:接口名、文件名和文件行位置,这些信息用于匹配跨设备的栈帧信息。
402:堆栈信息解析并匹配,得到堆栈列表。
当调试者在预设断点处发生中断时,获取当前调试堆栈列表,解析该堆栈列表中的栈帧信息得到第一接口名、第一文件名和第一文件行位置等信息。然后将这些信息与步骤401中预先解析的跨设备调用接口的栈帧信息相匹配,即匹配代码文件名、函数名和行位置等信息。
具体地,查找在预先解析的分布式多个调用接口信息中,是否存在一个接口信息所包含的内容与所述第一接口名、所述第一文件名和所述第一文件行位置均相同。如果是,则确定该接口信息与当前调试设备的接口信息相匹配。此时第一设备确定了待调用的设备是第二设备,以及可调用第二设备的函数名,比如被调用的第二设备的函数是onConnect函数。
另外,还包括在系统跨设备调用过程中的其他函数,比如上述RFC通信过程中使用的函数a、函数b和函数c,其中这些函数中的部分与业务相关,部分与业务不相关,且这些函数都在匹配后的堆栈列表中显示。
如果被比较的信息中有至少一个信息与所述第一接口名、第一文件名和第一文件行位置不同,则不相匹配。如果分布式调用的所有接口信息都不相匹配,则查找失败,没有可跨调用的设备。
403:关键帧信息提取。
对上述步骤403中匹配后得到的堆栈列表做冗余信息剔除,仅保留与业务相关的信息,剔除业务函数之外,比如掺杂的许多底层代码调用的栈帧信息,这些栈帧信息对开发者追踪定位自研代码问题并无益处,反而成为干扰,因此将与业务无关的冗余信息剔除,生成包含开发者自研的业务代码的堆栈列表。
另外,如图15所示,还包括:将该剔除处理后生成的堆栈列表存储在栈帧(StakFrame)存储中心,便于后续合并关联时调用。所述StakFrame存储中心用于自定义的存储每条栈帧信息的数据集,或者,用于集中存储各个设备调试堆栈信息,所述栈帧信息和堆栈信息包含但不限于每条栈帧信息的设备名称、模块名称、函数名、文件名和行位置以及当前上下文变量值。
可选的,对目标设备,即第二设备的堆栈列表也进行关键帧信息提取,剔除与业务无关的冗余信息,得到简洁的、与业务相关的堆栈列表。并且将这些堆栈列表存储在StakFrame存储中心。
404:利用跨设备调用函数合并生成新的堆栈列表。
具体地,当应用程序执行在第二设备处时,利用步骤401中的所述第一函数将所述第二设备的堆栈列表与存储在StakFrame存储中心的第一设备的堆栈列表进行合并,生成新的堆栈列表。其中,所述第二设备的堆栈列表是经过上述步骤403处理之后的列表。
在一示例中,所述第一设备的堆栈列表如上表1所示,所述合并后新的堆栈列表如上表2所示。
本实施例提供的方法,将源设备和目标设备的堆栈列表进行关联合并,生成新的堆栈列表,由于新的堆栈列表包含了原来两个设备的所有列表中的栈帧信息,进而在开发者进行分布式应用调试时,不需要反复频繁切换不同调试设备的堆栈列表,来追踪分析分布式调用过程。只需要关注该合并后的一个堆栈列表即可,就如同调试单设备所对应一个堆栈列表的感受一样。并且该堆栈列表的每一个栈帧标识了位于的设备和模块,能查看当前上下文的变量信息,为开发者追踪定位分布式调用相关代码问题提供了方便,大大提升了分布式调试的效率。
上述合并生成新的堆栈列表之后,将该新的堆栈列表转换为支持可视化的数据结构,前述IDL定义的跨设备调用程序框架,生成图形化堆栈信息,在Debugger UI显示,使多设备完整的调用关系可视化地展示给开发者和调试者。
其中,上述图形化堆栈信息可以是呈树状结构显示,在所述树状结构中,如图11至图13所示,该树状结构中的根节点或叶子节点可以用于表示第一设备和第二设备执行的函数和功能,连接所述根节点和/或叶子节点的至少一个分支则表示各个函数之间的调用关系。
此外,该图形化堆栈信息中还包含历史调用链,比如包含的历史调用的makeAction函数,该函数与connectAbility函数所在分支并列,即都被上级函数transfer调用,所以单独成一支。
并且,该可视化图形化堆栈信息还具备响应功能,即当开发者点击图上的某一函数或应用时,可自动跳转到编辑器,并定位到该方法的第一行处高亮显示,有利于开发者对分布式调用流程的追踪溯源,大大提升了开发者跟踪定位应用程序尤其是分布式调用应用程序的效率。
应理解,还可以通过除了树状的堆栈图之外的其他数据结构来展示,本实施例对展示的数据结构不做限制,另外对于数据结构中所展示的内容也不做限制。
本实施方式中,基于分布式应用调试场景,将前述合并后的堆栈列表通过堆栈图的形式,直观动态地呈现出来,该可视化堆栈图能清晰可辨地展示当前执行到的设备、模块和方法,不同设备的方法用不同的颜色表示,并且可查看历史调用函数关系,使开发者对分布式的调用流程一目了然。
在与上述方法实施例相对应的装置实施例中,如图9所示,该IDE模块可以是一调试装置,所述装置包括:
显示单元604,用于在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断,显示第一图形化堆栈信息,所述第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识。
处理单元602,用于在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备。
显示单元604,还用于在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识;
其中,设备标识用于区分函数标识所指示的设备。
可选的,在一种具体的实现方式中,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色;
显示单元604,还用于将所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息通过所述第一颜色显示,以及,将所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息通过所述第二颜色显示。
可选的,在一种具体的实现方式中,显示单元604还用于在显示所述第二图形化堆栈信息后,根据所述第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
可选的,在一种具体的实现方式中,显示单元604还用于在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数。
其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
可选的,在一种具体的实现方式中,处理单元602还根据堆栈信息确定所述第一设备调用所述第二设备。
可选的,在一种具体的实现方式中,处理单元602还用于根据第四函数或者所述第三函数确定所述第二设备被调用,以及根据来自所述第三函数或所述第四函数参数信息确定所述第二设备通过所述第一函数被调用,所述第四函数是所述第三函数的上级函数。
可选的,所述第三函数为所述第二函数,或者为所述第二函数的上级函数。
另外,在硬件实现中,上述显示单元604和处理单元602的功能还可以通过处理器21以、调试接口23及输入输出装置25实现,所述输入输出装置25包括显示屏、显示器、智慧屏等。
本实施例提供的设备调试系统,当需要调用第二设备接口时,查找第二设备被调用接口的代码行,使得第二设备利用被调用的代码行执行所要调用的程序代码,从而实现对第二设备能力的调用。
另外,不再需要开发者启动第二设备,查找第二设备被调用接口的代码行,对第二设备进行调试以及打断点信息,上述一系列过程都可自动实现,从而对外呈现出与本地第一设备调用接口能力一致的调试流程,提高了能力调用效率。
另外,在第一设备调试过程中,还将前述合并后的堆栈列表通过图形化堆栈信息的形式,直观动态地呈现出来,进而可辨地展示当前执行到的设备、模块和方法,不同设备的方法用不同的颜色表示,并且可查看历史调用函数关系,使开发者对分布式的调用流程一目了然。
当点击图形化堆栈信息中的函数节点时,可自动跳转到编辑器,定位到该方法的第一行处高亮显示,有利于开发者对分布式调用流程的追踪溯源,大大提升了开发者跟踪定位应用程序尤其是分布式调用应用程序的效率。
此外,本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的设备调试方法的部分或全部步骤。所述的存储介质包括但不限于磁碟、光盘、只读存储记忆体(read only memory,ROM)或随机存储记忆体(random access memory,RAM)等。
在上述实施例中,可以全部或部分通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令,例如配对指令、传输指令,在计算机加载和执行所述计算机程序指令时,全部或部分地产生按照本申请上述各个实施例所述方法流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。
此外,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。
Claims (17)
1.一种调试方法,其特征在于,所述方法包括:
在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断时,显示第一图形化堆栈信息,所述第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识;
在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备;
在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识;
其中,函数标识用于表示设备运行堆栈的函数信息,设备标识用于区分函数标识所属的设备。
2.根据权利要求1所述的方法,其特征在于,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色;
所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息显示所述第一颜色;
所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息显示所述第二颜色。
3.根据权利要求1或2所述的方法,其特征在于,在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息后,还包括:
根据所述第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
4.根据权利要求3项所述的方法,其特征在于,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,包括:
在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数;
其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述第一设备在所述第一函数中调用第二设备,包括:
根据堆栈信息确定所述第一设备调用所述第二设备。
6.根据权利要求5所述的方法,其特征在于,根据堆栈信息确定所述第一设备调用所述第二设备,包括:
根据第四函数或者所述第三函数确定所述第二设备被调用,所述第四函数是所述第三函数的上级函数;
根据来自所述第三函数或所述第四函数参数信息确定所述第二设备通过所述第一函数被调用。
7.根据权利要求3-6任一项所述的方法,其特征在于,
所述第三函数为所述第二函数,或者为所述第二函数的上级函数。
8.一种调试装置,其特征在于,所述装置包括:
显示单元,用于在第一设备上的调试程序时,所述第一设备在执行第一函数中发生第一调试中断时,显示第一图形化堆栈信息,所述第一图形化堆栈信息包括第一函数的函数标识和第一设备的设备标识;
处理单元,用于在所述第一调试中断发生后继续执行调试程序,所述第一设备在所述第一函数中调用第二设备;
所述显示单元,还用于在所述第二设备的第二函数发生第二调试中断时,显示第二图形化堆栈信息,所述第二图形化堆栈信息包括所述第一函数的函数标识、所述第一设备的设备标识、第二函数的函数标识和第二设备的设备标识;
其中,函数标识用于表示设备运行堆栈的函数信息,设备标识用于区分函数标识所属的设备。
9.根据权利要求8所述的装置,其特征在于,所述第一设备的设备标识包括第一设备的设备名称和第一设备的第一颜色,所述第二设备的设备标识包括第二设备的设备名称和第二设备的第二颜色;
所述显示单元,还用于将所述第一函数的函数标识、所述第一设备的设备标识在所述第一图形化堆栈信息和所述第二图形化堆栈信息通过所述第一颜色显示,以及,将所述第二函数的函数标识、所述第二设备的设备标识在所述第二图形化堆栈信息通过所述第二颜色显示。
10.根据权利要求8或9所述的装置,其特征在于,
所述显示单元,还用于在显示所述第二图形化堆栈信息后,根据所述第二设备的堆栈信息中的第三函数,合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息,所述第三函数是被调用的最深合并堆栈图形显示的函数。
11.根据权利要求10项所述的装置,其特征在于,
所述显示单元,还用于在所述合并显示从所述第三函数开始到第二函数的堆栈信息以及第一设备的堆栈信息时,所述第一函数指向所述第三函数;
其中,所述第一函数是预设调用的最深合并堆栈图形显示的函数。
12.根据权利要求8-11任一项所述的装置,其特征在于,
所述处理单元,还根据堆栈信息确定所述第一设备调用所述第二设备。
13.根据权利要求12所述的装置,其特征在于,
所述处理单元,还用于根据第四函数或者所述第三函数确定所述第二设备被调用,以及根据来自所述第三函数或所述第四函数参数信息确定所述第二设备通过所述第一函数被调用,所述第四函数是所述第三函数的上级函数。
14.根据权利要求10-13任一项所述的装置,其特征在于,所述第三函数为所述第二函数,或者为所述第二函数的上级函数。
15.一种电子设备,其特征在于,包括处理器和存储器,所述处理器与所述存储器耦合,
所述存储器,用于存储计算机程序指令;
所述处理器,用于执行所述存储器中存储的所述指令,以使得所述电子设备执行如权利要求1至7中任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序指令,当所述计算机程序指令被运行时,实现如权利要求1至7中任一项所述的方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,
当所述指令被计算机执行时,实现如权利要求1至7中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110020068 | 2021-01-07 | ||
CN2021100200686 | 2021-01-07 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114741275A true CN114741275A (zh) | 2022-07-12 |
Family
ID=82274019
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111237918.4A Pending CN114741275A (zh) | 2021-01-07 | 2021-10-22 | 一种设备调试方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114741275A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116860215A (zh) * | 2023-08-29 | 2023-10-10 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质 |
-
2021
- 2021-10-22 CN CN202111237918.4A patent/CN114741275A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116860215A (zh) * | 2023-08-29 | 2023-10-10 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质 |
CN116860215B (zh) * | 2023-08-29 | 2023-12-08 | 中国兵器装备集团兵器装备研究所 | 一种基于开源鸿蒙系统的地图呈现方法、装置和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8843895B2 (en) | Debugger connection | |
CN108345531B (zh) | 一种测试方法、装置及系统 | |
US10073553B2 (en) | Scripting cross-device wearable interaction | |
EP3866005A2 (en) | Method and system for voice controlling an applet | |
CN110519461B (zh) | 文件发送方法、装置、计算机设备以及存储介质 | |
CN110309006B (zh) | 一种功能调用方法、装置、终端设备及存储介质 | |
TW201814545A (zh) | 多服務集成方法、裝置、智慧型終端、伺服器和操作系統 | |
CN104426939A (zh) | 一种信息处理方法及电子设备 | |
CN110933075B (zh) | 服务调用方法、装置、电子设备及存储介质 | |
CN112506854B (zh) | 页面模板文件的存储和页面生成方法、装置、设备及介质 | |
CN113835569A (zh) | 终端设备、应用内部功能的快捷启动方法和存储介质 | |
CN114741275A (zh) | 一种设备调试方法、装置和设备 | |
CN111061448A (zh) | 日志信息的显示方法、装置、电子设备及存储介质 | |
CN112558968B (zh) | 一种资源树视图的生成方法、装置、设备及存储介质 | |
CN114222003A (zh) | 服务调用方法、系统、装置、设备及存储介质 | |
CN113448650A (zh) | 直播功能插件加载方法、装置、设备及存储介质 | |
WO2021097683A1 (zh) | 安卓系统启动的方法、装置、设备及存储介质 | |
KR101418390B1 (ko) | 원격 응용 프로그래밍 디버깅시스템 및 그 제어방법 | |
CN111338961B (zh) | 应用调试方法及装置、电子设备及存储介质 | |
CN115237481A (zh) | 驱动外接设备的方法、装置、设备及存储介质 | |
CN106383705A (zh) | 在应用瘦客户端中设置鼠标显示状态的方法及装置 | |
CN107291512B (zh) | 应用程序多开方法、装置、终端设备及存储介质 | |
CN110908763A (zh) | 一种验收方法、装置、设备和存储介质 | |
CN116991380B (zh) | 一种应用程序的构建方法、装置、电子设备及存储介质 | |
CN113760382B (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 |