CN115878363A - 用于解析处理器异常的方法、装置及计算机可读存储介质 - Google Patents

用于解析处理器异常的方法、装置及计算机可读存储介质 Download PDF

Info

Publication number
CN115878363A
CN115878363A CN202310052630.2A CN202310052630A CN115878363A CN 115878363 A CN115878363 A CN 115878363A CN 202310052630 A CN202310052630 A CN 202310052630A CN 115878363 A CN115878363 A CN 115878363A
Authority
CN
China
Prior art keywords
processor
instruction
observation point
real
illegal
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
CN202310052630.2A
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.)
Beijing Ziguang Xinneng Technology Co Ltd
Original Assignee
Beijing Ziguang Xinneng Technology 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 Beijing Ziguang Xinneng Technology Co Ltd filed Critical Beijing Ziguang Xinneng Technology Co Ltd
Priority to CN202310052630.2A priority Critical patent/CN115878363A/zh
Publication of CN115878363A publication Critical patent/CN115878363A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请涉及处理器技术领域,公开一种用于解析处理器异常的方法、装置及计算机可读存储介质。其中,该方法通过确定处理器中的异常观测点,将异常观测点的合法处理器指令替换为非法处理器指令,并读取处理器在执行非法处理器指令时的实时运行数据,对实时运行数据进行解析,整个解析过程未对处理器进行中断,维持了处理器的正常持续运行。同时,读取的实时运行数据是通过在处理器运行时读取的数据,相比将处理器中断后读取的数据,能够更加真实地反映和复现了处理器在实际场景中发生的异常,有效提高了处理器异常解析的准确性。

Description

用于解析处理器异常的方法、装置及计算机可读存储介质
技术领域
本申请涉及处理器技术领域,例如涉及一种用于解析处理器异常的方法、装置及计算机可读存储介质。
背景技术
随着人工智能、物联网、工业自动化、高性能运算的不断发展,对计算机的计算能力和性能要求也越来越高。计算机在处理大型数据或复杂任务时经常会出现运行异常的情况。如何快速高效的解析异常发生的原因并迅速解决,以保证计算机的正常运行变得尤为重要。
现有的针对计算机上运行的处理器CPU(Central Processing Unit,中央处理单元)的调试方法,通常是暂时中断处理器的进程,在处理器执行的处理器指令中设置断点进行调试。
这样的调试方法打断了处理器的正常运行,会造成其他不可预料的问题。且异常现象是在处理器的工作过程中出现,在处理器中断情况下较难复现真实异常情况,延长了异常发现和调试的时间。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本申请的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
为了对披露的实施例的一些方面有基本的理解,下面给出了简单的概括。所述概括不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围,而是作为后面的详细说明的序言。
本申请实施例提供了一种用于解析处理器异常的方法、装置及计算机可读存储介质,以提高处理器异常解析的效率和精确性。
在一些实施例中,所述方法包括:确定处理器中的异常观测点;其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址;将所述异常观测点的合法处理器指令替换为非法处理器指令;读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
可选地,所述确定处理器中的异常观测点,包括:确定运行系统中的多个处理器中的一个或多个处理器为目标处理器;其中,所述目标处理器为可能出现异常的处理器;分别确定每个目标处理器中的异常观测点。
可选地,所述处理器中内置有异常处理函数;所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:通过所述异常处理函数中的读取命令读取所述处理器在执行所述非法处理器指令时的实时运行数据;其中,所述处理器在执行所述非法处理器指令时跳转至所述异常处理函数;将所述实时运行数据存储至指定地址。
可选地,所述将所述异常观测点的合法处理器指令替换为非法处理器指令,包括:通过调试接口GDB将所述异常观测点的合法处理器指令替换为非法处理器指令。
可选地,还包括:将所述异常观测点的合法处理器指令替换为非法处理器指令之后,保存所述合法处理器指令;在所述处理器执行完毕所述非法处理器指令后,将所述异常观测点中保存的所述非法处理器指令重新替换成所述合法处理器指令。
可选地,在所述异常观测点为多个的情况下,所述方法还包括:在所述处理器执行完毕多个异常观测点中的每个异常观测点的合法处理器指令后,将所述非法处理器指令重新保存至所述异常观测点中。
可选地,所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:按照第一预设周期读取所述处理器在执行所述非法处理器指令时的实时运行数据,并保存读取的所述实时运行数据;所述对所述实时运行数据进行解析,包括:按照第二预设周期对所述实时运行数据进行解析;其中,所述第一预设周期的时长小于或者等于所述第二预设周期的时长。
在一些实施例中,所述装置包括:确定模块,被配置为确定处理器中的异常观测点;其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址;替换模块,被配置为将所述异常观测点的合法处理器指令替换为非法处理器指令;解析模块,被配置为读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
本申请实施例提供的用于解析处理器异常的方法、装置及计算机可读存储介质,可以实现以下技术效果:
通过确定处理器中的异常观测点,将异常观测点的合法处理器指令替换为非法处理器指令,并读取处理器在执行非法处理器指令时的实时运行数据,对实时运行数据进行解析,整个解析过程未对处理器进行中断,维持了处理器的正常持续运行。同时,读取的实时运行数据是通过在处理器运行时读取的数据,相比将处理器中断后读取的数据,能够更加真实地反映和复现了处理器在实际场景中发生的异常,有效提高了处理器异常解析的准确性。
以上的总体描述和下文中的描述仅是示例性和解释性的,不用于限制本申请。
附图说明
一个或多个实施例通过与之对应的附图进行示例性说明,这些示例性说明和附图并不构成对实施例的限定,附图中具有相同参考数字标号的元件示为类似的元件,附图不构成比例限制,并且其中:
图1是本申请实施例的一种硬件部署示意图;
图2是本申请实施例提供的一种用于解析处理器异常的方法的流程图;
图3是本申请实施例提供的另一种用于解析处理器异常的方法的流程图;
图4是本申请实施例提供的又一种用于解析处理器异常的方法的流程图;
图5是本申请实施例提供的一种实际应用场景中用于解析处理器异常的方法的示意图;
图6是本申请实施例提供的一种用于解析处理器异常的装置的示意图;
图7是本申请实施例提供的另一种用于解析处理器异常的装置的示意图。
具体实施方式
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。在以下的技术描述中,为方便解释起见,通过多个细节以提供对所披露实施例的充分理解。然而,在没有这些细节的情况下,一个或多个实施例仍然可以实施。在其它情况下,为简化附图,熟知的结构和装置可以简化展示。
本申请实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请实施例的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
除非另有说明,术语“多个”表示两个或两个以上。
随着处理器嵌入式系统的发展,尤其是具有功能安全特性的多处理器系统,由于其应用场景越来越复杂,在运行时,处理器和处理器之间往往都存在复杂的通信,处理器之间的耦合越来越紧密。因此,为了保证处理器之间的核间通信能稳定工作,通常系统在设计上,都设计了核间心跳等保活机制,系统内部监控处理器之间的核间心跳,一旦监视到核间保活机制出现异常,系统将进入安全模式。
软件调试是嵌入式软件开发过程中的一个重要环节。随着多处理器系统的越来越广泛地运用,尤其对时序要求很高的多处理器多任务系统,传统的侵入式调试方法已经无法满足多处理器系统对实时调试的要求。
传统的嵌入式软件的调试方法,无论是使用基于硬件的调试器,还是使用基于软件的处理器断点指令,两种调试器都属于断点式的调试方案。以多处理器系统为例,这种断点式的侵入式调试方法,由于断点的介入,会影响或破坏多处理器系统的核间的实时通信和运行时序,无法达到调试的预期目的,对时序敏感的多处理器系统,这种调试方法,甚至可能会带来极其危险的后果。
其中,常用的一种调试方法要求在调试过程中,需要通过软硬件断点暂停某一个处理器的运行,再对该处理器运行的软件进行单步调试。但是,一旦某个处理器的运行被停止,影响了该处理器的运行时序,导致该处理器和其他处理器的核间通信被暂停,包括周期性发送的心跳包被停止发送,其他处理器检测到核间通信工作异常,系统进入保护模式,严重的甚至会导致系统崩溃,达不到调试的目的。所以,这类侵入式的调试方法,越来越不适用于调试当前复杂的多处理器系统。
另外一种常用的嵌入式调试方法是在系统日志调试法。通过在现有系统中注入日志代码,通过分析系统运行时打印的系统日志,达到调试的目的。这种方法每个处理器的程序的运行不受影响,可以确保核间通信的正常工作,系统日志可以真实反映系统的工作状态,对分析现场问题是有效的。但是,在实际的调试过程中,需要在现有系统中加入日志代码,然后编译,发布,更换固件,复现问题,再收集和分析日志。这个过程往往需要重复多次,才能定位问题,调试过程很低效。如果有的问题只能在客户现场出现,客户现场往往是不允许更换为工程版固件,进行问题调查。
本申请实施例主要针对目前断点侵入式调试方法存在的上述缺陷,利用CPU的异常机制,动态植入调试代码的非侵入式调试技术,该技术是以不打断和影响现有多处理器系统运行状态为目的,完成实时调试现有系统的轻量级调试方法。
结合图1所示,为本申请实施例的一种硬件部署示意图,计算机端的调试软件通过编译时生成的汇编文件将定位需要调试的代码段的地址,并通过调试接口,将目标板上一个或多个中央处理器CPU上的该地址设置为观测点,当一个或多个CPU运行代码到该地址时,由于观测点注入了调试代码,通过调试代码将需要系统运行的系统异常信息导出供调试软件读取,调试软件读取现场信息后结合编译生成的内存映射表,将原始的目标系统现场信息解析为可阅读系统的实时日志,并实时打印出来,用户通过分析实时日志到达调试的目的。
上述解析方法,直接在现有系统中动态注入调试代码,不需要重新更新固件,不影响系统的正常运行,能快速准确复现问题,通过动态注入的调试代码导出的系统状态信息能准确反映出系统的运行状态,方便分析问题。此外,该方法对处理器也没有任何限制和要求,适用于目前所有主流的处理器,具有广泛的实用性。同时,PC端的调试软件将实时现场信息读取出来并解析成调试日志,工程师或开发人员通过分析调试日志,达到调试目标处理器的目的。
结合图2所示,本申请实施例提供了一种用于解析处理器异常的方法,如图2所示,该方法包括以下步骤:
S202:确定处理器中的异常观测点。
其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址。
本实施例中提供的方法应用于调试软件中,所述调试软件包括异常观测点以及所述异常观测点对应的非法处理器指令,所述异常观测点用于表征处理器对应的多个中央处理单元处理器指令中可能导致异常的处理器指令所在地址,所述非法处理器指令用于指示所述处理器执行异常处理。
S204:将所述异常观测点的合法处理器指令替换为非法处理器指令。
S206:读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
本申请实施例中的调试软件在系统运行时,一直保持和处理器的运行系统的连接状态,并实时地从目标板内存中读取保存的运行数据,并结合编译时生成内存映射表,对程序现场进行解析,形成有效的调试日志。
上述异常观测点可以是一个,也可以是多个。在异常观测点为多个时,可以所有异常观测点对应同一个待观测指令,也可以异常观测点分别对应不同的待观测指令。待观测指令可以是获取系统运行数据的指令,也可以对应于非法处理器指令,非法处理器指令可以是具体的指示处理器进行异常处理,并读取处理器进入异常处理期间的系统实时运行数据的多条处理器指令,非法处理器指令也可以是指示处理器进入异常处理,在异常处理中,读取系统的实时运行数据。本申请实施例对非法处理器指令包含的具体内容和形式不进行限定,可以根据实际调试需求进行设定。
上述实时运行数据为运行系统的实时运行数据,具体可以是嵌入式系统运行时的现场信息,例如可以包括内存中的静态区、堆、栈,以及CPU和外设寄存器等信息。调试软件也可以根据调试需要,配置需要导出的调试信息的内容,比如,如果调试只关心函数内部的信息,可以只导出CPU寄存器和栈的信息,这样可以减少导出日志的数据量,使得导出的系统实时运行数据的大小灵活可配。
具体而言,本申请实施例中提供的用于解析处理器异常的方法,通过两部分软件功能共同实现,即计算机端的调试软件和目标板端被调试的处理器的运行系统,调试软件通过GDB调试器或其他调试器连接到目标板。同时,调试软件通过编译生成的汇编代码找到被调试代码的地址,通过GDB调试接口设置运行系统上该地址为异常观测点,即通过GDB命令将异常观测点对应的地址中的处理器指令用非法处理器指令代替。处理器的运行系统运行到异常观测点所在地址,由于该异常观测点的原有的合法处理器指令已被非法的非法处理器指令替换,运行系统进入异常处理环节,读取出CPU中的运行系统在异常处理环节期间运行的上下文信息等实时运行数据。整个过程未打断CPU的运行系统的运行,且完全恢复CPU运行系统发生异常对应的实际场景,得到的实时运行数据更加准确,没有影响运行系统上本身的运行流程,也不会导致系统复位。
本申请实施例提供的上述用于解析处理器异常的方法,通过确定处理器中的异常观测点,将异常观测点的合法处理器指令替换为非法处理器指令,并读取处理器在执行非法处理器指令时的实时运行数据,对实时运行数据进行解析,整个解析过程未对处理器进行中断,维持了处理器的正常持续运行。同时,读取的实时运行数据是通过在处理器运行时读取的数据,相比将处理器中断后读取的数据,能够更加真实地反映和复现了处理器在实际场景中发生的异常,有效提高了处理器异常解析的准确性。
可选地,所述确定处理器中的异常观测点,包括:确定运行系统中的多个处理器中的一个或多个处理器为目标处理器;其中,所述目标处理器为可能出现异常的处理器;分别确定每个目标处理器中的异常观测点。
对于多处理器的系统,上述实时运行数据中还包括CPU的标识信息,例如CPU id,读取系统实时运行数据的时间信息等等。通过CPU的标识信息和时间信息,开发人员或者工程师可以快速定位发生异常的处理器和发生异常的时间。这样,在多处理器的运行系统上运行调试软件,在不打断任何一个处理器的正常运行的情况下调取一个或多个处理器的实时运行数据,由于多个处理器之间存在相互依赖的关系,在这种情况下调取的实时运行数据能够有效反映各个处理器之间的相互关系以及时序关系,对于异常情况的复现更加准确,进一步提高了对处理器进行异常解析的准确性,也有效减少了解析时间。
举例来说,如图3所示,计算机中的运行系统中运行多个处理器,以处理器A为例,图3所示为处理器A中存储的多条合法处理器指令,合法处理器指令1、合法处理器指令2、合法处理器指令3以及合法处理器指令4。正常情况下,处理器A顺序执行合法处理器指令1至合法处理器指令4。当运行系统出现异常,开发人员经过初步识别发现该异常可能出现在处理器A的函数M上,开发人员想调试处理器A中运行的该函数M,该函数M为合法处理器指令2指示处理的函数,在调试前的设置模式,用户可以通过调试软件对该函数的合法处理器指令2设置异常观测点,通过GDB调试接口,将异常观测点内的合法处理器指令2替换为非法处理器指令,以使处理器A执行非法处理器指令。
结合图4所示,为本申请实施例提供的另一种用于解析处理器异常的方法,该方法中的处理器中内置有异常处理函数,如图4所示,该方法具体包括以下步骤:
S402:确定处理器中的异常观测点。
其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址。该方法可以应用于调试软件,所述调试软件设置了异常观测点以及所述异常观测点对应的非法处理器指令,所述异常观测点用于表征处理器对应的多个执行指令中可能导致异常的执行指令的地址,所述非法处理器指令用于指示所述处理器执行异常处理。
S404:将所述异常观测点的合法处理器指令替换为非法处理器指令。
S406:通过所述异常处理函数中的读取命令读取所述处理器在执行所述非法处理器指令时的实时运行数据。
其中,所述处理器在执行所述非法处理器指令时跳转至所述异常处理函数
S408:将所述实时运行数据存储至指定地址。
具体而言,调试软件通过编译生成的汇编代码找到被调试代码的地址,通过GDB调试接口设置运行系统上该地址为异常观测点,即通过GDB命令将异常观测点所在的处理器指令(即执行指令)用非法的非法处理器指令替换。当处理器运行到异常观测点时,由于该异常观测点的原有的合法处理器指令已被非法的非法处理器指令替换,会触发CPU的未定义指令的异常,从而跳转到未定义指令的异常处理函数,在异常处理函数中,导出CPU此时的运行的上下文信息等实时运行数据,并保存到运行系统的内存中供调试软件读取,并且在读取实时运行数据之后,处理器跳转回异常观测点所在地址,此时异常观测点中保存的内容重新被替换成原有的合法处理器指令,以使处理器能继续执行。这样,在处理器中预先发布异常处理函数,不必在每个异常观测点都设置多条重复的异常语句,每次指示处理器在读取非法处理器指令后直接跳转到异常处理函数中执行异常处理语句,可以减少代码冗余,且降低代码错误率,进一步提升处理器的异常解析效率和准确性。
进一步地,可以根据读取的所述实时运行数据对所述处理器进行解析。具体而言,电子设备可以自动将实时运行数据发送给开发人员,电子设备也可以通过自动解析软件进行异常解析,还可以是开发人员定期在电子设备中获取指定时间段内存储的实时运行数据,并进行解析。本申请实施例对于异常解析的具体过程不进行限定。
本申请实施例可以直接在运行系统中进行调试,调试过程不停止或复位现有系统,不需要烧录工程版固件,弥补了目前传统侵入式调试手段的诸多不足。并且,利用CPU自带的异常机制使,也对硬件没有任何特殊的要求和限制,适用于几乎所有的嵌入式系统,应用空间广泛。
可选地,所述将所述实时运行数据存储至指定地址,包括:将所述实时运行数据存储至指定地址的先进先出FIFO(First In FirstOut,先进先出数据缓存器)堆栈中。
可选地,所述调试软件通过调试接口与所述处理器相连;所述将所述异常观测点的合法处理器指令替换为非法处理器指令,包括:通过调试接口GDB将所述异常观测点的合法处理器指令替换为非法处理器指令。
上述的调试接口为GDB(GNU symbolic debugger,GUN工程调试器)接口。GDB可以查看另一个程序在“执行”期间正在执行的操作,或该程序崩溃时正在执行的操作。通过GDB接口可以动态向目标处理器发送指令,实现动态调试的目的。
可以理解的是,本申请实施例还可以通过其他接口进行调试指令的发送,本申请实施例对此并不进行限定。
可选地,所述方法还包括:将所述异常观测点的合法处理器指令替换为非法处理器指令之后,保存所述合法处理器指令;在所述处理器执行完毕所述非法处理器指令后,将所述异常观测点中保存的所述非法处理器指令重新替换成所述合法处理器指令。
具体而言,调试软件通过编译生成的汇编代码找到被调试代码的地址,通过GDB调试接口设置运行系统上该地址为异常观测点,即通过GDB命令将异常观测点中的合法处理器指令用非法的非法处理器指令替换。
进一步地,为了使得运行系统能够正常运行,在处理器进行完异常处理后,还需要继续原有的正常运行,因此,在替换原有的合法处理器指令之后,还将原有的合法处理器指令保存,并跳出异常处理函数之前,将异常观测点中的内容替换成原有的合法处理器指令。
当处理器运行到异常观测点时,由于该异常观测点的原有的合法处理器指令已被非法的非法处理器指令替换,会触发处理器的未定义指令的异常,从而跳转到未定义指令的异常处理函数,在异常处理函数中,读取处理此时的运行的上下文信息等实时运行数据保存到运行系统的内存中供调试软件读取。处理器跳转回异常观测点,此时异常观测点中保存的内容已经替换成原有的合法处理器指令,处理器可以继续执行原有的合法处理器指令,这样可以实现处理器的正常运行不受干扰。
这样,在处理器执行非法处理器指令后,仍然能够执行原有的合法处理器指令,保证了系统的正常运行。
可选地,所述异常观测点包括多个。
可选地,在所述异常观测点为多个的情况下,所述方法还包括:在所述处理器执行完毕多个异常观测点中的每个异常观测点的合法处理器指令后,将所述非法处理器指令重新保存至所述异常观测点中。这样,可以在下一次启动异常解析时,直接使处理器运行非法处理器指令,从而节省了将合法处理器指令替换成非法处理器指令的时间,进一步提升了解析效率。
具体而言,调试软件支持在一个处理器上设置一个或者多个异常观测点,也支持对运行系统的不同处理器上同时设置多个异常观测点。
针对在不同处理器上同时设置多个异常观测点的情况,在导出的实时运行数据中包括时间戳和处理器的标识,例如CPUID等信息。这样,异常观测点之间互不影响,由于在导出的异常信息的日志中加入了时间戳和处理器的CPUID等信息,能准确反映系统的运行时序,对调试多处理器多任务的复杂嵌入式系统尤为高效。
可选地,所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:按照第一预设周期读取所述处理器在执行所述非法处理器指令时的实时运行数据,并保存读取的所述实时运行数据;所述对所述实时运行数据进行解析,包括:按照第二预设周期对所述实时运行数据进行解析;其中,所述第一预设周期的时长小于或者等于所述第二预设周期的时长。
具体而言,通过设置第一预设周期和第二预设周期的时长,可以实时读取实时运行数据,并且定期进行实时运行数据的解析,例如,设置每一小时读取一次实时运行数据,每周进行一次实时运行数据的解析。由于处理器所在的系统无法可能无法保存大量的异常处理函数读出的实时运行数据,为了节省存储空间,可以通过调试软件实时读取实时运行数据,并实时将数据进行保存,而仅在出现异常时进行分析。可以理解的是,为了保证对系统的分析更加准确,也可以将第一预设周期的时长和第二预设周期的时长设置成相等,可以实现实时读取实时运行数据,并实时进行分析。
这样,通过设置第一预设周期可以保证获取更多的实时运行数据,通过设置第二预设周期,可以实现仅在发现处理器异常后进行解析,减少无效解析浪费的时间和资源,提高处理器异常解析的有效性。
为便于理解,下面结合图5所示,详细介绍实际应用场景中的用于解析处理器异常的方法,本实施例以在运行系统中的处理器A(以下以CPU表示)上进行调试为例进行说明。首先在调试软件中完成异常观测点设置,用户即可让运行系统全速运行起来,系统进入调试模式。如图5所示,该方法包括:
步骤1,CPU运行至待调试的函数入口地址合法处理器指令1。
步骤2,当CPU运行至合法处理器指令1的下一条指令(即合法处理器指令2)时,由于原合法处理器指令2已被替换为非法处理器指令,CPU异常处理函数被触发。
步骤3,进入步骤3的未定义指令异常处理函数,在异常处理函数中,需要根据预先配置好的调试信息选项,将系统的实时运行数据信息导出到内存的FIFO中,调试软件通过调试接口将调试信息从目标板的FIFO中周期性或实时读取出来。在退出异常处理函数前,用被保存的合法处理器指令2替换非法处理器指令,将合法处理器指令2的下一条合法处理器指令3在替换为非法处理器指令,并将中央处理器的PC指针指向合法处理器指令2,继续执行合法处理器指令2。
步骤4,完成执行合法处理器指令2。
步骤5,执行合法处理器指令3,由于合法处理器指令3已经提前被替换为非法处理器指令,系统再次触发未定义指令异常函数。
步骤6,进入异常处理函数,在异常处理函数中,再次把合法处理器指令2替换为非法处理器指令,并恢复合法处理器指令3,退出异常处理函数,PC指针返回到合法处理器指令3。
步骤7,合法处理器指令3被执行,确保后续的流程能继续执行。
通过这样的乒乓机制,目标处理器能在运行时自动加载异常观测点并执行调试代码,异常观测点能被反复使用。
综上所述,由于异常观测点上被动态注入了调试代码,在CPU运行到观测点时,通过注入的调试代码将系统的含时间戳和CPUID信息的异常信息导出至内存FIFO,调试软件实时将调试信息从目标板的FIFO读出并解析,打印出来,供工程师分析。此外,可以在多个处理器上设置多个异常观测点,并在调试信息加上CPUID等信息。这样,打印出来的调试信息能显示多处理器系统的运行时序,就能真实反映出系统的实际运行状态。
同时,本申请实施例提供的用于解析处理器异常的方法,不发布和烧录调试用的工程版本固件,就可以达到调试目的,整个过程也不影响在线系统的程序运行,方便利用客户现场环境复现问题,分析问题。多处理器多任务系统的调试变得简单,高效,节约了解决客户现场问题的调试成本。
结合图6所示,本申请实施例提供一种用于解析处理器异常的装置600,包括确定模块602、替换模块604和解析模块606。确定模块602被配置为确定处理器中的异常观测点;其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址;替换模块604被配置为将所述异常观测点的合法处理器指令替换为非法处理器指令;解析模块606被配置为读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
本申请实施例提供的上述用于解析处理器异常的装置,通过确定处理器中的异常观测点,将异常观测点的合法处理器指令替换为非法处理器指令,并读取处理器在执行非法处理器指令时的实时运行数据,对实时运行数据进行解析,整个解析过程未对处理器进行中断,维持了处理器的正常持续运行。同时,读取的实时运行数据是通过在处理器运行时读取的数据,相比将处理器中断后读取的数据,能够更加真实地反映和复现了处理器在实际场景中发生的异常,有效提高了处理器异常解析的准确性。
可选地,所述确定处理器中的异常观测点,包括:确定运行系统中的多个处理器中的一个或多个处理器为目标处理器;其中,所述目标处理器为可能出现异常的处理器;分别确定每个目标处理器中的异常观测点。
可选地,所述处理器中内置有异常处理函数;所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:通过所述异常处理函数中的读取命令读取所述处理器在执行所述非法处理器指令时的实时运行数据;其中,所述处理器在执行所述非法处理器指令时跳转至所述异常处理函数;将所述实时运行数据存储至指定地址。
可选地,所述将所述异常观测点的合法处理器指令替换为非法处理器指令,包括:通过调试接口GDB将所述异常观测点的合法处理器指令替换为非法处理器指令。
可选地,还包括:将所述异常观测点的合法处理器指令替换为非法处理器指令之后,保存所述合法处理器指令;在所述处理器执行完毕所述非法处理器指令后,将所述异常观测点中保存的所述非法处理器指令重新替换成所述合法处理器指令。
可选地,在所述异常观测点为多个的情况下,所述方法还包括:在所述处理器执行完毕多个异常观测点中的每个异常观测点的合法处理器指令后,将所述非法处理器指令重新保存至所述异常观测点中。
可选地,所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:按照第一预设周期读取所述处理器在执行所述非法处理器指令时的实时运行数据,并保存读取的所述实时运行数据;所述对所述实时运行数据进行解析,包括:按照第二预设周期对所述实时运行数据进行解析;其中,所述第一预设周期的时长小于或者等于所述第二预设周期的时长。
结合图7所示,本申请实施例提供一种用于解析处理器异常的装置700,包括处理器(processor)100和存储器(memory)101。可选地,该装置还可以包括通信接口(Communication Interface)102和总线103。其中,处理器100、通信接口102、存储器101可以通过总线103完成相互间的通信。通信接口102可以用于信息传输。处理器100可以调用存储器101中的逻辑指令,以执行上述实施例的用于解析处理器异常的方法。
此外,上述的存储器101中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器101作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本申请实施例中的方法对应的程序指令/模块。处理器100通过运行存储在存储器101中的程序指令/模块,从而执行功能应用以及数据处理,即实现上述实施例中用于解析处理器异常的方法。
存储器101可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器101可以包括高速随机存取存储器,还可以包括非易失性存储器。
本申请实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行上述用于解析处理器异常的方法。
本申请实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述用于解析处理器异常的方法。
上述的计算机可读存储介质可以是暂态计算机可读存储介质,也可以是非暂态计算机可读存储介质。
本申请实施例的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括一个或多个指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质可以是非暂态存储介质,包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
以上描述和附图充分地示出了本公开的实施例,以使本领域的技术人员能够实践它们。其他实施例可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施例的部分和特征可以被包括在或替换其他实施例的部分和特征。而且,本申请中使用的用词仅用于描述实施例并且不用于限制权利要求。如在实施例以及权利要求的描述中使用的,除非上下文清楚地表明,否则单数形式的“一个”(a)、“一个”(an)和“所述”(the)旨在同样包括复数形式。类似地,如在本申请中所使用的术语“和/或”是指包含一个或一个以上相关联的列出的任何以及所有可能的组合。另外,当用于本申请中时,术语“包括”(comprise)及其变型“包括”(comprises)和/或包括(comprising)等指陈述的特征、整体、步骤、操作、元素,和/或组件的存在,但不排除一个或一个以上其它特征、整体、步骤、操作、元素、组件和/或这些的分组的存在或添加。在没有更多限制的情况下,由语句“包括一个…”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。本文中,每个实施例重点说明的可以是与其他实施例的不同之处,各个实施例之间相同相似部分可以互相参见。对于实施例公开的方法、产品等而言,如果其与实施例公开的方法部分相对应,那么相关之处可以参见方法部分的描述。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。所述技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。所述技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本申请实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
附图中的流程图和框图显示了根据本申请实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

Claims (10)

1.一种用于解析处理器异常的方法,其特征在于,包括:
确定处理器中的异常观测点;其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址;
将所述异常观测点的合法处理器指令替换为非法处理器指令;
读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
2.根据权利要求1所述的方法,其特征在于,所述确定处理器中的异常观测点,包括:
确定运行系统中的多个处理器中的一个或多个处理器为目标处理器;其中,所述目标处理器为可能出现异常的处理器;
分别确定每个目标处理器中的异常观测点。
3.根据权利要求1所述的方法,其特征在于,所述处理器中内置有异常处理函数;所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:
通过所述异常处理函数中的读取命令读取所述处理器在执行所述非法处理器指令时的实时运行数据;其中,所述处理器在执行所述非法处理器指令时跳转至所述异常处理函数;
将所述实时运行数据存储至指定地址。
4.根据权利要求1所述的方法,其特征在于,所述将所述异常观测点的合法处理器指令替换为非法处理器指令,包括:
通过调试接口GDB将所述异常观测点的合法处理器指令替换为非法处理器指令。
5.根据权利要求1所述的方法,其特征在于,还包括:
将所述异常观测点的合法处理器指令替换为非法处理器指令之后,保存所述合法处理器指令;
在所述处理器执行完毕所述非法处理器指令后,将所述异常观测点中保存的所述非法处理器指令重新替换成所述合法处理器指令。
6.根据权利要求1所述的方法,其特征在于,在所述异常观测点为多个的情况下,所述方法还包括:
在所述处理器执行完毕多个异常观测点中的每个异常观测点的合法处理器指令后,将所述非法处理器指令重新保存至所述异常观测点中。
7.根据权利要求1所述的方法,其特征在于,所述读取所述处理器在执行所述非法处理器指令时的实时运行数据,包括:
按照第一预设周期读取所述处理器在执行所述非法处理器指令时的实时运行数据,并保存读取的所述实时运行数据;
所述对所述实时运行数据进行解析,包括:
按照第二预设周期对所述实时运行数据进行解析;其中,所述第一预设周期的时长小于或者等于所述第二预设周期的时长。
8.一种用于解析处理器异常的装置,其特征在于,包括:
确定模块,被配置为确定处理器中的异常观测点;其中,所述异常观测点用于指示所述处理器的多个执行指令中可能导致异常的执行指令的地址;
替换模块,被配置为将所述异常观测点的合法处理器指令替换为非法处理器指令;
解析模块,被配置为读取所述处理器在执行所述非法处理器指令时的实时运行数据,并对所述实时运行数据进行解析。
9.一种用于解析处理器异常的装置,包括处理器和存储有程序指令的存储器,其特征在于,所述处理器被配置为在执行所述程序指令时,执行如权利要求1至7任一项所述的用于解析处理器异常的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令设置为执行如权利要求1至7任一项所述的用于解析处理器异常的方法。
CN202310052630.2A 2023-02-02 2023-02-02 用于解析处理器异常的方法、装置及计算机可读存储介质 Pending CN115878363A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310052630.2A CN115878363A (zh) 2023-02-02 2023-02-02 用于解析处理器异常的方法、装置及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310052630.2A CN115878363A (zh) 2023-02-02 2023-02-02 用于解析处理器异常的方法、装置及计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN115878363A true CN115878363A (zh) 2023-03-31

Family

ID=85758661

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310052630.2A Pending CN115878363A (zh) 2023-02-02 2023-02-02 用于解析处理器异常的方法、装置及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN115878363A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117170987A (zh) * 2023-11-03 2023-12-05 睿思芯科(深圳)技术有限公司 嵌入式实时操作系统的监视方法、系统及相关设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144179A1 (en) * 2001-03-30 2002-10-03 Transmeta Corporation Method and apparatus for accelerating fault handling
US20050216895A1 (en) * 2004-03-23 2005-09-29 Tran Hieu T Method and apparatus for remote debugging of kernel and application software
CN101246449A (zh) * 2008-02-25 2008-08-20 华为技术有限公司 跟踪函数调用轨迹的方法和装置
CN102662845A (zh) * 2012-04-17 2012-09-12 华为技术有限公司 一种实现经过性数据断点的方法、装置及系统
CN110362396A (zh) * 2019-07-23 2019-10-22 天津国芯科技有限公司 基于powerpc架构并支持中断嵌套的外部中断管理方法及系统
CN115357515A (zh) * 2022-10-19 2022-11-18 北京紫光芯能科技有限公司 一种多核系统的调试方法、装置、计算机设备及存储介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020144179A1 (en) * 2001-03-30 2002-10-03 Transmeta Corporation Method and apparatus for accelerating fault handling
US20050216895A1 (en) * 2004-03-23 2005-09-29 Tran Hieu T Method and apparatus for remote debugging of kernel and application software
CN101246449A (zh) * 2008-02-25 2008-08-20 华为技术有限公司 跟踪函数调用轨迹的方法和装置
CN102662845A (zh) * 2012-04-17 2012-09-12 华为技术有限公司 一种实现经过性数据断点的方法、装置及系统
CN110362396A (zh) * 2019-07-23 2019-10-22 天津国芯科技有限公司 基于powerpc架构并支持中断嵌套的外部中断管理方法及系统
CN115357515A (zh) * 2022-10-19 2022-11-18 北京紫光芯能科技有限公司 一种多核系统的调试方法、装置、计算机设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117170987A (zh) * 2023-11-03 2023-12-05 睿思芯科(深圳)技术有限公司 嵌入式实时操作系统的监视方法、系统及相关设备
CN117170987B (zh) * 2023-11-03 2024-03-08 睿思芯科(深圳)技术有限公司 嵌入式实时操作系统的监视方法、系统及相关设备

Similar Documents

Publication Publication Date Title
US8090989B2 (en) System and method for bi-directional debugging of computer
US8572577B2 (en) Monitoring changes to data within a critical section of a threaded program
JP5905904B2 (ja) デバッグ例外生成の制御
JP4222370B2 (ja) デバッグ支援装置及びデバッグ処理方法をコンピュータに実行させるためのプログラム
KR101519845B1 (ko) 안티디버깅 방법
EP0307075A2 (en) Method and apparatus for measuring program execution
US8037459B2 (en) Recovery from nested exceptions in an instrumentation routine
Chow et al. Multi-stage replay with crosscut
JPH0823837B2 (ja) サンプリング性能分析方法及び装置
US20120036501A1 (en) Method and System for Capturing System and User Events Using Hardware Trace Devices
US20140289726A1 (en) Function exit instrumentation for tail-call optimized code
Dovgalyuk Deterministic Replay of System's Execution with Multi-target QEMU Simulator for Dynamic Analysis and Reverse Debugging.
Doray et al. Diagnosing performance variations by comparing multi-level execution traces
Ge et al. Reverse debugging of kernel failures in deployed systems
CN108021791B (zh) 数据保护方法及装置
CN115878363A (zh) 用于解析处理器异常的方法、装置及计算机可读存储介质
Jeong et al. Fifa: A kernel-level fault injection framework for arm-based embedded linux system
US20070150866A1 (en) Displaying parameters associated with call statements
CN105095079A (zh) 一种热点模块指令跟踪的方法及设备
US7526756B2 (en) Address watch breakpoints with basing pointers
Coppik et al. TrEKer: Tracing error propagation in operating system kernels
Dovgalyuk et al. Don't panic: reverse debugging of kernel drivers
Liang et al. RIPT--An Efficient Multi-Core Record-Replay System
US7249285B2 (en) Address watch breakpoints in a hardware synchronization range
KR20190076217A (ko) 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20230331

RJ01 Rejection of invention patent application after publication