CN115827418A - 程序调试方法、程序回溯方法及相关产品 - Google Patents
程序调试方法、程序回溯方法及相关产品 Download PDFInfo
- Publication number
- CN115827418A CN115827418A CN202111093863.4A CN202111093863A CN115827418A CN 115827418 A CN115827418 A CN 115827418A CN 202111093863 A CN202111093863 A CN 202111093863A CN 115827418 A CN115827418 A CN 115827418A
- Authority
- CN
- China
- Prior art keywords
- debugging
- program
- backtracking
- debugger
- user
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种程序调试方法、程序回溯方法及相关产品。该方法包括:所述方法应用于包含有集成开发环境的程序调试设备,所述集成开发环境包括调试器和调试回溯组件;所述方法包括:获取程序,其中,所述程序对应有至少一个位置;当调试所述程序到第一位置时,所述调试器获取所述第一位置的调试信息,其中,所述第一位置为所述至少一个位置中的任意一个;所述调试器向所述调试回溯组件发送所述第一位置的调试信息,以对所述第一位置的调试信息进行管理。本申请实施例有利于提高调试回溯的便捷性。
Description
技术领域
本发明涉及程序调试技术领域,具体涉及一种程序调试方法、程序回溯方法及相关产品。
背景技术
在现代程序开发中,开发人员在完成代码编写之后,会对代码进行各种调试,一旦发现问题就需要通过调试程序寻找代码的缺陷所在,而这个调试过程一般会耗费开发者50%甚至更多的开发时间。由于计算机每秒执行数十亿条指令,所以找到一条有缺陷的指令就像大海捞针一样。据剑桥大学13年的一项研究,可回溯调试使得开发人员可以回退到代码中发生故障的确切位置,平均能够减少26%的调试时间,对开发者的开发效率是一个巨大提升,能够极大地减少软件的开发维护成本。
目前支持调试回溯的集成开发环境需要提供具备调试回溯能力的调试器。然而,此类调试器的开发极为不易,还存在操作系统限制和编程语言的局限。
因此,如何提高调试回溯的便捷性和应用的全面性是亟待解决的问题。
发明内容
本申请提供了一种程序调试方法、程序回溯方法及相关产品,通过设置一些关键位置,只记录与关键位置对应的调试信息,不会受操作系统和程序语言的限制,提高了调试回溯的便捷性和全面性。
第一方面,本申请实施例提供一种程序调试方法,应用于程序调试设备,程序调试设备包括调试器和调试回溯组件;该方法包括:调试器获取程序,其中,程序对应有至少一个位置;当调试程序到第一位置时,调试器获取第一位置的调试信息,其中,第一位置为至少一个位置中的任意一个;调试器向调试回溯组件发送第一位置的调试信息,以对第一位置的调试信息进行管理。
其中,调试回溯组件是以插件形式预先安装在程序调试设备中的。
应说明,调试器在获取第一位置的调试信息之前,需要将程序的调试程序暂停在第一位置,相适应的,调试回溯组件完成对调试信息的存储之后,会向调试器发送调试指令,调试指令用于指示调试器从第一位置开始继续对程序进行调试。则调试器在接收到调试指令后,开始从第一位置对程序继续调试。
其中,对调试信息的管理包括对调试信息的存储和读取。比如,可以在调试回溯组件中设置有存储器,则调试回溯组件可以基于该存储器完成对调试信息的存储和读取。
应说明,上述的至少一个位置均是程序中的关键位置,对于非关键位置,一般来说是不会出现调试错误,或者,开发者不需要关注的地方。因此,预先设置好程序的关键位置,实现在对程序进行调试过程中,只会存储与关键位置相关的调试信息,不用存储整个调试过程中的调试信息,避免了因要存储过多数据导致调试运行速度过慢的问题。而且,本申请中调试器是可以预先记录下关键位置,因此,本申请中存储调试信息时只需要考虑是否到达关键位置即可,无需考虑程序的语言和IDE平台的类型,因此对程序的语言并没有任何限制,对于IDE平台也没有任何限制,只要是当前能够在IDE中进行调试的场景,即开发者能够通过IDE设置关键位置,即可以准确的存储下调试信息,扩宽了应用场景。另外,预先在IDE环境中安装一个包含有存储器的回溯组件,在调试过程中可以由回溯组件完成调试信息的存储管理,使调试信息的存储独立于调试会话,即使调试会话结束,或者,在远端调试的场景下,即便IDE与远端设备断连,后续进行调试信息的回溯时,也能够完成调试信息的回溯,同时也能支持在不同的设备中对同一调试过程进行回溯,便于协同开发。
在一些可能的实施方式中,程序调试设备还包括用户界面,该方法还包括:调试回溯组件通过用户界面上的调试回溯服务入口获取回溯指令,回溯指令用于回溯第一位置的调试信息;调试回溯组件基于回溯指令,得到第一位置的调试信息;调试回溯组件通过用户界面显示第一位置的调试信息。
其中,调试回溯服务输入口是通过第一声明文件预先注册到用户界面上的。
可以看出,在本实施方式中,通过调试回溯组件对调试信息进行管理,比如,对调试信息的存储和读取,则用户可以通过预先注册的回溯服务入口输入回溯指令,实现对程序中任意位置的调试信息的回溯。由于调试信息的存储和读取是由回溯组件完成的,使调试信息的存储独立于调试会话,即使调试会话结束,或者,在远端调试的场景下,即便IDE与远端设备断连,后续进行调试信息的回溯时,也能够完成调试信息的回溯,同时也能支持在不同的设备中对同一调试过程进行回溯,便于协同开发。
在一些可能的实施方式中,程序调试设备还包括用户界面和语言服务组件;至少一个位置包括以下至少一种:用户设置的位置;其中,用户设置的位置包括:用户设置的断点的位置和/或用户设置的暂停位置,其中,断点的位置用于指示调试器将程序的调试暂停在断点的位置,并在用户界面上显示与断点的位置对应的调试信息;用户设置的暂停位置用于指示调试器将程序的调试暂停在用户设置的暂停位置;调试器执行单步调试之后抵达的位置;语言服务组件对程序进行分析得到的位置。
可以看出,在本实施方式中,可由用户自定义的设置断点的位置或者暂停位置,实现调试过程的灵活性;而且,还可以由集成开发环境的语言服务组件对程序进行分析,得到关键位置,实现调试过程的全面性。
在一些可能的实施方式中,当至少一个位置包括用户设置的位置时,该方法还包括:调试器通过用户界面上的设置入口获取用户设置的位置,其中,设置入口为通过第二声明文件预先注册到用户界面上的。
可以看出,在本实施方式中,通过第二声明文件预先在用户界面上注册设置入口,可实现用户设置关键位置的个性化。
在一些可能的实施方式中,当至少一个位置包括调试器执行单步调试之后抵达的位置时,方法还包括:调试器通过用户界面上的单步调试入口获取单步调试指令,单步调试指令用于指示调试器执行单步调试,以将程序运行到用户指定的位置;
其中,单步调试为单步执行、单步进入和单步退出中的一种。其中,单步调试入口为通过第三声明文件预先注册到用户界面上的。
可以看出,在本实施方式中,通过第三声明文件预先在用户界面上注册单步调试入口,则用户可通过该单步调试入口向调试器输入单步调试指令,指示调试器将程序运行到用户指定的位置,实现调试的灵活性。
在一些可能的实施方式中,语言服务组件对程序进行分析得到的位置包括以下至少一种:程序中的所有函数的入口;程序中的所有函数的出口;程序中用户设置的断点所在的函数体的每一行;程序中支持设置为断点的位置。
可以看出,在本实施方式中,由于函数的入口和出口一般来说都会涉及变量输入和输出,是调试需要重点关注的地方;而且,程序中用户所设置的断点也是用户比较关注的地方,因此用户设置的断点所在的函数体的每一行也需要重点关注;因此,通过集成开发环境的语言服务组件,自动将程序中的所有函数的入口设置为位置;或者,将程序中的所有函数的出口设置为位置;或者,将程序中用户设置的断点所在的函数体的每一行设置为关键位置,则可以将程序中需要设置关注的地方全部关键位置,提高关键位置设置自动化和全面性。
在一些可能的实施方式中,第一位置的调试信息包括以下至少一项:调试到第一位置时暂停线程的基本信息;暂停线程的方法栈的信息;每一层方法栈的变量信息;每一层方法栈对应的源码位置;时间标识,其中,时间标识用于指示调试器调试到第一位置的顺序。
第二方面,本申请实施例提供一种程序回溯方法,其特征在于,方法应用于程序回溯设备,程序回溯设备包括调试回溯组件和用户界面;该方法包括:调试回溯组件通过用户界面上的调试回溯服务入口获取回溯指令,回溯指令用于回溯第一位置的调试信息,其中,程序对应有至少一个位置,第一位置为至少一个位置中的任意一个;调试回溯组件基于回溯指令,得到第一位置的调试信息;调试回溯组件通过用户界面显示第一位置的调试信息。其中,该调试回溯服务入口是通过声明文件预先注册到用户界面上的。
应说明,调试回溯组件中预先管理有该至少一个位置的调试信息,对调试信息的管理包括对调试信息的存储和读取。
可以看出,在本申请实施方式中,可以通过用户界面上的调试回溯服务入口向调试回溯组件发送回溯指令,实现对任意位置的调试信息的回溯。而且,本申请中的调试信息是由回溯组件单独管理的,独立调试会话,因此即使调试会话结束,或者,在远端调试的场景下,即便IDE与远端设备断连,后续进行调试信息的回溯时,也能够完成调试信息的回溯,同时也能支持在不同的设备中对同一调试过程进行回溯,便于协同开发。
在一些可能的实施方式中,程序回溯设备还包括调试器和语言服务组件;至少一个位置包括以下至少一种:用户设置的位置;其中,用户设置的位置包括:用户设置的断点的位置和/或用户设置的暂停位置,其中,断点的位置用于指示调试器将程序的调试暂停在断点的位置,并在用户界面上显示与断点的位置对应的调试信息;用户设置的暂停位置用于指示调试器将程序的调试暂停在用户设置的暂停位置;调试器执行单步调试之后抵达的位置;语言服务组件对程序进行分析得到的位置。
可以看出,在本实施方式中,通过调试回溯组件对关键位置的调试信息进行管理,比如,存储和读取,则用户可以通过预先注册的回溯服务入口输入回溯指令,实现任意对程序中位置的调试信息的回溯。由于调试信息的存储和读取是由回溯组件完成的,使调试信息的存储独立于调试会话,即使调试会话结束,或者,在远端调试的场景下,即便IDE与远端设备断连,后续进行调试信息的回溯时,也能够完成调试信息的回溯,同时也能支持在不同的设备中对同一调试过程进行回溯,便于协同开发。
在一些可能的实施方式中,当至少一个位置包括用户设置的位置时,方法还包括:调试器通过用户界面上的设置入口获取用户设置的位置。
可以看出,在本实施方式中,可由用户自定义的设置断点的位置或者暂停位置,实现调试过程的灵活性;而且,还可以由集成开发环境的语言服务组件对程序进行分析,得到关键位置,实现调试过程的全面性。
在一些可能的实施方式中,当至少一个位置包括调试器执行单步调试之后抵达的位置时,方法还包括:调试器通过用户界面上的单步调试入口获取单步调试指令,单步调试指令用于指示调试器执行单步调试,以将程序运行到用户指定的位置;其中,单步调试为单步执行、单步进入和单步退出中的一种。
可以看出,在本实施方式中,通过预先在用户界面上注册设置入口,可实现用户设置位置的个性化。
在一些可能的实施方式中,程序回溯设备还包括调试器;方法还包括:调试器获取程序;当调试到第一位置时,调试器获取第一位置的调试信息;调试器向调试回溯组件发送第一位置的调试信息,以对第一位置的调试信息进行管理。
应说明,调试器在获取第一位置的调试信息之前,需要将程序的调试程序暂停在第一位置,相适应的,调试回溯组件完成对调试信息的存储之后,会向调试器发送调试指令,调试指令用于指示调试器从第一位置开始继续对程序进行调试。则调试器在接收到调试指令后,开始从第一位置对程序继续调试。
其中,对调试信息的管理包括回溯组件对调试信息的存储和读取。比如,可以在调试回溯组件中设置有存储器,则调试回溯组件可以基于该存储器完成对调试信息的存储和读取。
应说明,上述的至少一个位置均是程序中的关键位置,对于非关键位置,一般来说是不会出现调试错误,或者,开发者不需要关注的地方。因此,预先设置好程序的关键位置,实现在对程序进行调试过程中,只会存储与关键位置相关的调试信息,不用存储整个调试过程中的调试信息,避免了因要存储过多数据导致调试运行速度过慢的问题。而且,本申请中调试器是可以预先记录下关键位置,因此,本申请中存储调试信息时只需要考虑是否到达关键位置即可,无需考虑程序的语言和IDE平台的类型,因此对程序的语言并没有任何限制,对于IDE平台也没有任何限制,只要是当前能够在IDE中进行调试的场景,即开发者能够通过IDE设置关键位置,即可以准确的存储下调试信息,扩宽了应用场景。
第三方面,本申请实施例提供一种程序调试设备,程序调试设备包括调试器和调试回溯组件;调试器,用于获取程序,其中,程序对应有至少一个位置;当调试到第一位置时,获取第一位置的调试信息,其中,第一位置为至少一个位置中的任意一个;向调试回溯组件发送第一位置的调试信息,调试回溯组件,用于对第一位置的调试信息进行管理。
在一些可能的实施方式中,集成开发环境还包括用户界面;调试回溯组件,还用于通过用户界面上的调试回溯服务入口获取回溯指令,回溯指令用于回溯第一位置的调试信息;基于回溯指令,从回溯组件中得到第一位置的调试信息;通过用户界面显示第一位置的调试信息。
在一些可能的实施方式中,程序调试设备还包括用户界面和语言服务组件;至少一个位置包括以下至少一种:用户设置的位置;其中,用户设置的位置包括:用户设置的断点的位置和/或用户设置的暂停位置,其中,断点的位置用于指示调试器将程序的调试暂停在断点的位置,并在用户界面上显示与断点的位置对应的调试信息;用户设置的暂停位置用于指示调试器将程序的调试暂停在用户设置的暂停位置;调试器执行单步调试之后抵达的位置;语言服务组件对程序进行分析得到的位置。
在一些可能的实施方式中,当至少一个位置包括用户设置的位置时;调试器,还用于通过用户界面上的设置入口获取用户设置的位置。
在一些可能的实施方式中,当至少一个位置包括调试器执行单步调试之后抵达的位置时,调试器,还用于通过用户界面上的单步调试入口获取单步调试指令,其中,单步调试指令用于指示调试器执行单步调试,以将程序运行到用户指定的位置;其中,单步调试为单步执行、单步进入和单步退出中的一种。
在一些可能的实施方式中,语言服务组件对程序进行分析得到的位置包括以下至少一种:程序中的所有函数的入口;程序中的所有函数的出口;程序中用户设置的断点所在的函数体的每一行;程序中支持设置为断点的位置。
在一些可能的实施方式中,第一位置的调试信息包括以下至少一项:调试到第一位置时暂停线程的基本信息;暂停线程的方法栈的信息;每一层方法栈的变量信息;每一层方法栈对应的源码位置;时间标识,其中,时间标识用于指示调试器调试到第一位置的顺序。
第四方面,本申请实施例提供一种程序回溯设备,程序回溯设备包括调试回溯组件和用户界面;调试回溯组件,用于通过用户界面上的调试回溯服务入口获取回溯指令,回溯指令用于回溯第一位置的调试信息,其中,程序对应有至少一个位置,第一位置为至少一个位置中的任意一个;基于回溯指令,得到第一位置的调试信息;通过用户界面显示第一位置的调试信息。
在一些可能的实施方式中,程序回溯设备还包括调试器和语言服务组件,至少一个位置包括以下至少一种:用户设置的位置;其中,用户设置的位置包括:用户设置的断点的位置和/或用户设置的暂停位置,其中,断点的位置用于指示调试器将程序的调试暂停在断点的位置,并在用户界面上显示与断点的位置对应的调试信息;用户设置的暂停位置用于指示调试器将程序的调试暂停在用户设置的暂停位置;调试器执行单步调试之后抵达的位置;语言服务组件对程序进行分析得到的位置。
在一些可能的实施方式中,当至少一个位置包括用户设置的位置时,调试器,用于通过用户界面上的设置入口获取用户设置的位置。
在一些可能的实施方式中,当至少一个位置包括调试器执行单步调试之后抵达的位置时,调试器,用于通过用户界面上的单步调试入口获取单步调试指令,单步调试指令用于指示调试器执行单步调试,以将程序运行到用户指定的位置;其中,单步调试为单步执行、单步进入和单步退出中的一种。
在一些可能的实施方式中,程序回溯设备还包括调试器;调试器,用于获取程序;当调试到第一位置时,获取第一位置的调试信息;向调试回溯组件发送第一位置的调试信息;调试回溯组件,用于对第一位置的调试信息进行管理。
第五方面,本申请实施例提供了一种电子设备,包括:存储器,用于存储程序;处理器,用于执行存储器存储的程序;当存储器存储的程序被执行时,处理器用于实现上述第一方面或第二方面中的方法。
第六方面,本申请实施例提供了提供一种计算机可读介质,该计算机可读介质存储用于设备执行的程序代码,该程序代码包括用于实现上述第一方面或第二方面中的方法。
第七方面,本申请实施例提供了提供一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机实现上述第一方面或第二方面中的方法。
第八方面,本申请实施例提供了提供一种芯片,该芯片包括处理器与数据接口,处理器通过数据接口读取存储器上存储的指令,实现上述第一方面或第二方面中的方法。
可选地,作为一种实现方式,芯片还可以包括存储器,存储器中存储有指令,处理器用于执行存储器上存储的指令,当指令被执行时,处理器用于实现上述第一方面或第二方面中的方法。
附图说明
图1为本申请实施例提供的一种集成开发环境的示意图;
图2为本申请实施例提供的一种调试系统的结构示意图;
图3为本申请实施例提供的一种程序调试方法的流程示意图;
图4为本申请实施例提供的一种程序调试设备的示意图;
图5为本申请实施例提供的一种程序回溯设备的示意图;
图6为本申请实施例提供的一种电子设备的示意图。
具体实施方式
为了便于理解本申请的实施例,首先对本申请涉及到的相关术语进行解释和说明。
集成开发环境(Integrated Development Environment,IDE),是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和用户界面(User Interface,UI)等工具。
调试器:IDE使用的用于拉起程序的软件,IDE通过调试器执行用户在用户界面下达的指令并获取处理结果,将处理结果展示到用户界面上。
调试:程序开发人员发现和减少计算机程序或电子仪器设备中程序错误的一个过程。
正向调试:调试人员正向执行程序代码,寻找程序错误的过程。
调试回溯:指对某次调试过程进行复现,能够重复查看某次调试过程中程序在不同时刻,运行到不同代码行时的调试信息,回溯与程序是否在运行没有必然关系。
反向调试:与正向调试相对,逆向的执行程序代码进行调试,是调试回溯的具体形式。
断点:程序中为了调试而故意停止或者暂停的地方,当程序调试到断点设置处时,程序会中断暂停并通知IDE,IDE会在UI界面上展示调试信息,并等待开发者进一步的操作指令。
调试信息:指程序暂停处,IDE的UI界面上会展示给开发者看的信息,一般包括程序暂停位置信息、线程信息、方法栈信息和每一层方法栈包含的变量信息等。
数据点:程序的观察记录点,当程序调试到数据点位置处时,程序会中断暂停并通知IDE,此时IDE会收集暂停位置的调试信息,并将调试信息进行存储,存储完成后通知调试器继续调试程序。需要额外说明的是,数据点的特征是程序会处于暂停状态,因此断点和执行单步调试之后所抵达的位置都是一种特殊的数据点;用户设置的暂停位置和语言服务组件分析出的关键位置是一种普通的数据点。
调试会话:指IDE中的调试进程,开发者每一次调试都会启动一个调试会话,在这个调试会话中完成各种调试指令。调试结束后,调试会话也随之结束。
参阅图1,图1为本申请实施例提供的一种集成开发环境的示意图。如图1所示,集成开发环境10包括:前端101和后端102,前端101又可以称为用户界面(User Interface,UI);前端101包括语言服务入口、调试服务入口、调试回溯服务入口以及其他服务入口,其中,调试服务入口还包括单步调试入口和数据点设置入口,后端102包括语言服务组件、调试器、调试回溯组件以及其他组件;其中,各个组件之间通过接口实现数据和信息的传递。可以理解,图1示出的集成开发环境均属于后续提到的程序调试设备和程序回溯设备中的软件资源。
应说明,调试回溯组件是以插件的形式预先添加到集成开发环境中的。示例性的,集成开发环境会提供一系列功能扩展点给开发者,基于这些扩展点的实现,开发者预先向集成开发环境注册调试回溯组件,并在约定好的声明文件中声明该调试回溯组件的功能和用途。当集成开发环境加载调试回溯组件之后,会读取声明文件中的内容,将这些扩展点的实现类加载到集成开发环境中,成为集成开发环境的一部分,并通过调试回溯组件提供声明文件中所声明的功能。
示例性的,调试回溯组件用于对调试信息进行管理,比如,可在调试回溯组件中设置存储器,则可以通过存储器对调试信息进行存储和读取,从而便于后续对调试信息进行回溯。
示例性的,语言服务入口为向用户提供语言服务的入口,语言服务包括但不限于对源码进行错误提示、释义、关键代码行分析等;语言服务组件用于从语言服务入口获取语言服务指令,基于语言服务指令进行语言服务。比如,语言服务入口为一个按钮,且该按钮用于提供关键代码行分析功能,则用户点击该按钮时,可通过该按钮向语言服务组件发送进行关键代码行分析的指令,语言服务组件基于该指令对源代码进行分析,得到源码中的关键代码行;
示例性的,调试服务入口为向用户提供调试功能的入口;调试器用于执行从调试服务入口获取到的调试指令,基于该调试指令对源码进行调试。例如,调试服务入口为一个按钮,当用户点击该按钮时,可通过该按钮向调试器发送调试指令,调试器基于该调试指令对源码进行调试;
示例性的,调试回溯服务入口为向用户提供调试回溯服务的入口;调试回溯组件从调试回溯服务入口接收调试回溯指令,并从存储器中获取与该调试回溯指令对应的调试信息,并将调试信息发送到用户界面进行显示。
可选的,前端101中还可以预先注册有数据点设置入口和单步调试入口,则用户通过数据点设置入口为程序设置一个或多个数据点,其中,该数据点包括断点和/或暂停位置,以及用户可通过单步调试入口向调试器输入单步调试指令,调试器获取到该单步调试指令之后,可基于该单步调试指令执行单步调试操作,以将程序运行到用户指定的位置。
可选的,其他服务入口为向用户提供其他功能服务的入口,其他服务组件用于实现其他功能服务。
参阅图2,图2为本申请实施例提供的一种调试系统的结构示意图。如图2所示,调试系统包括IDE2002和执行机2003;IDE2002包括用户界面2011、调试回溯组件2012和语言服务组件2013,其中,用户界面2011上预先注册有调试回溯服务入口2021和调试服务入口2022;调试回溯组件2012包括存储器2023;执行机2003包括执行机操作系统2014;执行机操作系统2014中设置有调试器2024和待调试程序2025;
应说明,IDE和执行机分离,主要是程序运行设备和程序调试回溯设备可能是不同的设备。举例来说,当通过电脑和手机协同完成对手机上的程序进行调试,则IDE2002位于电脑端,运行程序的调试器2024位于手机端,因此,电脑端的IDE2002向手机端的调试器2024发送调试指令,则手机端的调试器2024基于该调试指令运行程序,即程序的运行是在手机端完成;然后手机端的调试器2024将程序的调试信息发送给电脑端的IDE2002下的调试回溯组件2012,以将调试信息存储到调试回溯组件2012中的存储器。这样进行调试回溯时,从存储器中获取调试信息,并在电脑端的用户界面上进行调试信息的展示,即程序的调试回溯是在电脑端完成的。应理解,若程序运行过程和回溯过程是在同一个设备上完成上的,比如,在电脑上完成对电脑上的程序的调试过程,则执行机2003可以看做是IDE中的一部分,也就是说IDE2002还包括执行机2003。
下面结合图2说明本申请的调试以及调试回溯过程。
开发者2001首先通过调试服务入口2022向调试器2024发送调试指令,则调试器2024基于该调试指令对程序进行调试,当调试到程序中的数据点所在的位置时,暂时暂停对程序的调试,并获取数据点处的调试信息,然后将调试信息发送给调试回溯组件2012;调试回溯组件2012将该调试信息存储到存储器2023;当开发者2001需要回溯调试信息时,开发者2001通过调试回溯服务入口2021向调试回溯组件2012发送调试回溯指令,调试回溯组件2012基于该调试回溯指令从存储器2023中获取相应的调试信息,并将该调试信息发送到用户界面2011,在用户界面2011显示调试信息实现调试信息的回溯。
首先说明,本申请的技术方案可以应用到各种IDE平台,对运行在IDE平台上的程序进行调试的场景,例如通过Intellij IDEA调试本地Java程序、通过VsCode调试本地C++程序等。通过集成本发明技术方案的IDE套件,可以使得在不同的IDE平台上支持本发明的实施。本实施例以Windows平台下的基于Intellij平台实现C++程序的调试为例说明本申请的实现过程。
参阅图3,图3为本申请实施例提供的一种程序调试方法的流程示意图。该方法应用于包括有上述集成开发环境的程序调试设备。该方法包括以下步骤内容:
301:获取程序,其中,程序对应有至少一个位置。
其中,针对每个位置来说都是一个数据点,因此当调试器调试到每个位置处,将程序的调试暂时暂停在该位置处。比如,程序中的第五行是一个位置,则当调试器调试到第五行时,会暂时暂停对程序的调试,当获取到继续调试的指令时,则从第五行开始继续对程序进行调试。
可以理解,每个位置在程序中对应的代码行都是该程序中的关键代码行,也是比较容易出现调试问题的代码行,因此预先设置好关键代码行对应的位置,这样调试器在调试的过程就可以只记录与这些关键代码行对应的调试信息,从而可以精确的记录下关键调试信息。
示例性的,至少一个位置包括以下至少一种:
用户设置的位置;执行单步调试之后抵达的位置;通过语言服务组件对程序进行分析得到的位置。可选的,用户设置的位置包括用户设置的断点的位置或用户设置的暂停位置,这两种位置的区别在于:当调试器调试到断点所在的位置时,除了暂时暂停对程序的调试之外,还将该位置的调试信息发送到用户界面,以在用户界面上显示该位置的调试信息,当获取到用户的继续调试指令后,继续对程序进行调试;当调试器调试到用户设置的暂停位置时,仅暂停对程序的调试,不会在用户界面上显示该位置的调试信息,并且无需等待用户的继续调试指令,当回溯组件完成对调试信息存储后,控制调试器继续对程序进行调试。
在本申请的一个实施方式中,调试器可以通过用户界面上的设置入口获取用户所设置的位置,其中,该设置入口可以是一个输入窗口、快捷按钮或者其他形式的可供用户输入位置信息的入口。例如,当设置入口为输入窗口时,用户可以通过外设(比如,实体键盘或虚拟键盘)在输入窗口中输入位置信息,比如,输入文件名和行号,其中,文件名用于标识待调试器在操作系统中的位置,以便确定出当前的程序;则调试器根据该文件名,确定出当前的程序,并将该行号在程序中的位置作为用户所设置的位置;更具体的,当用户设置断点时,可以在输入窗口中输入行号,并将该行号设置为断点的位置,比如,可以在输入窗口中设置有一个断点设置按钮和一个暂停位置按钮,在点击断点设置按钮之后,调试器可接收到将该行号对应的位置设置为断点的指令,则可将该行号对应的位置设置为断点。
可选的,通过第二声明文件预先在用户界面上注册该设置入口。示例性的,通过第二声明文件向Intellij平台注册一个位于用户界面上的设置入口。比如,第二声明文件为plugin.xml,则可在第二声明文件plugin.xml中,添加如下代码“<toolWindow id="Example1"anchor="right"factoryClass="Example2"/>”来提供相关功能入口,其中,factoryClass为提供界面功能的类,则在实际应用中开发者可根据需求,将"Example2"更改为设置入口,即可完成设置入口的注册;最后,IDE程序基于Intellij平台的文件管理系统,提供一个源代码文件列表给用户,给用户选择相应的源代码(即程序),用户选择好源代码之后,再提供一个行号列表给用户,以便用户选择相应的行号,这样调试器就可从用户界面获取用户设置的行号,将用户选择的源代码中该用户选择的行号所在的位置作为用户设置的位置。
在本申请的另一个实施方式中,调试器可通过用户界面上的单步调试入口获取单步调试指令,其中,该单步调试入口为通过第三声明文件预先注册到用户界面上的,该单步调试指令用于指示调试器执行单步调试,以将程序调试到用户指定的位置。
其中,单步调试包括但不限于:单步执行、单步进入和单步退出中的一种。可选的,用户指定的位置与单步调试指令的类型有关,例如,当用户指定将程序从当前位置调试到下一行的位置时,则可以通过单步调试入口输入单步执行指令(单步调试指令中的一种),调试器接收到该单步执行指令后,会将程序调试到下一行的位置,并在下一行的位置暂时暂停对程序的调试,并在用户界面上显示下一行位置的调试信息。
可选的,可通过第三声明文件预先在用户界面上注册单步调试入口,其中,该单步调试入口可以是输入窗口、快捷按钮,等等,本申请以快捷按钮为例进行说明。用户可以通过触控的方式点击快捷按钮,向调试器输入单步调试指令。其中,注册单步调试按钮的方式,与上述注册断点设置入口的方式类似,在声明文件中声明单步调试按钮,完成按钮的注册。此外,针对不同的单步调试,可以注册多个不同的快捷按钮,在点击不同的快捷按钮时,向调试器输入不同的单步调试指令,以便调试器执行与每个快捷按钮对应的单步调试。
在本申请的又一个实施方式中,可通过语言服务组件对程序进行分析,得到该程序中的关键位置,语言服务组件将分析出的关键位置发送给调试器,调试器记录下该关键位置,并将该关键位置作为数据点。
示例性的,通过该语言服务组件对该程序进行分析得到的位置包括以下至少一项:程序中所有函数的入口、程序中所有函数的出口、程序中用户设置的断点所在的函数体的每一行;程序中支持设置为断点的位置。
当然,是否启动语言服务组件进行位置分析,也可以由用户设置。示例性的,如图1所示,在用户界面上预先注册语言服务入口,比如,该语言服务入口为一个语言服务按钮,则当用户点击该语言服务按钮之后,会向语言服务组件发送语言服务指令,则语言服务组件基于该指令对程序进行分析,得到程序中的关键位置,将分析出的关键位置全部作为数据点。
应说明,上述语言服务组件分析出关键位置和用户设置关键位置并无先后执行顺序,可以同步执行,也可以异步执行,本申请中以先提示用户进行关键位置的设置,再启动语言分析功能为例进行说明。这样,当用户完成关键位置的设置之后,再提示启动语言分析服务,语言服务组件可以将程序中用户设置的断点所在的函数体的每一行设置作为关键位置。具体的,上述设置关键位置的方式对应的代码可以写在com.intellij.xdebugger.XDebugProcess的实现类中,此实现类将通过注册文件中的“<programRunner implementation=""/>”声明语句被加载到Intellij平台中。当开发者点击调试时,将会调用此类的一系列方法,其中,方法sessionInitialized()可以完成关键位置(即数据点)的设置,因此可将数据点的设置以及获取的相关代码写在方法sessionInitialized()的实现中,当Intellij平台调用sessionInitialized()时,可以获取到用户设置的数据点,并将用户设置的数据点传递给调试器,然后语言服务组件再进行关键位置的分析,将分析出的数据点传递给调试器,最后再指示调试器对待分析程序进行调试。
示例的,设置数据点的示例代码如下所示:
@Override
public void sessionInitialized(){
backTarcePoints=BackTraceService.getUserBackTarcePoint();//开发者设置数据点
backTarcePoints.add(BackTraceService.getDefaultBackTarcePoint());//语言服务组件设置数据点
GDBManager.setBackTracePoint(backTarcePoints);//将所有的数据点设置给调试器
GDBManager.runGDB();//指示调试器正式启动调试
}。
302:当调试到第一位置时,调试器获取第一位置的调试信息,其中,第一位置为至少一个位置中的任意一个。
示例性的,当调试器将程序调试到第一位置时,调试器会将程序的调试暂时暂停在该第一位置,并获取该第一位置的调试信息。
以下述C++代码为例介绍获取调试信息的过程。
1 #include<iostream>
2 int main(){
3 int i=2;
4 std::cout<<i<<std::endl;
5 return 0;
6 }
其中,若上述程序中的第四行为该第一位置,因此,当调试器调试到第四行时,会将程序暂时暂停到第四行,并获取与第四行对应的调试信息。
示例性的,该第一位置的调试信息包括以下至少一项:
调试到第一位置时暂停线程的基本信息,比如,暂停线程的名字;
暂停线程的方法栈的信息,例如,方法栈的栈帧编号、栈帧名字、栈帧在源码文件中的行号,等等;
每一层方法栈的变量信息,例如,变量名、变量类型、变量值;
每一层方法栈对应的源码位置;
第一位置在程序中的位置标识;
时间标识,其中,时间标识用于指示调试器调试到第一位置的调试顺序。
示例性的,该调试顺序是指调试器调试待程序时,第一位置是第几个需要暂停的位置,其中,第一位置的调试顺序是由调试到第一位置的时间决定的,时间越早表明该位置的顺序越靠前。因此,时间标识可以直接由调试到第一位置的时间表示,也可以由数字表示。例如,当调试到第一个位置时,可以将第一个位置的时间标识确定为1,即第一个需要暂停的位置,当调试到第二个位置时,可以将第二个位置的第二标识确定为2,即第二个需要暂停的位置。之所以需要记录每个位置的调试顺序,是便于后续基于每个位置的调试顺序,获取用户想要回溯的调试信息。
此外,第一位置的调试信息还可以包括:第一位置的类型,该类型包括该第一位置为普通的数据点或者断点;以及第一位置的调试信息的存储路径;暂停线程的名字;栈帧编号栈帧名字,等其他信息,不再赘述。
用于存储调试信息的文件中的内容示例如下:
303:调试器向调试回溯组件发送第一位置的调试信息,以对第一位置的调试信息进行管理。
示例性的,当程序暂停时,调试器会获知这一信息,并通知调试回溯组件。相应的,调试回溯组件会从调试器接收到第一位置的调试信息。
可选的,当第一位置为用户设置的断点所在的位置或者运行单步调试之后抵达的位置时,调试器在获取第一位置的调试信息之后,还会将第一位置的调试信息发送给用户界面,以在该用户界面上显示该第一位置的调试信息;然后,在接收到用户输入的继续调试指令时,调试器会从第一位置开始继续对程序进行调试,当调试到新的数据点时,再次执行上述步骤301~303中的内容,不再叙述;当该第一位置为用户设置的暂停位置或者语言服务组件分析得到的关键位置时,调试器在获取第一位置的调试信息之后,会将该第一位置的调试信息发送给调试回溯组件,以便调试回溯组件将该第一位置的调试信息存储到存储器,从而实现对调试信息的管理;当调试回溯组件完成对第一位置的调试信息的存储之后,会向调试器发送继续调试指令;相应的,调试器接收到该继续调试指令之后,从第一位置开始继续对程序进行调试,当调试到新的位置时,再次执行上述步骤301~303中的内容,不再叙述。
示例性的,调试回溯组件在存储第一位置的调试信息时,可生成相应的存储文件,该存储文件的格式可以是任意格式,本申请中以Json格式为例说明。其中,该存储文件的存储路径可以是相对路径,也可是绝对路径。当上述示例代码中的存储路径包括每个调试信息的相对路径时,则可以将整个调试过程生成的整个文件转移到其他设备上,比如,通过U盘将整个文件拷贝到其他设备上,或者通过通信接口将整个发件发送到其他设备上;然后其他设备基于每个调试信息的相对存储路径从整个文件中获取每个调试信息,并在其他设备的用户界面上进行调试信息回溯,从而实现在不同的设备上完成程序调试和程序的回溯。
可以看出,在本申请中,预先设置好程序的数据点,实现在对程序进行调试过程中,只会存储与数据点所在位置相关的调试信息,不用存储整个调试过程中的调试信息,避免了因要存储过多数据导致调试运行速度过慢的问题。另外,预先在IDE环境中安装一个回溯组件,该回溯组件包含有存储器,在调试过程中可以回溯组件完成调试信息的存储和管理,使调试信息的存储独立于调试会话,即使调试会话结束,或者,在远端调试的场景下,即便IDE与远端设备断连,也能够完成调试信息的回溯,同时也能支持在不同的设备中对同一调试过程进行回溯,便于协同开发。最后,本申请是存储的数据点的调试信息,而调试器是可以预先记录下数据点的位置,因此,本申请的技术方案对被调试程序的语言并没有任何限制,对于IDE平台也没有任何限制,只要是当前能够在IDE中进行调试的场景,即开发者能够通过IDE设置数据点,即可以准确的存储下调试信息,扩宽了应用场景。
在本申请的一个实施方式中,通过用户界面上的调试回溯服务入口获取回溯指令,其中,该回溯指令用于回溯第一位置的调试信息,其中,第一位置为该至少一个位置中的任意一个,该调试回溯指令包括第一位置的时间标识,其中,时间标识用于标识调试到该第一位置的调试顺序;基于时间标识,确定该第一位置的调试信息的存储文件;基于该存储文件获取该第一位置的调试信息,并将该调试信息发送到用户界面上进行回溯。
在本申请的一个实施方式中,在存储每个位置的调试信息时,可为每个位置生成一个json文件,该json文件中包含有该位置的调试信息。进一步的,在生成每个json文件时设置每个位置的json文件与该位置的调试顺序之间的对应关系,比如,可以以每个位置的调试顺序作为json文件的文件名。举例来说,若通过阿拉伯数字表征每个位置的调试顺序,则在到达第一个需要暂停的位置时,则记录该位置的调试顺序为“1”,并将第一json文件命名为“1”,在到达第二个需要暂停的位置时,则记录该位置的调试顺序为“2”,将第二个json文件命名为“2”,等等。其中,第一个需要暂停的位置和第二个需要暂停的位置可能是同一个位置。因此,记录了每个位置的时间标识后,在调试回溯时,可根据用户输入的第一位置的时间标识,获取对应的json文件,最后,从该json文件中获取第一位置的调试信息,并将该调试信息发送到用户界面进行显示,实现对该第一位置的调试信息的回溯。
应说明,如果设置了每个位置的json文件与该位置的调试顺序之间的对应关系,则在生成json文件中以不用再存储每个位置的时间标识。当然,若只是单纯的生成与每个位置对应的json文件,不设置对应关系,则需要在json文件中存储每个位置的时间标识,这样可依据第一位置的时间标识,遍历所有json文件,从所有json文件中获取包含有第一位置的时间标识的json文件,然后从该json文件中获取出第一位置的调试信息。
示例性的,调试回溯服务入口可以为输入窗口、快捷按钮,等等。比如,可以设置一个调试回溯按钮,在用户点击调试回溯按钮时,则调试回溯组件可以按照调试顺序,依次将至少一个位置的调试信息发送到用户界面上进行回溯;或者,该回溯服务入口为选择按钮,用户点击选择按钮时,可展示各个位置的信息,用户可以选中自己想要回溯的位置,回溯组件获取到用户选择的位置之后,从存储器中获取该位置的调试信息,并将该调试信息发送到用户界面上进行回溯;又如,该回溯服务入口为输入窗口,则用户可以在输入窗口中输入位置的时间标识,比如,位置的行号,则回溯组件基于该时间标识从存储器中获取该位置的调试信息,然后将该调试信息发送到用户界面上进行回溯。
应说明,本申请中的第一声明文件、第二声明文件以及第三声明文件可以是相同的声明文件,也可以是不同的声明文件,本申请对此不做限定。
举例来说,用户界面上显示的是当前暂停位置的调试信息,当用户回溯指令用于回溯上一个数据点的调试信息,则该回溯过程的示例代码如下所示:
id=DebugManager.getCurrentReachedId();//获取当前UI上展示的调试信息的Id
debugInfo=BackTraceManager.getDebugInfoById(id-1);//获取前一个数据点的调试信息
DebugManager.updateUI(debugInfo);//用取到的调试信息更新UI
DebugManager.setCurrentReachedId(id-1);//更新当前UI展示的调试信息的Id。
参阅图4,图4为本申请实施例提供的一种程序调试设备的结构图。程序调试设备400包含调试器402和调试回溯组件403,其中,调试器和调试回溯组件均集成于集成开发环境401中。可选的,调试回溯组件403中包括有存储器404,存储器404用于存储调试信息。
调试器402,用于获取程序,其中,程序对应有至少一个位置;
当调试到第一位置时,获取第一位置的调试信息,其中,第一位置为至少一个位置中的任意一个;
向调试回溯组件403发送第一位置的调试信息;
调试回溯组件403,用于对第一位置的调试信息进行管理。
关于上述调试器402和调试回溯组件403更详细的描述,可参考上述方法实施例中的相关描述,在此不再说明。
参阅图5,图5为本申请实施例提供的一种程序回溯设备的结构图。程序回溯设备500包含调试回溯组件502和用户界面503,且调试回溯组件502和用户界面503均集成于集成开发环境501中。
调试回溯组件502,用于通过用户界面503上的调试回溯服务入口获取回溯指令,回溯指令用于回溯第一位置的调试信息,其中,程序对应有至少一个位置,第一位置为至少一个位置中的任意一个;
基于回溯指令,得到第一位置的调试信息;
通过用户界面503显示第一位置的调试信息。
关于上述调试回溯组件502更详细的描述,可参考上述方法实施例中的相关描述,在此不再说明。
参阅图6,图6为本申请实施例提供的一种电子设备的结构图。电子设备600可以为上述程序调试设备400;或者,为程序调试设备400中的芯片或芯片系统;电子设备600也可以为上述程序回溯设备500,或者,为程序回溯设备500中的芯片或芯片系。
电子设备600包括存储器601、处理器602、通信接口603以及总线604。其中,存储器601、处理器602、通信接口603通过总线604实现彼此之间的通信连接。
存储器601可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器601可以存储程序,当电子设备为上述程序调试设备400时,则当存储器601中存储的程序被处理器602执行时,处理器602和通信接口603用于执行本申请实施例的程序调试方法中的各个步骤;电子设备为上述程序回溯设备500时,则当存储器601中存储的程序被处理器602执行时,处理器602和通信接口603用于执行本申请实施例的程序回溯方法中的各个步骤;
处理器602可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例的音频特征补偿装置或音频识别装置中的单元所需执行的功能,或者执行本申请方法实施例的数据流传输方法。
处理器602还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的数据流传输方法中的各个步骤可以通过处理器602中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器602还可以是通用处理器、数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field ProgrammableGate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器601,处理器602读取存储器601中的信息,结合其硬件完成本申请实施例的用户设备或头戴设备中包括的单元所需执行的功能,或者执行本申请方法实施例的数据流传输方法中的各个步骤。
通信接口603可以为收发器一类的收发装置,来实现电子设备600与其他设备或通信网络之间的通信;通信接口603也可以为输入-输出接口,来实现电子设备600与输入-输出设备之间的数据传输,其中,输入-输出设备包括但不限于键盘、鼠标、显示屏、U盘以及硬盘。比如,处理器602可以通过通信接口603获取待预测数据。
总线604可包括在装置电子设备600各个部件(例如,存储器601、处理器602、通信接口603)之间传送信息的通路。
应注意,尽管图6所示电子设备600仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,电子设备600还包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,电子设备600还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,电子设备600也可仅仅包括实现本申请实施例所必须的器件,而不必包括图6中所示的全部器件。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。在本申请的文字描述中,字符“/”,一般表示前后关联对象是一种“或”的关系;在本申请的公式中,字符“/”,表示前后关联对象是一种“相除”的关系。
可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (26)
1.一种程序调试方法,其特征在于,所述方法应用程序调试设备,所述程序调试设备包括调试器和调试回溯组件;所述方法包括:
所述调试器获取程序,其中,所述程序对应有至少一个位置;
当调试所述程序到第一位置时,所述调试器获取所述第一位置的调试信息,其中,所述第一位置为所述至少一个位置中的任意一个;
所述调试器向所述调试回溯组件发送所述第一位置的调试信息,以对所述第一位置的调试信息进行管理。
2.根据权利要求1所述的方法,其特征在于,所述程序调试设备还包括用户界面,所述方法还包括:
通过所述用户界面上的调试回溯服务入口获取回溯指令,所述回溯指令用于回溯所述第一位置的调试信息;
基于所述回溯指令,得到所述第一位置的调试信息;
通过所述用户界面显示所述第一位置的调试信息。
3.根据权利要求1或2所述的方法,其特征在于,所述程序调试设备还包括用户界面和语言服务组件;所述至少一个位置包括以下至少一种:
用户设置的位置;
其中,所述用户设置的位置包括:所述用户设置的断点的位置和/或所述用户设置的暂停位置,其中,所述断点的位置用于指示所述调试器将所述程序的调试暂停在所述断点的位置,并在所述用户界面上显示与所述断点的位置对应的调试信息;所述用户设置的暂停位置用于指示所述调试器将所述程序的调试暂停在所述用户设置的暂停位置;
所述调试器执行单步调试之后抵达的位置;
所述语言服务组件对所述程序进行分析得到的位置。
4.根据权利要求3所述的方法,其特征在于,当所述至少一个位置包括所述用户设置的位置时,所述方法还包括:
通过所述用户界面上的设置入口获取所述用户设置的位置。
5.根据权利要求3或4所述的方法,其特征在于,当所述至少一个位置包括所述调试器执行单步调试之后抵达的位置时,所述方法还包括:
通过所述用户界面上的单步调试入口获取单步调试指令,所述单步调试指令用于指示所述调试器执行所述单步调试,以将所述程序运行到用户指定的位置;
其中,所述单步调试为单步执行、单步进入和单步退出中的一种。
6.根据权利要求3-5中任一项所述的方法,其特征在于,所述语言服务组件对所述程序进行分析得到的位置包括以下至少一种:
所述程序中的所有函数的入口;
所述程序中的所有函数的出口;
所述程序中所述用户设置的断点所在的函数体的每一行;
所述程序中支持设置为断点的位置。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述第一位置的调试信息包括以下至少一项:
调试到所述第一位置时暂停线程的基本信息;
所述暂停线程的方法栈的信息;
每一层所述方法栈的变量信息;
每一层所述方法栈对应的源码位置;
时间标识,其中,所述时间标识用于指示所述调试器调试到所述第一位置的顺序。
8.一种程序回溯方法,其特征在于,所述方法应用于程序回溯设备,所述程序回溯设备包括调试回溯组件和用户界面;所述方法包括:
所述调试回溯组件通过所述用户界面上的调试回溯服务入口获取回溯指令,所述回溯指令用于回溯所述第一位置的调试信息,其中,所述程序对应有至少一个位置,所述第一位置为所述至少一个位置中的任意一个;
所述调试回溯组件基于所述回溯指令,得到所述第一位置的调试信息;
所述调试回溯组件通过所述用户界面显示所述第一位置的调试信息。
9.根据权利要求8所述的方法,其特征在于,所述程序回溯设备还包括调试器和语言服务组件;所述至少一个位置包括以下至少一种:
用户设置的位置;
其中,所述用户设置的位置包括:所述用户设置的断点的位置和/或所述用户设置的暂停位置,其中,所述断点的位置用于指示所述调试器将所述程序的调试暂停在所述断点的位置,并在用户界面上显示与所述断点的位置对应的调试信息;所述用户设置的暂停位置用于指示所述调试器将所述程序的调试暂停在所述用户设置的暂停位置;
所述调试器执行单步调试之后抵达的位置;
所述语言服务组件对所述程序进行分析得到的位置。
10.根据权利要求9所述的方法,其特征在于,当所述至少一个位置包括所述用户设置的位置时,所述方法还包括:
所述调试器通过所述用户界面上的设置入口获取所述用户设置的位置。
11.根据权利要求9或10所述的方法,其特征在于,当所述至少一个位置包括所述调试器执行单步调试之后抵达的位置时,所述方法还包括:
所述调试器通过所述用户界面上的单步调试入口获取单步调试指令,所述单步调试指令用于指示所述调试器执行所述单步调试,以将所述程序运行到用户指定的位置;
其中,所述单步调试为单步执行、单步进入和单步退出中的一种。
12.根据权利要求9-11中任一项所述的方法,其特征在于,所述程序回溯设备还包括调试器;所述方法还包括:
所述调试器获取所述程序;
当调试到所述第一位置时,所述调试器获取所述第一位置的调试信息;
所述调试器向所述调试回溯组件发送所述第一位置的调试信息,以对所述第一位置的调试信息进行管理。
13.一种程序调试设备,其特征在于,所述程序调试设备包括调试器和调试回溯组件;
所述调试器,用于获取程序,其中,所述程序对应有至少一个位置;
当调试到第一位置时,获取所述第一位置的调试信息,其中,所述第一位置为所述至少一个位置中的任意一个;向所述调试回溯组件发送所述第一位置的调试信息,
所述调试回溯组件,用于对所述第一位置的调试信息进行管理。
14.根据权利要求13所述的设备,其特征在于,所述集成开发环境还包括用户界面;
所述调试回溯组件,还用于通过所述用户界面上的调试回溯服务入口获取回溯指令,所述回溯指令用于回溯第一位置的调试信息;
基于所述回溯指令,从所述回溯组件中得到所述第一位置的调试信息;
通过所述用户界面显示所述第一位置的调试信息。
15.根据权利要求13或14所述的设备,其特征在于,所述程序调试设备还包括用户界面和语言服务组件;所述至少一个位置包括以下至少一种:
用户设置的位置;
其中,所述用户设置的位置包括:所述用户设置的断点的位置和/或所述用户设置的暂停位置,其中,所述断点的位置用于指示所述调试器将所述程序的调试暂停在所述断点的位置,并在用户界面上显示与所述断点的位置对应的调试信息;所述用户设置的暂停位置用于指示所述调试器将所述程序的调试暂停在所述用户设置的暂停位置;
所述调试器执行单步调试之后抵达的位置;
所述语言服务组件对所述程序进行分析得到的位置。
16.根据权利要求15所述的设备,其特征在于,当所述至少一个位置包括所述用户设置的位置时;
所述调试器,还用于通过所述用户界面上的设置入口获取所述用户设置的位置。
17.根据权利要求15或16所述的设备,其特征在于,当所述至少一个位置包括所述调试器执行单步调试之后抵达的位置时,
所述调试器,还用于通过所述用户界面上的单步调试入口获取单步调试指令,其中,所述单步调试指令用于指示所述调试器执行所述单步调试,以将所述程序运行到用户指定的位置;其中,所述单步调试为单步执行、单步进入和单步退出中的一种。
18.根据权利要求15-17中任一项所述的设备,其特征在于,所述语言服务组件对所述程序进行分析得到的位置包括以下至少一种:
所述程序中的所有函数的入口;
所述程序中的所有函数的出口;
所述程序中所述用户设置的断点所在的函数体的每一行;
所述程序中支持设置为断点的位置。
19.根据权利要求13-18中任一项所述的设备,其特征在于,所述第一位置的调试信息包括以下至少一项:
调试到所述第一位置时暂停线程的基本信息;
所述暂停线程的方法栈的信息;
每一层所述方法栈的变量信息;
每一层所述方法栈对应的源码位置;
时间标识,其中,所述时间标识用于指示所述调试器调试到所述第一位置的顺序。
20.一种程序回溯设备,其特征在于,所述程序回溯设备包括调试回溯组件和用户界面;
所述调试回溯组件,用于通过所述用户界面上的调试回溯服务入口获取回溯指令,所述回溯指令用于回溯所述第一位置的调试信息,其中,所述程序对应有至少一个位置,所述第一位置为所述至少一个位置中的任意一个;
基于所述回溯指令,得到所述第一位置的调试信息;
通过所述用户界面显示所述第一位置的调试信息。
21.根据权利要求20所述的设备,其特征在于,所述程序回溯设备还包括调试器和语言服务组件,所述至少一个位置包括以下至少一种:
用户设置的位置;
其中,所述用户设置的位置包括:所述用户设置的断点的位置和/或所述用户设置的暂停位置,其中,所述断点的位置用于指示所述调试器将所述程序的调试暂停在所述断点的位置,并在用户界面上显示与所述断点的位置对应的调试信息;所述用户设置的暂停位置用于指示所述调试器将所述程序的调试暂停在所述用户设置的暂停位置;
所述调试器执行单步调试之后抵达的位置;
所述语言服务组件对所述程序进行分析得到的位置。
22.根据权利要求21所述的设备,其特征在于,当所述至少一个位置包括所述用户设置的位置时,所述调试器,用于通过所述用户界面上的设置入口获取所述用户设置的位置。
23.根据权利要求21或22所述的设备,其特征在于,当所述至少一个位置包括所述调试器执行单步调试之后抵达的位置时,所述调试器,用于通过所述用户界面上的单步调试入口获取单步调试指令,所述单步调试指令用于指示所述调试器执行所述单步调试,以将所述程序运行到用户指定的位置;
其中,所述单步调试为单步执行、单步进入和单步退出中的一种。
24.根据权利要求20-23中任一项所述的设备,其特征在于,所述程序回溯设备还包括调试器;
所述调试器,用于获取所述程序;当调试到所述第一位置时,获取所述第一位置的调试信息;向所述调试回溯组件发送所述第一位置的调试信息;
所述调试回溯组件,用于对所述第一位置的调试信息进行管理。
25.一种电子设备,其特征在于,包括:存储器,用于存储程序;处理器,用于执行存储器存储的程序;当存储器存储的程序被执行时,处理器用于实现权利要求1-7或8-12中任一项所述的方法。
26.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于设备执行的程序代码,所述程序代码包括用于实现权利要求1-7或8-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111093863.4A CN115827418A (zh) | 2021-09-17 | 2021-09-17 | 程序调试方法、程序回溯方法及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111093863.4A CN115827418A (zh) | 2021-09-17 | 2021-09-17 | 程序调试方法、程序回溯方法及相关产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115827418A true CN115827418A (zh) | 2023-03-21 |
Family
ID=85515954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111093863.4A Pending CN115827418A (zh) | 2021-09-17 | 2021-09-17 | 程序调试方法、程序回溯方法及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115827418A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573565A (zh) * | 2024-01-16 | 2024-02-20 | 麒麟软件有限公司 | 调试历史信息复现方法、装置及存储介质 |
-
2021
- 2021-09-17 CN CN202111093863.4A patent/CN115827418A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573565A (zh) * | 2024-01-16 | 2024-02-20 | 麒麟软件有限公司 | 调试历史信息复现方法、装置及存储介质 |
CN117573565B (zh) * | 2024-01-16 | 2024-06-07 | 麒麟软件有限公司 | 调试历史信息复现方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9342237B2 (en) | Automated testing of gesture-based applications | |
US9183113B2 (en) | Debugging analysis in running multi-user systems | |
US9122794B2 (en) | System and method for debugging domain specific languages | |
CN110955428A (zh) | 一种页面显示方法、装置、电子设备及介质 | |
Grechanik et al. | Creating GUI testing tools using accessibility technologies | |
CN110716853A (zh) | 一种测试脚本录制方法、应用程序测试方法和相关装置 | |
CN111190825A (zh) | 自动测试方法、系统及机器人 | |
US20150006961A1 (en) | Capturing trace information using annotated trace output | |
CN113377365B (zh) | 代码显示方法、装置、设备、计算机可读存储介质及产品 | |
CN111596913A (zh) | 一种可视化组件框架编排方法及装置 | |
CN113051514A (zh) | 元素的定位方法、装置、电子设备及存储介质 | |
CN109189388A (zh) | 页面配置方法、服务器及计算机可读介质 | |
CN115904989A (zh) | 一种接口测试方法、装置、设备及可读存储介质 | |
CN116841543A (zh) | 基于Flutter动态生成跨平台多端应用的开发方法 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN115827418A (zh) | 程序调试方法、程序回溯方法及相关产品 | |
CN114048415A (zh) | 表单生成方法及装置、电子设备和计算机可读存储介质 | |
US7689905B1 (en) | Containment of terminal application run-time data for viewing when disconnected from a host server | |
CN117033179A (zh) | 一种机器指令调试方法、装置、电子设备及可读存储介质 | |
CN113377648B (zh) | 软件系统诊断方法、装置、电子设备及计算机可读介质 | |
CN116069649A (zh) | 页面测试方法、装置、设备及介质 | |
CN114895893A (zh) | 多源数据处理方法、装置、设备及存储介质 | |
CN114398290A (zh) | 一种程序调试方法、装置、设备及介质 | |
CN109062785B (zh) | 接口参数约束代码定位方法与系统 | |
CN114968751A (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 |