CN109426504B - 程序的处理方法、装置、电子设备及存储介质 - Google Patents
程序的处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN109426504B CN109426504B CN201710758336.8A CN201710758336A CN109426504B CN 109426504 B CN109426504 B CN 109426504B CN 201710758336 A CN201710758336 A CN 201710758336A CN 109426504 B CN109426504 B CN 109426504B
- Authority
- CN
- China
- Prior art keywords
- information
- program
- jump instruction
- compiler
- calling
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种程序的处理方法、装置、电子设备及存储介质,涉及即时编译技术领域,该方法包括:在程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。通过本发明实施例,可在程序运行失败时基于程序的调试信息来定位程序出错位置,从而提升程序的调试效率。
Description
技术领域
本发明涉及即时编译技术领域,特别是涉及一种程序的处理方法、一种程序的处理装置、一种电子设备以及一种存储介质。
背景技术
随着即时编译技术引用范围越来越广,即时(Just-in-time,JIT)编译器存在于越来越多的软件当中,如JS引擎、Java虚拟机等。
在JIT编译器开发初期,JIT编译器生成程序会经常出现程序运行失败的情况,其中一个常见的错误是JIT编译器生成程序去访问一段非法内存。目前,通常的处理方法是凭借经验找到一个入口,然后对JIT编译器生成程序进行单步调试,调试效率低下。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种程序的处理方法。
相应的,本发明实施例还提供了一种程序的处理装置、一种电子设备以及一种存储介质,用以保证上述方法的实现及应用。
为了解决上述问题,本发明实施例公开了一种程序的处理方法,该程序用于生成即时编译器,所述方法包括:
在所述程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。
可选地,所述根据所述程序中的跳转指令,记录对应的编译器调用信息,包括:在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
可选地,所述在执行所述跳转指令的过程中,记录对应的执行流信息,包括:在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;根据所述内存位置,记录对应的执行流信息。
可选地,所述根据所述编译器调用信息和所述执行流信息,生成对应的调试信息,包括:基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;基于所述对应关系生成对应的调试信息,其中所述调试信息用于确定所述程序运行失败的出错位置。
可选地,所述方法还包括:根据预置分配信息,设置内存区域,所述内存区域用于存储数据信息,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息;在所述程序运行失败后,基于所述内存区域中的数据信息进行输出。
本发明实施例还公开了一种程序的处理装置,所述程序用于生成即时编译器,所述装置包括:
调用信息记录模块,用于在所述程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
执行流信息记录模块,用于在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
结果信息生成模块,用于根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。
可选地,所述调用信息记录模块,包括:
调用指令生成子模块,用于在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;
信息获取子模块,用于根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
可选地,所述执行流信息记录模块,包括:
内存位置获取子模块,用于在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;
执行流信息记录子模块,用于根据所述内存位置,记录对应的执行流信息。
可选地,所述结果信息生成模块,包括:
对应关系创建子模块,用于基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;
结果信息生成子模块,用于基于所述对应关系生成对应的调试信息,其中所述调试信息用于确定所述程序运行失败的出错位置。
可选地,所述装置还包括:内存区域设置模块,用于根据预置分配信息,设置内存区域,所述内存区域用于存储数据信息,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息;数据信息打印模块,用于在所述程序运行失败后,基于所述内存区域中的数据信息进行打印。
本发明实施例还公开了一种电子设备包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:在所述程序的编译过程中,根据程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。
本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本发明实施例中一个或多个所述的程序的处理方法。
本发明实施例包括以下优点:
本发明实施例可以在即时编译器生成程序的编译阶段,针对该程序中的跳转指令,记录对应的编译器调用信息;并且可以根据该编译器调用信息和跳转指令执行时的执行流信息,生成程序的调试信息,该调试信息可以用于确定程序的运行轨迹,进而可在程序运行失败时基于该调试信息来定位程序出错位置,方便定位程序运行失败时的出错位置,提升了程序的调试效率。
附图说明
图1是本发明的一种程序的处理方法实施例的步骤流程图;
图2是本发明的一种程序的处理方法可选实施例的步骤流程图;
图3是本发明的一种程序的处理装置实施例的结构框图;
图4是根据一示例性实施例示出的一种用于程序的调试的电子设备的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
目前,即时编译器生成的指令缺乏文件名称、行号等调试信息,且即时编译器生成程序(简称程序)在运行过程中可能使用了没有保存堆栈信息的跳转指令,如函数内联后使用相对或者绝对跳转指令并没有像函数调用指令那样把返回地址压栈,即不能从堆栈信息里获取程序运行轨迹。在程序运行失败后,只能凭借程序调试员的经验找一个入口,对该程序进行单步调试,以确定程序运行时的出错位置。显然,现有即时编译器生成程序运行出错时,难以确定程序出错位置,降低了程序的调试效率。
本发明实施例的核心构思之一在于,在即时编译器生成程序的编译阶段,针对该程序中的跳转指令,记录对应的编译器调用信息;并在该跳转指令运行时记录对应的执行流信息,进而可根据编译器调用信息和执行流程信息该生成程序的调试信息,以方便定位程序运行失败时的出错位置,提升程序的调试效率。
参照图1,示出了本发明的一种程序的处理方法实施例的步骤流程图,具体可以包括如下步骤:
步骤101,在程序的编译过程中,根据程序中编译的跳转指令,记录对应的编译器调用信息。
本发明实施例中的程序是指即时编译器生成程序,具体可以用于生成即时编译器。在该程序的编译过程中,即在即时编译器生成程序的编译阶段,可以针对该即时编译器生成程序中编译的跳转指令,记录对应的编译器调用信息。该编译器调用信息可以用于确定该跳转指令对应的各调用函数之间的调用关系,如可以包含各调用函数的标识信息。其中,标识信息可以作为调用函数的唯一标识,如可以是由程序自动生成的一个不会重复随机数,本发明实施例对此不作限制。
步骤102,在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的运行轨迹。
在具体实现中,在即时编译器生成程序中的跳转指令运行时,可以对该跳转指令进行记录,生成该跳转指令的执行流信息。该执行流信息可以用来确定跳转指令的执行轨迹。例如,在程序运行过程中,可以针对跳转指令,记录该跳转指令的指针在运行阶段中所在的内存位置,进而可以基于记录的内存位置形成该跳转指令对应的执行流信息。
步骤103,根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。
在本发明实施例中,可以针对程序中的跳转指令,建立编译器调用信息与执行流信息之间的对应关系,进而可以基于该对应关系生成对应的调试信息。该调试信息可以用于确定程序的运行轨迹,如可以确定程序最近若干次执行的跳转指令以及跳转指令是由JIT编译器生成程序什么位置、怎样生成的,本发明实施对此不作限制。
综上,本发明实施例可以在程序编译阶段,根据程序中编译的跳转指令,记录对应的编译器调用信息,并且可以在该跳转指令运行时记录对应的执行流信息,进而可根据该编译器调用信息和执行流信息生成程序的调试信息,该调试信息可以用于确定程序的运行轨迹,进而在程序运行失败时可基于该调试信息来定位程序出错位置,即方便定位程序运行失败时的出错位置,提升了程序的调试效率。
为了本领域技术人员更好理解本发明实施列,以下结合示例对本发明实施例进行描述。
作为本发明的一个应用示例,可以预先在即时编译器生成程序中,对即时编译器生成跳转指令的函数,添加额外功能,包括:a)在即时编译器生成跳转指令时保存当前函数的文件名称、行号和当前即时编译器的函数调用栈等参数信息,以基于保存的参数信息记录编译器调用信息;b)在即时编译器生成的跳转指令运行时,记录跳转指令的PC以及其与上述a)中记录的编译器调用信息的对应关系。
从而,可以基于记录的PC生成执行流信息,并可基于对应关系生成程序的调试信息,以及在程序运行失败时可基于该调试信息定位程序出错位置,方便查找出程序的出错原因,提升调试效率。
需要说明的是,即时编译器生成程序中可以包括一个或多个函数,且函数中可以包括一个或多个指令等等。本示例中,即时编译器生成跳转指令的函数可以用于生成跳转指令,且该即时编译器生成跳转指令的函数可以包含或调用一个或多个其他函数;PC可以用于表征在执行跳转指令时所在内存位置。
此外,还可以开辟一个内存区域,在JIT编译器生成程序运行时,记录下与JIT编译器生成程序编译的跳转指令相关的编译器调用信息和所有执行的跳转指令对应的执行流信息。需要说明的是,在该内存区域中记录的编译器调用信息大小可以是固定不变,如可以是一个固定值,本发明实施对此不作限制。记录的执行流信息可以用于确定跳转指令执行轨迹,跳转指令执行轨迹可随程序执行时间增长。可选地,为了防止内存不足,记录执行流信息的内存大小可以有用户设置,当内存满时,可以从头覆盖跳转指令执行轨迹。
在本发明的一个可选实施例中,该方法还可以包括:根据预置分配信息,设置内存区域,所述内存区域用于存储数据信息,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息;在所述程序运行失败后,基于所述内存区域中的数据信息进行输出。
本发明实施例中,预置的分配信息可以用于分配内存区域的内存大小,可选地,可以由用户设置,本发明实施例对此不作限制。
具体而言,在即时编译器生成程序的运行阶段,可以将跳转指令的执行流信息以及其与编译器调用信息的对应关系写入到内存区域中。从而,在程序运行失败后,可以输出内存区域中记录的数据信息,以方便定位程序出错位置,如可以确定最近若干次执行的跳转指令以及其是在JIT编译器生成程序中什么位置、怎样生成的,进而可查找出程序运行出错原因。跳转指令的最近执行指令数量可以根据内存区域的大小进行确定,本发明实施例对此不作限制。
可选的,如果查找不到出错位置,如在发现调用层次不够的情况下,则可以通过增大内存区域的方式重新运行程序,从而往前追溯更多的跳转指令,以定位出程序出错位置。
参照图2,示出了本发明的一种程序的处理方法可选实施例的步骤流程图,具体可以包括如下步骤:
步骤201,根据预置的分配信息,设置内存区域,所述内存区域用于存储数据信息。
其中,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息。
具体而言,本发明实施例中设置的内存区域可以包括一个或多个区域,如可以包括用于存入编译器调用信息的第一区域、用于存入执行流信息的第二区域和关联区等,本发明实施例对此不作限制。其中,关联区可以用于存入编译器调用信息与执行流信息之间的对应关系,如可以用于存储编译器调用信息与执行流信息的对应关系等。
步骤202,根据程序中编译的跳转指令,记录对应的编译器调用信息。
具体的,可以在内存区域,记录跳转指令在编译阶段对应的编译器调用信息,如在即时编译器生成程序编译跳转指令的过程中,针对该跳转指令,获取当前函数的文件名、行号、当前即时编译器的函数调用栈等参数信息,并且可以对该参数信息进行记录,以及可以基于记录的参数信息生成编译器调用信息。
在本发明的一个可选实施例中,上述步骤202可以包括如下子步骤:
子步骤2021,在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息。
子步骤2022,根据所述标识信息,获取跳转指令对应的编译器调用信息。
作为本发明的一个示例,在JIT编译器生成程序的编译过程中,在生成跳转指令时,可以同时生成一条函数调用指令,以通过该函数调用指令对跳转指令对应的编译器调用信息进行记录。其中,该函数调用指令所调用的函数参数可以为跳转指令的标识信息。
例如,函数调用指令可以是该跳转指令生成函数genCallOrJump()中调用的callFuncToSave函数。该callFuncToSave函数可以用于在程序运行时,依据跳转指令的标识信息将跳转指令的PC,存入到内存的第二区域,即将跳转指令的PC存入上述步骤201中设置的内存区域,如果发现内存满了,则可以覆盖原有数据;并且可以将跳转指令的PC与标识信息建立关联,以将编译器调用信息与执行流信息之间的对应关系写入上述步骤201分配内存的关联区。
具体的,针对程序中每一条跳转指令,即时编译器生成程序可以创建对应的一个跳转指令生成函数genCallOrJump();该跳转指令生成函数genCallOrJump()可以基于预设数据结构体struct DebugInfo,保存跳转指令生成时对应的排除故障信息debugInfo,作为本发明实施例中的编译器调用信息。例如,跳转指令生成函数genCallOrJump()可以用于判断程序调试功能是否激活,并在程序调试激活的时候,针对跳转指令创建一个新的数据结构体,以基于新创建的数据结构体记录该跳转指令对应的排除故障信息debugInfo。
可选地,排除故障信息debugInfo可以包括:标识信息、文件名file、行号line、当前指令信息、当前函数调用信息,等等,本发明实施例对此不作限制。
其中,标识信息可以为每条目标跳转指令的唯一标识Id,该目标跳转指令可以用于表示程序中当前执行或编译或的跳转指令;文件名file可以用于表征当前所调用函数所在的文件;行号line可以用于表征当前所调用函数所在的行数,如可以确定当前调用函数在文件中第几行;当前指令信息可以为当前PC,该PC可以用于表征当前指令所在的内存位置;当前函数调用信息可以用于确定当前函数所对应的父函数,如可以包括:指向针对跳转指令新创建的数据结构体DebugInfo的指针。其中,指向结构体的DebugInfo的指针可以标识为DebugInfo*parent。
在一个可选示例中,可以根据PC和程序的符号表信息可以得到当前函数所调用的父函数的文件名file、行号line;基于同样的方式,可以得到父函数的父函数,依次类推,按照此方式就可以回溯得到函数调用链的DebugInfo。需要说明的是,回溯堆栈的深度可以由用户指定,本发明实施例对此不作限制。
例如,一个程序可以在文件a.c的第10行开始执行函数func1();且函数func1()在文件a.c的第11行,调用了函数func2a(),在文件a.c的第18行,调用了函数func2b();以及函数func2b()在文件a.c的第50行开始执行,并且在文件a.c的第51行调用了函数func3()。
函数func3()可以在另一个文件b.c的第10行开始执行,并可在文件b.c的第11行,调用了函数func4();该函数func4()可以在文件b.c的第21行开始执行,并可以在第22行调用了函数generateCallOrJump();以及可以在文件b.c的第30行开始执行在该跳转指令生成函数genCallOrJump(),该跳转指令生成函数genCallOrJump()可以在文件b.c的第31行生成了跳转指令__j(target)。
基于文件a.c和文件b.c,程序最终生成跳转指令__j(target)时,可能的调用关系包括:
情况1)func1→func2a→func3→func4→genCallOrJump;或者,
情况2)func1→func2b→func3→func4→genCallOrJump。
如果是情况1,中可以基于情况1中各函数之间的调用关系生成一个DebugInfo链表,如下表1:
表1
其中,本示例中没有继续追溯函数func1的父函数,因此其的parent为空null。
本示例可以通过各个函数的数据结构体struct DbugInfo中的parent字段和父函数的Id建立关联,组成DebugInfo链表。该DebugInfo链表可以用于保存跳转指令是由即时编译器代码怎样生成的信息,因此该DebugInfo链表中的信息可作为本发明实施例中的编译器调用信息。
可选地,对于相同函数调用关系,可以保存一个记录,比如假设用户指定的回溯深度为4,如果在回溯深度为2时所调用的父函数parent相同,且在回溯深度为3时所调用的父函数的父函数相同,以及在回溯深度为4时所调用的父函数的父函数的父函数也相同,则可以认为是同一个调用栈信息,可以在DebugInfo链表保存对应的一个记录,本发明实施例对此不作具体限制。
步骤203,在执行所述跳转指令的过程中,记录对应的执行流信息。
在本发明实施例中,可选地,在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;根据所述内存位置,记录对应的执行流信息,如可以将该执行流信息存入到内存区域中,作为内存区域中的数据信息。
作为本发明的一个示例,结合上述例子,在运行过程,若程序在执行了三次跳转指令生成函数genCallOrJump()后运行失败,这三次执行跳转指令生成函数genCallOrJump()的PC分别为0x10000100、0x10000200、0x10000300,则针对该跳转指令,记录的执行流信息可以为:0x10000100、0x10000200、0x100003000。
其中,程序运行阶段中记录的执行流信息可以随着程序执行时间的长短、经历的跳转指令数的大小而变化。当内存满时,可以覆盖内存区域中原记录的数据,如可以覆盖之前记录的执行流信息,以对最近执行的跳转指令进行记录。
步骤204,根据所述编译器调用信息和所述执行流信息,生成对应的调试信息。
在本发明的一个可选实施例中,上述步骤204可以包括如下子步骤:
子步骤2041,基于所述标识信息,确定所述编译器调用信息与所述执行流信息之间的对应关系;
子步骤2042,基于所述对应关系生成对应的调试信息,其中所述调试信息用于确定所述程序运行失败时的出错位置。
具体的,可以将跳转指令的PC与标识信息建立关联,从而确定执行流信息与编译器调用信息之间的对应关系;并且可以将该对应关系存入到内存区域中,从而可以形成跳转指令的PC与编译器调用信息中的ID的对应关系表,作为程序的调试信息。例如,在程序执行三次跳转指令生成函数genCallOrJump()后,三次生成的跳转指令__j(target)的标识信息debugInfo.Id都可以为0x000005。进而,可依据该跳转指令__j(target)的标识信息debugInfo.Id与程序三次生成跳转指令所在的内存位置PC之间的对应关系,形成的对应关系表,如下表2所示:
表2
步骤205,在所述程序运行失败后,基于所述内存区域中的数据信息进行输出。
本发明实施例中,程序运行失败后,可以基于内存区域中记录的数据信息进行输出,如可以输出该内存区域中记录的编译器调用信息。输出的编译器调用信息可以用于定位程序运行出错位置,如可以包括程序失败前若干次所有跳转指令的执行流信息及其由JIT编译器生成程序编译时的编译器调用信息等。
作为本发明的一个示例,程序运行失败后,可以打印出内存区域中的数据信息。具体的,可以基于上述步骤203确定的编译器调用信息和上述步骤204中确定的执行流信息,如上述DebugInfo链表中的信息和上述对应关系表中的PC信息,得到完整的符号信息,该符号信息可以作为需要打印的数据信息。例如,结合上述例子,在经历三条生成指令失败后,打印的数据信息可以如下表3所示:
表3
基于上述表3中的信息,可以确定程序是从0x10000100跳转到0x10000200,继续跳转到0x10000300后执行出错的;而0x10000300这条跳转指令是由b.c文件中第30行生成的,b.c文件中第30行的函数又是从文件中第21行调用的……这样可以很快定位到源代码中的出错位置,然后可以根据出错位置的上下文进一步判定程序运行的出错原因。
当然,还可以采用其他方式输出内存区域中的数据信息,如可以采用播放、显示等方式进行输出,本发明实施例对此不作限制。
综上,本发明实施例在JIT代码编译过程中,可以记录编译的跳转指令对应的编译器调用信息,如可在即时编译器中生成跳转指令时保存生成时刻的调用栈信息;并且可以在跳转指令执行时记录对应的执行流信息,进而可以通过编译器调用信息和执行流信息生成即时编译程序的调试信息,以方便在程序运行识别时定位程序运行出错位置,提高程序的调试效率。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为根据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了本发明的一种程序的处理装置实施例的结构框图。程序用于生成即时编译器,该装置具体可以包括如下模块:
调用信息记录模块301,用于在所述程序的编译过程中,根据程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
执行流信息记录模块302,用于在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
结果信息生成模块303,用于根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。
在本发明的一个可选实施例中,所述调用信息记录模块301,包括:
调用指令生成子模块,用于在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;
信息获取子模块,用于根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
在本发明的一个可选实施例中,所述执行流信息记录模块302,包括:
内存位置获取子模块,用于在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;
执行流信息记录子模块,用于根据所述内存位置,记录对应的执行流信息。
在本发明的一个可选实施例中,所述结果信息生成模块303,包括:
对应关系创建子模块,用于基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;
结果信息生成子模块,用于基于所述对应关系生成对应的调试信息,其中所述调试信息用于确定所述程序运行失败的出错位置。
在本发明的一个可选实施例中,所述装置还可以包括如下模块:
内存区域设置模块,用于根据预置分配信息,设置内存区域,所述内存区域用于存储数据信息,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息;
数据信息打印模块,用于在所述程序运行失败后,基于所述内存区域中的数据信息进行打印。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
图4是根据一示例性实施例示出的一种用于程序的处理的电子设备400的结构框图。例如,电子设备400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图4,电子设备400可以包括以下一个或多个组件:处理组件402,存储器404,电源组件406,多媒体组件408,音频组件410,输入/输出(I/O)的接口412,传感器组件414,以及通信组件416。
处理组件402通常控制电子设备400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件402可以包括一个或多个处理器420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理组件402可以包括多媒体模块,以方便多媒体组件408和处理组件402之间的交互。
存储器404被配置为存储各种类型的数据以支持在设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件406为电子设备400的各种组件提供电力。电源组件406可以包括电源管理***,一个或多个电源,及其他与为电子设备400生成、管理和分配电力相关联的组件。
多媒体组件408包括在所述电子设备400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当电子设备400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜***或具有焦距和光学变焦能力。
音频组件410被配置为输出和/或输入音频信号。例如,音频组件410包括一个麦克风(MIC),当电子设备400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
I/O接口412为处理组件402和***接口模块之间提供接口,上述***接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件414包括一个或多个传感器,用于为电子设备400提供各个方面的状态评估。例如,传感器组件414可以检测到设备400的打开/关闭状态,组件的相对定位,例如所述组件为电子设备400的显示器和小键盘,传感器组件414还可以检测电子设备400或电子设备400一个组件的位置改变,用户与电子设备400接触的存在或不存在,电子设备400方位或加速/减速和电子设备400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件416被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件416经由广播信道接收来自外部广播管理***的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件416还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器404,上述指令可由电子设备400的处理器420执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行一种程序的处理方法,所述方法包括:在所述程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;根据所述编译器调用信息和所述执行流信息,生成所述程序的调试信息。其中,程序用于生成即时编译器。
可选地,所述根据所述程序中的跳转指令,记录对应的编译器调用信息,包括:在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
可选地,所述在执行所述跳转指令的过程中,记录对应的执行流信息,包括:在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;根据所述内存位置,记录对应的执行流信息。
可选地,所述根据所述编译器调用信息和所述执行流信息,生成对应的调试信息,包括:基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;基于所述对应关系生成对应的调试信息,其中所述调试信息用于确定所述程序运行失败的出错位置。
可选地,所述方法还包括:根据预置分配信息,设置内存区域,所述内存区域用于存储数据信息,所述数据信息包括以下至少一种:所述编译器调用信息、所述执行流信息和所述调试信息;在所述程序运行失败后,基于所述内存区域中的数据信息进行输出。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以预测方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种程序的处理方法和装置、一种电子设备以及一种存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,根据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种程序的处理方法,其特征在于,所述程序用于生成即时编译器,所述方法包括:
在所述程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
根据所述编译器调用信息和所述执行流信息,确定所述编译器调用信息与所述执行流信息之间的对应关系,生成所述程序的调试信息;其中,所述调试信息用于确定所述程序运行失败的出错位置;
在所述程序运行失败后,基于内存区域中的数据信息进行输出;其中,所述数据信息包括所述调试信息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述程序中的跳转指令,记录对应的编译器调用信息,包括:
在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;
根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
3.根据权利要求1所述的方法,其特征在于,所述在执行所述跳转指令的过程中,记录对应的执行流信息,包括:
在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;
根据所述内存位置,记录对应的执行流信息。
4.根据权利要求2所述的方法,其特征在于,所述根据所述编译器调用信息和所述执行流信息,生成对应的调试信息,包括:
基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;
基于所述对应关系生成对应的调试信息。
5.根据权利要求1至4任一所述的方法,其特征在于,所述方法还包括:
根据预置分配信息,设置所述内存区域,所述内存区域用于存储所述数据信息,所述数据信息还包括以下至少一种:所述编译器调用信息和所述执行流信息。
6.一种程序的处理装置,其特征在于,所述程序用于生成即时编译器,所述装置包括:
调用信息记录模块,用于在所述程序的编译过程中,根据所述程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
执行流信息记录模块,用于在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
结果信息生成模块,用于根据所述编译器调用信息和所述执行流信息,确定所述编译器调用信息与所述执行流信息之间的对应关系,生成所述程序的调试信息;其中,所述调试信息用于确定所述程序运行失败的出错位置;
数据信息打印模块,用于在所述程序运行失败后,基于内存区域中的数据信息进行打印;其中,所述数据信息包括所述调试信息。
7.根据权利要求6所述的装置,其特征在于,所述调用信息记录模块,包括:
调用指令生成子模块,用于在编译跳转指令时,生成所述跳转指令对应的函数调用指令,所述函数调用指令调用的函数参数包含所述跳转指令的标识信息;
信息获取子模块,用于根据所述标识信息,获取所述跳转指令对应的编译器调用信息。
8.根据权利要求6所述的装置,其特征在于,所述执行流信息记录模块,包括:
内存位置获取子模块,用于在执行所述程序中各跳转指令时,分别获取各跳转指令当前所在的内存位置;
执行流信息记录子模块,用于根据所述内存位置,记录对应的执行流信息。
9.根据权利要求7所述的装置,其特征在于,所述结果信息生成模块,包括:
对应关系创建子模块,用于基于所述标识信息,确定所述编译器调用信息与所述执行流信息的对应关系;
结果信息生成子模块,用于基于所述对应关系生成对应的调试信息。
10.根据权利要求6至9任一所述的装置,其特征在于,所述装置还包括:
内存区域设置模块,用于根据预置分配信息,设置所述内存区域,所述内存区域用于存储所述数据信息,所述数据信息还包括以下至少一种:所述编译器调用信息和所述执行流信息。
11.一种电子设备,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
在所述程序的编译过程中,根据程序中的跳转指令,记录对应的编译器调用信息,所述编译器调用信息用于确定所述跳转指令对应的各调用函数之间的调用关系;
在执行所述跳转指令的过程中,记录对应的执行流信息,所述执行流信息用于确定所述跳转指令的执行轨迹;
根据所述编译器调用信息和所述执行流信息,确定所述编译器调用信息与所述执行流信息之间的对应关系,生成所述程序的调试信息;其中,所述调试信息用于确定所述程序运行失败的出错位置;
在所述程序运行失败后,基于内存区域中的数据信息进行输出;其中,所述数据信息包括所述调试信息。
12.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如方法权利要求1-5中一个或多个所述的程序的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710758336.8A CN109426504B (zh) | 2017-08-29 | 2017-08-29 | 程序的处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710758336.8A CN109426504B (zh) | 2017-08-29 | 2017-08-29 | 程序的处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109426504A CN109426504A (zh) | 2019-03-05 |
CN109426504B true CN109426504B (zh) | 2021-11-19 |
Family
ID=65503619
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710758336.8A Active CN109426504B (zh) | 2017-08-29 | 2017-08-29 | 程序的处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109426504B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111694571B (zh) * | 2019-03-15 | 2022-11-01 | 上海寒武纪信息科技有限公司 | 编译方法及装置 |
CN109918132B (zh) * | 2019-03-26 | 2021-04-16 | 龙芯中科技术股份有限公司 | 一种指令安装方法、装置、电子设备及存储介质 |
CN112445484B (zh) * | 2019-08-27 | 2023-11-24 | 龙芯中科技术股份有限公司 | 一种寄存器处理方法、装置、电子设备及存储介质 |
CN112445483B (zh) * | 2019-08-27 | 2023-11-24 | 龙芯中科技术股份有限公司 | 一种指令生成方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122881A (zh) * | 2007-09-20 | 2008-02-13 | 福建星网锐捷网络有限公司 | 一种基于mips架构cpu的异常点定位诊断方法 |
US8910124B1 (en) * | 2011-10-31 | 2014-12-09 | Google Inc. | Low-overhead method and apparatus for collecting function call trace data |
CN104252402A (zh) * | 2014-09-05 | 2014-12-31 | 深圳创维数字技术有限公司 | 一种程序调试方法及装置 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN105893240A (zh) * | 2015-11-20 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 一种Android程序调试方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063258B (zh) * | 2013-03-21 | 2017-05-03 | 国际商业机器公司 | 用于调试过程中的代码动态切换的方法和*** |
-
2017
- 2017-08-29 CN CN201710758336.8A patent/CN109426504B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122881A (zh) * | 2007-09-20 | 2008-02-13 | 福建星网锐捷网络有限公司 | 一种基于mips架构cpu的异常点定位诊断方法 |
US8910124B1 (en) * | 2011-10-31 | 2014-12-09 | Google Inc. | Low-overhead method and apparatus for collecting function call trace data |
CN104252402A (zh) * | 2014-09-05 | 2014-12-31 | 深圳创维数字技术有限公司 | 一种程序调试方法及装置 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN105893240A (zh) * | 2015-11-20 | 2016-08-24 | 乐视致新电子科技(天津)有限公司 | 一种Android程序调试方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109426504A (zh) | 2019-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426504B (zh) | 程序的处理方法、装置、电子设备及存储介质 | |
CN105955765B (zh) | 应用预加载方法及装置 | |
JP6254751B2 (ja) | 通信モジュールファームウェア及びプラグイン生成方法、装置、プログラム並びに記録媒体 | |
CN107291626B (zh) | 数据存储方法和装置 | |
CN107391218A (zh) | 编译方法及装置、电子设备和计算机可读存储介质 | |
CN111736916A (zh) | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 | |
CN113377370A (zh) | 一种文件处理方法、装置、电子设备及存储介质 | |
CN112241361A (zh) | 测试用例生成方法及装置、问题场景自动复现方法及装置 | |
CN109344051B (zh) | 数据处理的方法、装置、电子设备及存储介质 | |
CN111538574A (zh) | 任务堆栈的管理方法、装置、终端及存储介质 | |
CN110795354A (zh) | 信息处理方法、装置及存储介质 | |
CN116069612A (zh) | 一种异常定位方法、装置和电子设备 | |
CN113010157A (zh) | 一种代码生成方法及装置 | |
CN106293683B (zh) | 一种项目的编译方法及装置 | |
CN110851370B (zh) | 程序测试方法及装置、存储介质 | |
CN112256563A (zh) | 安卓应用稳定性测试方法、装置、电子设备及存储介质 | |
CN111209195A (zh) | 一种生成测试用例的方法及装置 | |
CN107885571B (zh) | 显示页面控制方法及装置 | |
CN112631695B (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN114661606A (zh) | 程序调试方法、装置、电子设备及存储介质 | |
CN111240927B (zh) | 检测程序中方法耗时的方法、装置及存储介质 | |
CN112445484B (zh) | 一种寄存器处理方法、装置、电子设备及存储介质 | |
CN112596695A (zh) | 歌曲导唱方法、装置、电子设备及存储介质 | |
CN114020694B (zh) | 一种头文件地址的获取方法、装置、电子设备及存储介质 | |
CN111459494A (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 | ||
CB02 | Change of applicant information |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |