CN101470662A - 一种多核mips平台下并行系统调试方法 - Google Patents
一种多核mips平台下并行系统调试方法 Download PDFInfo
- Publication number
- CN101470662A CN101470662A CNA2007103047654A CN200710304765A CN101470662A CN 101470662 A CN101470662 A CN 101470662A CN A2007103047654 A CNA2007103047654 A CN A2007103047654A CN 200710304765 A CN200710304765 A CN 200710304765A CN 101470662 A CN101470662 A CN 101470662A
- Authority
- CN
- China
- Prior art keywords
- reset
- cpu
- site environment
- debugging message
- resets
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种多核MIPS平台下并行系统调试方法,用以解决现有调试技术中存在的操作不便或根本无法适用的问题。本发明方法包括:当运行阶段产生关键问题时,保存出现问题的现场环境,并进行复位;当确认是由于出现关键问题而复位的,进行关键问题处理,保存复位现场的现场环境,并重新启动设备;设备重新启动,当确认在设备初始化过程产生新的调试信息,保存初始化现场的现场环境。本发明所述对于应用开发人员透明,极大简化了多核MIPS平台下的调试复杂度,并且使调试方便,缩短产品研发周期,节省开发成本。
Description
技术领域
本发明涉及多核MIPS(Microprocessor without interlocked piped stages,无内部互锁流水级微处理器,或者,Million Instructions Per Second,每秒百万条指令)平台下的并行技术,尤其涉及一种多核MIPS平台下并行系统的调试方法。
背景技术
目前多核并行技术越来越普遍,多核MIPS平台已可以提供成熟的解决方案,很多大芯片公司及龙芯也提供MIPS的支持,已经成为现代的嵌入式系统主流的平台。MIPS大量应用在PDA、机顶盒、信息终端和防火墙等设备上,可以说使用多核MIPS嵌入式系统是未来嵌入式领域的发展方向。
由于多核MIPS平台上并行运行的每个CPU都会对内存、硬盘、IO设备等资源进行操作,会竞争使用互斥资源,所以对于研发产品的调试工作是非常困难的。
目前,普遍使用的调式方法是跟踪打印调试方法和Jtag调试方法。
跟踪打印调试方法是目前在研发中最常用的方法,使用这个技术的方法很难找到问题具体发生的位置,要多次进行猜测,做大量试验才可能会找到问题所在,这样会在研发进度和成本上产生很大影响.在正式发布的产品上不能有不相关的很多打印信息,不能进行后期的客户复杂环境中的问题跟踪。由于要向终端输出大量的打印信息,将很大影响程序的运行速度,所以有一些对性能要求很高的程序在产生问题的情况下不能使用跟踪打印进行调试.
在多核并发情况下有可能根本不能使用:在进行嵌入式开发时,很多情况是打印对终端直接操作(如对串口直接操作),由于是并发多核执行,会出现打印重叠以至于看不到在打印什么,因为每个核都在向终端输出。
Jtag调试方法是使用一个硬件与要调试的机器进行联接,当系统或软件出现问题时对CPU进行控制,然后可以读各个CPU的PC指针,访问堆栈的当前内容。使用Jtag方法要额外使用硬件设备,会增加成本;每个Jtag只能对一个机器进行操作,还要有一条外接线非常不方便于工作;对于CPU的PC指针跑飞的情况不能进行跟踪定位;只能在研发价段使用;通过Jtag得到的数值要经过计算和查找才会找到PC运行所在的函数;在正式发布的产品上不能使用,因此不能进行后期的客户复杂环境中的问题跟踪。
发明内容
本发明提供一种多核MIPS平台下并行系统调试方法,用以解决现有调试技术中存在的操作不便或根本无法适用的问题。
本发明方法包括:
步骤A:当运行阶段产生关键问题时,保存出现问题的现场环境,并进行复位;
步骤B:当确认是由于出现关键问题而复位的,进行关键问题处理,保存复位现场的现场环境,并重新启动设备;
步骤C:设备重新启动,当确认在设备初始化过程产生新的调试信息,保存初始化现场的现场环境。
进一步地,所述步骤A具体包括:
步骤A1:当运行阶段产生问题时,判断所述问题是否为关键问题,如果是,执行步骤A2,否则在程序中处理,并在处理后返回到正常运行状态;
步骤A2:判断是否需要保存出现问题的CPU的所有寄存器的状态,如果需要,保存该CPU的所有寄存器的状态值,并执行步骤A3,否则直接执行步骤A3;
步骤A3:按要求进行复位。
进一步地,所述步骤A1还包括:通过软件看门狗和/或硬件看门狗记录死锁信息,并将死锁信息作为关键问题,执行步骤A2。
进一步地,所述步骤A3具体包括:
调用不可屏蔽中断广播函数,当其它CPU收到不可屏蔽中断广播后,分别将PC跳到0xBFC00000处进行复位。
进一步地,所述步骤B具体包括:
步骤B1:复位后,判断是否是由于出现问题而启动,如果是一次正常的复位操作,则进入复位流程,进行整板复位;如果启动程序发现是由于出现关键问题而复位的,保存复位现场的现场环境,并标记此次复位新产生的调试信息;
步骤B2:保存现场环境后,判断仲裁复位CPU,如果该CPU就是用来复位的CPU,进行整板复位,并重新启动设备,否则永远等待仲裁CPU复位。
进一步地,所述步骤B1中,将复位现场的现场环境保存到非易失寄存器中。
进一步地,所述步骤C具体包括:
步骤C1:设备重新启动后会重新初始化所有硬件设备;
步骤C2:检查本次启动有没有生成过新的调试信息,如果有,保存所述调试信息,并正常启动,否则直接正常启动。
进一步地,所述步骤C2中,保存所述调试信息的过程具体包括:
将调试信息生成文件进行保存;
当保存文件超过5个后,用后面新产生的文件替换最先生成的文件。
所述调试信息包括:该CPU当时的运行位置、函数返回值和调用踪迹。
综上所述,本发明提供了一种多核MIPS平台下并行系统调试方法,可以带来如下有益效果:
可以精确显示出出现问题的位置,可以连续记录5次问题的出现,对于应用开发人员透明,极大简化了多核MIPS平台下的调试复杂度;
查看时可以看到CPU寄存器的所有信息,返回函数的函数名,出现问题时的CPU所在的函数位置,偏移量,调用踪迹这几项重要信息,这主要得益于本调试方法能够捕获所有系统异常,并在异常发生时及时完整地保存了现场环境,并通过自动分析将现场环境翻译成可读性很强的文本信息,使调试方便,缩短产品研发周期,节省开发成本;
不用增加额外硬件设备,无额外成本投入;
在产品运行过程中仍可跟踪可能出现的问题,对系统性能没有影响。
附图说明
图1为本发明实施例所述方法的整体流程示意图;
图2为本发明实施例中,运行阶段产生问题的处理流程示意图;
图3为本发明实施例中,复位后处理的流程示意图;
图4为本发明实施例中,重新启动后处理的流程示意图;
图5为本发明实施例中,通过软件看门狗来监控cpu因死锁而发生异常的流程示意图。
具体实施方式
下面结合附图来具体描述本发明的优先实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理。
下面结合附图1到附图5对本发明实施例所述方法进行详细说明。
一个系统在运行阶段,通常都会产生一些异常,对异常发生时的现场环境(现场环境包括各个cpu的通用寄存器值、状态寄存器值以及堆栈的内容)进行分析判断就可以知道系统出了什么问题。具体的说就是,当一个异常产生时,通过该cpu的cause寄存器(cause寄存器是cpu的状态寄存器之一,它主要记录了异常发生的原因,如内存寻址错误、系统重起、发生不可屏蔽中断等等)内容可以得知是什么原因产生异常,如果产生异常的问题不是我们所关心的问题,即不是关键问题时,就对这个异常带来的问题进行合法化处理,然后返回到应用部分的代码,以保证程序可以继续执行;如果是关键问题,还要看这个关键问题是否需要在这个阶段就将系统运行的现场环境保存下来。
如图1所示,图1为本发明实施例所述方法的整体流程示意图,本发明实施例所述方法主要包括:当运行阶段产生关键问题时,保存出现问题的现场环境,并进行复位;当确认是由于出现关键问题而复位的,进行关键问题处理,保存复位现场的现场环境,并重新启动设备;设备重新启动,当确认在设备初始化过程产生新的调试信息,保存初始化现场的现场环境,下面分别进行阐述。
如图2所示,图2为运行阶段产生问题时进行处理的流程示意图,具体可以包括以下步骤:
步骤200:正常运行状态;
步骤201:运行阶段产生了问题;
步骤202:判断该问题是否为关键问题,如果是,执行步骤203,否则在程序中处理即可,处理后返回到正常运行状态;
步骤203:进入问题处理流程;
步骤204:判断是否需要保存当前出现问题的cpu(即发生异常的cpu,因为多核mips平台下经常发生一个cpu发生异常,但其它cpu仍然正常工作的情况)的所有寄存器的状态,如果需要,执行步骤205,否则执行步骤206;
步骤205:保存当前CPU的所有寄存器的状态值,并执行步骤206;
步骤206:按多核MIPS平台的硬件操作要求调用NMI(不可屏蔽中断)广播函数,其它CPU收到NMI广播后,分别将PC跳到0xBFC00000处执行复位程序。然后进入下一个处理阶段——复位后处理阶段。
在本发明实施例所述方法中,是通过发NMI复位来看cause判断保存现场环境标认,本领域普通技术人员应该知道,本发明实施例当然也可以通过其它的复位方式,读内存中一个标志判断需要保存调试环境。通过任何复位的后保存CPU的调试环境与本方法相同,此处就不再赘述。
复位后,启动程序首先检查的是是否由于出现问题而启动,如果是一次正常的复位操作,则进入复位流程,将整板复位(相当于硬件重新加电);如果启动程序发现是由于出现关键问题而复位的,然后将现场环境保存到非易失存储器中,并标记新产生的调试信息。保存现场环境后,要仲裁CPU(多核MIPS平台下每一个cpu都会进入复位处理程序,各自记录自己的现场环境,但只能由一个cpu进行整板复位操作,否则其它cpu还没有记录完现场环境就可能被复位了。这里仲裁的原则是首选cpu0,若cpu0就是发生异常的cpu,则选择cpu31,其它依次第推),如果是,将整板复位,这次复位将会引起正常启动,因为是新出现的调试信息,所以进入重新启动后处理阶段。
如图3所示,图3为复位后处理阶段的处理流程示意图,可以包括以下步骤:
步骤300:复位;
步骤301:判断是否为NMI,如果是,执行步骤302,否则,执行步骤307;
步骤302:CPU现场保存识别函数;
步骤303:判断该CPU是否已经保存过现场环境,如果是,执行步骤304,否则执行步骤309;
步骤304:进入预备复位流程;
步骤305:仲裁复位的CPU,如果该cpu就是用来复位的CPU,执行步骤307,否则执行步骤306;通常用第一个和最后一个CPU作为复位的CPU,仲裁的时候需要从多个CPU中选择一个;
步骤306:空循环,永远等待复位CPU复位;
步骤307:进入复位流程,复位cpu检查到其它cpu都已经处于等待状态后,就知道现场环境已经保存完了,此时就可以复位了;
步骤308:重新启动设备。
设备重新启动后会重新初始化所有硬件设备,然后检查这次启动有没有生成过新的现场环境,如果有的话就会保存起来。由于现场环境是一种二进制的原始信息,翻译后变成文本的调试信息,调试信息可读性很强,直接用来判断问题原因,有时可以直接指出错误程序语句,所以保存的时候需要将把现场环境自动翻译成当时CPU运行位置、函数返回值和调用踪迹等调试信息,将所述调试信息生成文件进行保存(本发明实施例中,以5个文件为例),如果产生第六个文件,第六个文件将替换掉最先生成的文件。保存完毕后,将其它需要的程序启动起来。
如图4所示,图4为重新启动后处理的流程示意图,可以包括以下步骤:
步骤400:重新启动设备;
步骤401:初始化设备;
步骤402:准备保存;
步骤403:是否保存新生成的调试信息,如果是执行步骤404,否则执行步骤405;
步骤404:保存调试信息到flash盘。因为NVRAM(非易失存储器)空间有限只能保存一份调试信息,将其转移到flash盘后,就可以再次保存,这样最多可以保存5份,即可以连续记录5次系统异常;
步骤405:正常启动;
步骤406:提供可以查看寻找的关键问题。
在没有出产品阶段,即开发阶段,如果想知道此时某个CPU当前运行的位置,可以手工将当时的运行环境保存起来。这个方式相当于Jtag调试中控制CPU,通过运行一个自行研制的命令行(echo“nmi”>/proc/coredump)引起一次保存操作,
当产品正式发布后,使用的环境要比实验室环境复杂,所以每一种产品都不能保证是绝对稳定的,在产品运行过程中可以获得历次的调试信息对后期研发和改进产品质量是非常重要的。用户可以通过WEBUI登入设备,选择下载健康记录后便会把历次产生的调试信息下载到硬盘,然后通过E-mail发送到客服。所述健康记录主要包括调试信息和系统运行状态信息,前者负责记录异常,后者主要是软硬件版本号、cpu利用率、内存利用率、连接表等状态信息,用来判断没有异常的时候系统运行的状态是否良好。
这里,产品发布阶段获取健康记录的方法不只是用WEBUI,也可以用其它形式的终端。
本发明实施例还通过软件看门狗来监控cpu因死锁而发生的异常,具体如图5所示,在系统启动时进行初始化,初始化时为某个CPU设定要求的超时时间,如果超过超时时间那个CPU还没有反应过来进行喂狗,将会记录下这个CPU的超时情况,然后进入步骤103所述的问题处理流程。当然,也可以使用硬件看门狗达到同样的效果,或使用软件看门狗和硬看门狗结合达到同样效果。
综上所述,本发明实施例提供了一种多核MIPS平台下并行系统的调试方法,通过本发明实施例所述方法可以带来如下有益效果:
可以精确显示出出现问题的位置,可以连续记录5次问题的出现,对于应用开发人员透明,极大简化了多核MIPS平台下的调试复杂度;
查看时可以看到CPU寄存器的所有信息,返回函数的函数名,出现问题时的CPU所在的函数位置,偏移量,调用踪迹这几项重要信息,这主要得益于本调试方法能够捕获所有系统异常,并在异常发生时及时完整地保存了现场环境,并通过自动分析将现场环境翻译成可读性很强的文本信息,使调试方便,缩短产品研发周期,节省开发成本;
不用增加额外硬件设备,无额外成本投入;
在产品运行过程中仍可跟踪可能出现的问题,对系统性能没有影响。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (9)
1、一种多核MIPS平台下并行系统调试方法,其特征在于,包括:
步骤A:当运行阶段产生关键问题时,保存出现问题的现场环境,并进行复位;
步骤B:当确认是由于出现关键问题而复位的,进行关键问题处理,保存复位现场的现场环境,并重新启动设备;
步骤C:设备重新启动,当确认在设备初始化过程产生新的调试信息,保存初始化现场的现场环境。
2、根据权利要求1所述的方法,其特征在于,所述步骤A具体包括:
步骤A1:当运行阶段产生问题时,判断所述问题是否为关键问题,如果是,执行步骤A2,否则在程序中处理,并在处理后返回到正常运行状态;
步骤A2:判断是否需要保存出现问题的CPU的所有寄存器的状态,如果需要,保存该CPU的所有寄存器的状态值,并执行步骤A3,否则直接执行步骤A3;
步骤A3:按要求进行复位。
3、根据权利要求2所述的方法,其特征在于,所述步骤A1还包括:通
过软件看门狗和/或硬件看门狗记录死锁信息,并将死锁信息作为关键问题,执行步骤A2。
4、根据权利要求2所述的方法,其特征在于,所述步骤A3具体包括:
调用不可屏蔽中断广播函数,当其它CPU收到不可屏蔽中断广播后,分别将PC跳到0xBFC00000处进行复位。
5、根据权利要求1所述的方法,其特征在于,所述步骤B具体包括:
步骤B1:复位后,判断是否是由于出现问题而启动,如果是一次正常的复位操作,则进入复位流程,进行整板复位;如果启动程序发现是由于出现关键问题而复位的,保存复位现场的现场环境,并标记此次复位新产生的调试信息;
步骤B2:保存现场环境后,判断仲裁复位CPU,如果该CPU就是用来复位的CPU,进行整板复位,并重新启动设备,否则永远等待仲裁CPU复位。
6、根据权利要求5所述的方法,其特征在于,所述步骤B1中,将复位现场的现场环境保存到非易失性存储器中。
7、根据权利要求1所述的方法,其特征在于,所述步骤C具体包括:
步骤C1:设备重新启动后会重新初始化所有硬件设备;
步骤C2:检查本次启动有没有生成过新的调试信息,如果有,保存所述调试信息,并正常启动,否则直接正常启动。
8、根据权利要求7所述的方法,其特征在于,所述步骤C2中,保存所述调试信息的过程具体包括:
将调试信息生成一个文件进行保存至flash盘;
当保存文件超过5个后,用后面新产生的文件替换最先生成的文件。
9、根据权利要求8所述的方法,其特征在于,所述调试信息包括:该CPU当时的运行位置、函数返回值和调用踪迹。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007103047654A CN101470662B (zh) | 2007-12-29 | 2007-12-29 | 一种多核mips平台下并行系统调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007103047654A CN101470662B (zh) | 2007-12-29 | 2007-12-29 | 一种多核mips平台下并行系统调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101470662A true CN101470662A (zh) | 2009-07-01 |
CN101470662B CN101470662B (zh) | 2010-09-08 |
Family
ID=40828143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007103047654A Active CN101470662B (zh) | 2007-12-29 | 2007-12-29 | 一种多核mips平台下并行系统调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101470662B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102469474A (zh) * | 2010-11-15 | 2012-05-23 | 中兴通讯股份有限公司 | 一种通信设备异常信息的处理方法及装置 |
CN102609324A (zh) * | 2012-01-09 | 2012-07-25 | 华为技术有限公司 | 一种虚拟机死锁后的恢复方法、装置及系统 |
CN102708015A (zh) * | 2012-05-15 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 基于cpu不可屏蔽中断系统问题诊断的调试方法 |
CN109726095A (zh) * | 2017-10-27 | 2019-05-07 | 深圳市中兴微电子技术有限公司 | 一种多核芯片调试的方法、系统及装置 |
CN110597705A (zh) * | 2019-07-30 | 2019-12-20 | 广东工业大学 | 一种可重复获取测试数据的程序调试方法及装置 |
-
2007
- 2007-12-29 CN CN2007103047654A patent/CN101470662B/zh active Active
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102469474A (zh) * | 2010-11-15 | 2012-05-23 | 中兴通讯股份有限公司 | 一种通信设备异常信息的处理方法及装置 |
CN102609324A (zh) * | 2012-01-09 | 2012-07-25 | 华为技术有限公司 | 一种虚拟机死锁后的恢复方法、装置及系统 |
WO2013104245A1 (zh) * | 2012-01-09 | 2013-07-18 | 华为技术有限公司 | 一种虚拟机死锁后的恢复方法、装置及系统 |
CN102609324B (zh) * | 2012-01-09 | 2015-11-25 | 华为技术有限公司 | 一种虚拟机死锁后的恢复方法、装置及系统 |
CN102708015A (zh) * | 2012-05-15 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 基于cpu不可屏蔽中断系统问题诊断的调试方法 |
CN109726095A (zh) * | 2017-10-27 | 2019-05-07 | 深圳市中兴微电子技术有限公司 | 一种多核芯片调试的方法、系统及装置 |
CN110597705A (zh) * | 2019-07-30 | 2019-12-20 | 广东工业大学 | 一种可重复获取测试数据的程序调试方法及装置 |
CN110597705B (zh) * | 2019-07-30 | 2023-01-20 | 广东工业大学 | 一种可重复获取测试数据的程序调试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101470662B (zh) | 2010-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2359247B1 (en) | Transforming user script code for debugging | |
Lee et al. | Faults, symptoms, and software fault tolerance in the tandem guardian90 operating system | |
US8966453B1 (en) | Automatic generation of program execution that reaches a given failure point | |
US9015671B2 (en) | Integrating program construction | |
US20100162212A1 (en) | Debugging pipeline | |
US20090172664A1 (en) | Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests | |
KR102025078B1 (ko) | 단일 스텝 실행을 이용한 코드 진단 | |
CN100458692C (zh) | 开机自我测试除错系统及方法 | |
US20150033212A1 (en) | Testing program, testing method, and testing device | |
CN101470662B (zh) | 一种多核mips平台下并行系统调试方法 | |
CN101084485A (zh) | 用于改善片上仿真系统中高级语言的仿真速度的装置和方法 | |
WO2014200551A1 (en) | Identifying the introduction of a software failure | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
CN106919462B (zh) | 一种生成处理器故障记录的方法及装置 | |
US20110179399A1 (en) | Establishing a useful debugging state for multithreaded computer program | |
US20080133896A1 (en) | User-Space Return Probes | |
CN109375921A (zh) | 页面文件快速编译方法、装置及存储设备、计算机设备 | |
CN105308578A (zh) | 状态转变的诊断 | |
CN102708015A (zh) | 基于cpu不可屏蔽中断系统问题诊断的调试方法 | |
CN114625660A (zh) | 调试方法及装置 | |
JP4558376B2 (ja) | コントローラ | |
CN112181853A (zh) | 程序调试方法、装置及系统 | |
CN111290749B (zh) | 一种数据处理方法、智能终端及存储介质 | |
CN114153750B (zh) | 代码检查方法及装置、代码编写方法、电子设备 | |
Wang | Characterizing and taming non-deterministic bugs in Javascript applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |