本发明专利技术公开了一种调试控制实现方法,包括断点的插入和删除过程,所述断点插入过程是通过内核调度时插入仅对当前切入的线程或任务有效的断点实现的;所述断点删除过程是通过内核调度需要切出所述线程或任务时,删除所述断点实现的。本发明专利技术还公开了一种调试控制系统。本发明专利技术在内核调度时对当前切入的线程或任务插入对其有效的断点,对当前线程或任务无效的断点则不会插入代码段,这样在调试中产生的调试事件均为有效事件,避免了无效事件对调试的影响,提高了调试效率;本发明专利技术在调度切入线程或任务时插入断点,这样在处理当前调试事件时也不需要控制其它线程或任务停止以及恢复,进一步提高了调试效率,也避免了漏断点事件的发生。
【技术实现步骤摘要】
本专利技术涉及计算机领域的调试器技术,尤其涉及一种可用于多线程或 多任务的调试控制实现方法及系统。
技术介绍
随着信息技术的不断发展,软件的规模不断扩大并且复杂度也不断提高,对调试器在功能上有更多的需求;同时在调试效率和调试稳定性也有 更高的要求。目前在通用的桌面操作系统上己经有很多比较成熟的集成开发调试 环境。但目前在嵌入式系统上却没有成熟的调试器实现方案。主要原因在 于首先很多嵌入式系统的操作系统不支持调试,无法调试用户程序;其 次嵌入式系统对调试器要求也比较高,因为它与通用的桌面操作系统相比 对软件实时性能要求高;再者,嵌入式系统硬件环境方面又存在很多限制, 如存储空间大小、CPU性能等等。因此嵌入式系统的调试器要求简洁高效 且易于移植,但是目前的现有技术很难满足这一要求。目前,现有调试器在调试多线程或多任务时还存在效率问题,尤其是 在调试代码段共享的多线程或多任务时,效率问题更突出。在嵌入式系统 中的用户程序有两种类型①用户程序运行在用户态,在这种情况下同一 进程中多个线程共享相同进程空间;②用户程序和操作系统都在同一地址 空间,这种情况下用户的多任务程序也是共享同一地址空间。前者称为多 线程,后者称为多任务。对于这种共享地址空间的多线程/多任务调试,现 有的调试控制方案会产生很多无效的调试事件,调试器对于这些无效的调 试事件的分析处理会严重影响被调试程序的执行;另外目前调试控制方案 在处理有效的调试事件时也存在效率低下问题。以目前应用最为广泛的调试器(GNUgdb)为例,现有技术的调试过 程如下调试需求被调试程序为一个多线程程序,为简单起见,假定其包括 线程A1、 Bl、 Cl、 Dl、 El。该多线程程序在运行时都会调用一个公共函4数fimctkml。目前用户只希望了解到线程Cl在遇到这个公共函数处的情 况;在分析完成线程Cl停止的情况后能够继续使其运行,并观察其再次 遇到此公共函数时的情况。针对这个调试需求,调试器需要在该公共函数处插入一个断点,然后 分析发生的断点事件。仅将线程Cl遇到此断点的事件作为有效事件,其 他事件都作为无效事件。这个过程在目前调试器中的处理过程如下步骤l、插入断点;步骤1.1、调试器通过操作系统提供的接口或信号机制将被调试的每 个线程都停止;步骤1.2、分析符号表査找到待插入断点的地址,并通过操作系统接 口将此地址的原有的正常指令保存后替换为断点指令(在某些架构上为未 定义指令)。将断点地址以及此位置的正常指令以及断点类型等信息保存到 断点节点中,以便后续分析查找;步骤1.3、调试器再次通过操作系统的接口恢复被停止的线程;步骤2、调试事件分析处理过程由于在进程中五个线程的代码空间 共享,因此对于此公共函数代码段每个线程都会执行到断点指令处;对于 线程A1, Bl, Dl, El重复多次遇到这个断点的调试事件就是无效的调试 事件,仅有线程C1遇到此断点的事件才是有效的调试事件;步骤2.1、无效断点事件处理对于线程B1遇到此断点的情况,调试 器的处理过程;步骤2丄1、调试器获得断点事件后,通过操作系统接口将当前进程中 其他线程停止;步骤2丄2、调试器匹配断点地址和其维护的断点节点中的地址;在分 析此断点节点后,确认此断点对线程B1无效,需要线程B1继续运行;步骤2丄3、调试器调用操作系统接口将已插入断点指令的地址再恢复 为原始正常指令;步骤2丄4、调试器调用操作系统接口或直接设置相关寄存器,控制线 程B1执行汇编指令级单步;步骤2丄5、当线程B1单步结束后又会通过异常或信号通知调试器, 此时调试器将前面恢复为正常指令的地址(fimctionl)再插入断点指令,以便继续调试断点事件;步骤2丄6、调试器将所有线程都恢复运行;步骤2.2、有效断点事件处理如果线程C1遇到此断点的情况下,在5步骤2丄1和步骤2丄2之后断点有效,将当前进程中所有线程都停止;然 后再通过界面反馈线程Cl遇到断点的事件;步骤3、继续调试如果用户需要继续运行并调试,则调试器需要执 行步骤2丄3至U2丄6的过程;从以上步骤可以看出该调试过程效率低下并且对其他线程的干扰也 很大,主要原因如下1. 调试器处理的所有调试事件中实际有效的调试事件(线程Cl遇到 断点)所占的比例比较低。如在上面例子中五个线程在情况均等的情况下 有效断点事件仅占断点事件的五分之一,如果其他线程(Al, Bl, Dl, El)调用公共函数代码(fimctkml)的机会更多,发生的频率更快,则无 效断点发生更多,调试效率将更低;2. 调试过程中无效的调试控制过程也比较多。如在上面的调试过程 中,在当前线程Cl遇到断点时候需要控制其他线程停止和运行。这种控 制主要目的是避免遗漏断点事件(如果当前断点对其它线程也生效,假如 在处理断点事件时没有将其他线程停止,则断点生效的其他线程有可能已 经运行过了这个断点位置,这样就造成了漏断点的情况),但这个处理却给 其他线程代来了额外的干扰,而且也影响调试的效率。综上所述,现有调试器存在效率低下的问题。而嵌入式系统对实时性 要求比较高,效率低下问题可能直接导致逻辑错误,因此在嵌入式系统上 需要一个更加高效而稳定的调试器方案。
技术实现思路
本专利技术要解决的技术问题是提供一种高效稳定的调试控制实现方法及 系统。本专利技术的技术问题是通过以下技术方案加以解决的一种调试控制实现方法,包括断点的插入和删除过程,所述断点插入 过程是通过内核调度时插入仅对当前切入的线程或任务有效的断点实现 的;所述断点删除过程是通过内核调度需要切出所述线程或任务时,删除所述断点实现的。上述方法,还包括在断点插入后,对所述当前切入的线程或任务进行 调试时,在调试异常上下文中利用调试异常处理所述线程或任务中的调试 事件的过程。上述调试事件的处理过程包括利用断点异常处理所述当前调度切入的 线程或任务中的断点事件的过程。上述调试事件的处理过程包括利用单步异常处理所述当前调度切入的 线程或任务中的单步事件的过程。上述断点的插入过程具体包括以下步骤步骤A1、分析调度切入的线程或任务,获取对当前切入的线程或任务 有效的断点;步骤B1、将步骤A1所述的断点插入到代码段; 步骤C1、保存断点插入前的原始指令。 上述断点删除过程具体包括以下步骤步骤A2、分析调度切出的线程或任务,获取当前要切出的线程或任务 有效的断点;步骤B2、从代码段中删除步骤A2所述的断点; 步骤C2、恢复断点插入前的原始指令。一种调试控制系统,包括调试任务处理模块和内核处理模块,所述调 试任务处理模块包括断点管理单元、上报事件管理单元,所述内核处理模 块包括调度处理单元,用于在内核调度时,插入仅对当前切入的线程或任 务有效的断点;还用于在内核调度需要切出所述线程或任务时,删除所述 断点。上述调度处理单元还用于在内核调度时从所述断点管理单元获得要插 入或删除的断点信息。上述内核处理模块还包括调试异常处理单元,用于对所述当前切入的 线程或任务进行调试时,在调试异常上下文中利用调试异常处理所述线程 或任务中的调试事件。上述调试异常处理单元包括断点异常处理子单元,用于断点插入后, 利用断点异常来处理所述当前调度切入的线程或任务中的断点事件。上述调试异常处理单元还包括单步异常处理本文档来自技高网...
【技术保护点】
一种调试控制实现方法,包括断点的插入和删除过程,其特征在于:所述断点插入过程是通过内核调度时插入仅对当前切入的线程或任务有效的断点实现的;所述断点删除过程是通过内核调度需要切出所述线程或任务时,删除所述断点实现的。
【技术特征摘要】
【专利技术属性】
技术研发人员:崔云峰,程圣宇,刘东,张毅,向红,
申请(专利权)人:中兴通讯股份有限公司,
类型:发明
国别省市:94[中国|深圳]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。