一种多应用程序的调试系统和方法与流程

文档序号:12063336阅读:203来源:国知局
一种多应用程序的调试系统和方法与流程

本发明涉及通信技术领域,特别是涉及一种多应用程序的调试系统和方法。



背景技术:

调试器作为一种重要的调试方式,在应用程序的开发过程中起着重要作用。调试器主要包括硬件调试器和软件调试器。

硬件调试器功能强大,但是价格昂贵,开发成本高。

软件调试器可以通过串口或者远程终端协议Telnet连接嵌入式系统,执行应用程序调试,但是,在现有嵌入式系统的调试技术中,多任务的嵌入式系统一次只能调试一个应用进程,如果调试多个应用程序,则需要进行调试切换。



技术实现要素:

本发明要解决的技术问题是提供一种多应用程序的调试系统和方法,用以解决现有嵌入式系统调试技术不能同时跟踪调试多个应用程序的问题。

针对上述技术问题,本发明是通过以下技术方案来解决的。

本发明提供了一种多应用程序的调试系统,包括:调试客户端,用于将用来调试应用程序的调试命令传送给为所述应用程序对应设置的调试代理端,并接收所述调试代理端输出的调试结果;调试代理端,用于基于接收到的所述调试命令,调试对应的所述应用程序。

其中,所述调试代理端,用于为其对应设置的应用程序创建消息队列和有名管道,通过所述消息队列接收所述调试客户端传送的调试命令,通过所述有名管道将调试结果传送给所述调试客户端。

其中,所述调试代理端,具体用于:从所述消息队列中获取调试命令;判断所述调试命令中是否包含非法指令;在判定为否的情况下,执行所述调试命令,调试所述应用程序;在判定为是的情况下,从所述消息队列中获取下一个调试命令。

其中,所述调试代理端,具体用于:在执行所述调试命令之前,记录当前的执行环境信息;在执行所述调试命令之时,如果执行出现异常,则判定所述调试命令中包含非法指令;根据记录的所述执行环境信息恢复执行环境,并从所述消息队列中获取下一个调试命令。

其中,还包括调试终端;所述调试终端,用于接收用来调试应用程序的调试命令,并将所述调试命名向所述调试客户端发送;所述调试客户端,还用于将所述应用程序的调试结果发送给所述调试终端,以在所述调试终端中显示所述调试结果。

其中,所述调试代理端,还用于在其对应的应用程序所启动的进程中,提取所有函数信息和全局变量信息,并形成全局符号表,以便所述调试终端基于所述全局符号表,形成用来调试所述应用程序的调试命令。

本发明还提供了一种多应用程序的调试方法,包括:调试客户端将用来调试应用程序的调试命令传送给为所述应用程序对应设置的调试代理端;调试代理端基于接收到的所述调试命令,调试对应的所述应用程序,并将调试结果向所述调试客户端发送;调试客户端接收所述调试代理端输出的调试结果。

其中,所述调试代理端基于接收到的所述调试命令,调试对应的所述应用程序,并将调试结果向所述调试客户端发送,包括:所述调试代理端为其对应设置的应用程序创建消息队列和有名管道,通过所述消息队列接收所述调试客户端传送的调试命令,通过所述有名管道将调试结果传送给所述调试客户端。

其中,所述调试代理端基于接收到的所述调试命令,调试对应的所述应用程序,包括:所述调试代理端从所述消息队列中获取调试命令;判断所述调试命令中是否包含非法指令;若否,则执行所述调试命令,调试所述应用程序; 若是,则从所述消息队列中获取下一个调试命令。

其中,所述判断所述调试命令中是否包含非法指令,包括:在执行所述调试命令之前,记录当前的执行环境信息;在执行所述调试命令之时,如果执行出现异常,则判定所述调试命令中包含非法指令;根据记录的所述执行环境信息恢复执行环境,并从所述消息队列中获取下一个调试命令。

其中,所述用来调试应用程序的调试命令是在调试终端中输入的,并由所述调试终端发送给所述调试客户端的;在调试对应的所述应用程序之后,调试客户端将所述应用程序的调试结果发送给所述调试终端,以在所述调试终端中显示所述调试结果。

其中,所述调试代理端在其对应的应用程序所启动的进程中,提取所有函数信息和全局变量信息,并形成全局符号表,以便所述调试终端基于所述全局符号表,形成用来调试所述应用程序的调试命令。

本发明有益效果如下:

本发明采用调试客户端加调试代理端的模式。调试代理端与应用程序一一对应,调试客户端和多个调试代理端建立连接通道,达到同时跟踪调试多个应用程序的目的,提高了调试效率。

附图说明

图1是根据本发明一实施例的多应用程序的调试系统的结构图;

图2是根据本发明一实施例的多应用程序的调试系统的具体架构图;

图3是根据本发明一实施例的调试客户端和调试代理端的交互示意图;

图4是根据本发明一实施例的多应用程序的调试方法的流程图。

具体实施方式

以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明提供了一种多应用程序的调试系统,图1是根据本发明一实施例的多应用程序的调试系统的结构图。本实施例可以应用于嵌入式系统中。

该多应用程序的调试系统包括:调试客户端110和调试代理端120。

为每个待调试的应用程序对应设置的调试代理端。在图1中,调试代理端120的数量为多个,包括:调试代理端121~调试代理端12n,其中,n>1。调试客户端110可以和这多个调试代理端120通信。

调试客户端110,用于将用来调试应用程序的调试命令传送给为该应用程序对应设置的调试代理端120,并接收该调试代理端120输出的调试结果。

调试代理端120,用于基于接收到的调试命令,调试对应的应用程序,并将调试结果向调试客户端110发送。

本实施例为每个待调试的应用程序对应设置调试代理端120,调试客户端110同时维护与多个调试代理端120的连接通道,进而可以达到同时跟踪调试多个应用程序的目的,提高了调试效率;对于Linux、ucosii等多任务的系统,同时跟踪调试多个进程,更能直观、有效地观察到系统运行的状态。

在一个实施例中,调试代理端120,用于为对应设置的应用程序创建消息队列和有名管道,通过所述消息队列接收所述调试客户端传送的调试命令,通过所述有名管道将调试结果传送给所述调试客户端110。由于消息队列和有名管道都为现有的通信方式,在此不对消息队列和有名管道进行详述。

具体的,如图2所示,图2为根据本发明一实施例的多应用程序的调试系统的具体架构图。多应用程序的调试系统还可以包括调试终端130;当然该调试终端130也可以独立于多应用程序的调试系统。调试终端130,用于接收用户输入的用来调试应用程序的调试命令。

本实施例的多应用程序的调试系统位于嵌入式系统中,嵌入式系统运行在板卡中。调试终端130独立于本实施例的多应用程序的调试系统。调试终端130和多应用程序的调试系统,通过串口总线或者TCP/IP协议连接。

用户在调试终端130的命令行中输入启动调试客户端110的命令,进入调试系统,并在命令行中输入对应用程序的调试命令。调试终端130将该用来调试应用程序的调试命令发送给多应用程序的调试系统中的调试客户端110。进一步地,用户进入命令行界面,启动调试客户端,请用户输入密码,对用户进行鉴权认证,认证通过进入到调试界面。用户输入“ps”命令查看嵌入式系统中运行的进程,一个进程对应一个应用程序,用户键入命令“pad pid”跟踪调试进程,其中“pid”是待调试应用程序的进程id;要跟踪多个进程,可以多次输入待调试应用程序的进程id。用户需要调试某一应用程序,则用户可以选择该应用程序对应的进程id,并在命令行中输入调试命令,或者,用户可以在命令行中输入应用程序对应的进程id+调试命令。

调试客户端110解析该调试命令获得该调试命令对应的应用程序,将该调试命令通过应用程序对应的消息队列发送给对应的调试代理端120。例如:第一应用程序对应第一调试代理端121,第一调试代理端121为第一应用程序创建第一消息队列;第二应用程序对应第二调试代理端122,第二调试代理端122为第二应用程序创建第二消息队列;第三应用程序对应第三调试代理端123,第三调试代理端123为第三应用程序创建第三消息队列;调试客户端110在接收到第一应用程序id+调试命令之后,获知该调试命令是向第一应用程序发送的,则将调试命令通过第一消息队列发送给第一调试代理端121。

调试代理端120接收该调试命令之后,解析、执行该调试命令,并将调试结果通过有名管道发送给调试客户端110;调试客户端110将针对该应用程序的调试结果发送给调试终端130进行显示。

本发明实施例的调试代理端120和调试客户端110位于同一板卡中,简化了调试代理端120和调试客户端110之间的连接流程,使调试更加稳定、可靠。

在另一实施例中,本发明可以提供调试命令的参数错误防御。例如:确定调试命令中是否存在地址非法访问,内存非法改写等问题。

调试代理端120,用于从所述消息队列中获取调试命令;判断所述调试命令中是否包含非法指令;在判定为否的情况下,执行所述调试命令,调试所述应用程序;在判定为是的情况下,从所述消息队列中获取下一个调试命令。在获取到下一个调试命令之后,依然要判断调试命令中是否包含非法指令。

具体而言,

方式一:调试代理端120调用嵌入式系统的非法指令防御相关的接口,由嵌入式系统来判断调试命令中是否包含非法指令,调试代理端120根据嵌入式系统的判定结果识别调试命令中是否包含非法指令。其中,嵌入式系统例如是Linux系统,Linux系统自带非法指令防御机制。进一步地,调试代理端120从所述消息队列中获取调试命令之后,在执行所述调试命令之前,记录当前的执行环境信息;在执行所述调试命令之时,如果执行出现异常,则判定所述调试命令中包含非法指令,根据记录的所述执行环境信息恢复执行环境,并从所述消息队列中获取下一个调试命令;如果执行正常,则执行过程生效。执行环境信息包括:程序存放的位置、栈和框指针、寄存器信息、内存信息等。执行环境信息可以恢复执行环境,防止因为调试命令执行出现异常,导致系统崩溃。

方式二:调试代理端120判断调试命令中携带的访问地址是否存在于应用程序的地址空间中,若是,则调试命令中不包含非法指令,若否,则调试命令中包含非法指令。

方式三:调试代理端120可以根据预先设置的指令信息表,判断调试命令中是否包含非法指令。指令信息表中包括指令白名单或者指令黑名单。指令白名单包括调试应用程序时可以使用的命令参数。指令黑名单包括调试应用程序时不可以使用的命令参数。

下面根据图3对本发明实施例中调试客户端和调试代理端的交互进行详细说明。图3是根据本发明一实施例的调试客户端和调试代理端的交互示意图。

调试客户端110包括:第一命令接收模块1101、第一命令发送模块1102、 第一结果接收模块1103、第一结果发送模块1104。

调试代理端120包括:第二命令接收模块1201、调试命令解析模块1202、调试命令执行模块1203、第二结果发送模块1204。

在调试客户端110中,第一命令接收模块1101用于接收调试终端130发送的调试命令,并将该调试命令向第一命令发送模块1102发送;第一命令发送模块1102,用于根据随该调试命令发送的进程id,判断该调试命令对应的应用程序,进而将该调试命令向该应用程序对应的调试代理端120发送。

在调试代理端120中,

第二命令接收模块1201从消息队列中获取调试命令,记录当前的执行环境信息;第二命令接收模块1201将调试命令传递给调试命令解析模块1202。

调试命令解析模块1202解析调试命令,并判断该调试命令中是否包含非法指令参数,如:有地址非法访问,非法的内存改写等。

若调试命令解析模块1202判定为否,则调试命令解析模块1202将调试命令传递给调试命令执行模块1203执行,调试命令执行模块1203将调试结果向第二结果发送模块1204,第二结果发送模块1204通过有名管道将调试结果发送给第一结果接收模块1103。

若调试命令解析模块1202判定为是,则调试命令解析模块1202调用第二命令接收模块1201记录当前的执行环境信息,复原执行环境,从下一条调试命令往下执行,获取新的调试命令,再交由调试命令解析模块1202判断新的调试命令是否包含非法指令,从而做到不影响嵌入式系统的正常运行,防止错误的调试命令参数可能引发的问题。

在调试客户端110中,第一结果接收模块1103接收第二结果发送模块1204发送的调试结果,并转发给第一结果发送模块1104;第一结果发送模块1104将该调试结果通过串口或网口发送给调试终端130,以便进行显示。进一步地,第一结果发送模块1104在发送调试结果时携带进程id,以便调试终端130对应应用程序显示调试结果。

基于本实施例,可以提高多任务系统的调试效率,比如进程间有交互操作,可以通过本实施例同时跟踪两个或者多个进程,能够同时看到这两个或者多个进程各自的运行日志,不需要用户切换调试通道,简化了调试操作;而且,即便是用户输入了错误的调试命令,也可以在执行之前被发现。

在又一实施例中,调试代理端120,还用于在其对应的应用程序的进程中,提取所有函数信息和全局变量信息,并形成全局符号表,以便在将全局符号表提供给调试终端130之后,调试终端130可以基于所述全局符号表,形成用来调试所述应用程序的调试命令,运行应用程序地址空间中的函数,访问或修改应用程序地址空间中的全局变量。

具体的,为每个进程(应用程序)维护一张全局符号表,解析所有映射到应用程序地址空间的模块,把这些模块中包含的符号信息添加到全局符号表中。符号信息包括:函数或全局变量的名称、地址、类型。

基于该全局符号表可以提供多种调试命令。例如:模糊搜索命令,通过虚拟地址搜索函数名或者全局变量名的命令,通过函数名或者全局变量名查找虚拟地址的命令。

模糊搜索命令是指:将函数名或者变量名作为检索条件,从全局符号表中进行匹配搜索,找出匹配的函数名或者变量名,供用户查看。

通过虚拟地址搜索函数名或者全局变量名的命令是指:将虚拟地址作为检索条件,搜索该虚拟地址对应的函数名或全局变量名。

通过函数名或者全局变量名查找虚拟地址的命令是指:将函数名或全局变量名作为检索条件,搜索该函数名或全局变量名对应的虚拟地址。

在应用程序的运行出现异常时,通过分析应用程序的堆栈信息,利用通过虚拟地址搜索函数名或者全局变量名的命令,就可以找到对应的函数名,从而可找出应用程序在某个时刻的函数调用轨迹,快速分析、定位问题的所在。

本发明还提供了一种多应用程序的调试方法。如图4所示,为根据本发明一实施例的多应用程序的调试方法的流程图。

步骤S410,调试客户端将用来调试应用程序的调试命令传送给为该应用程序对应设置的调试代理端。

用来调试应用程序的调试命令是在调试终端中由用户输入的,并由所述调试终端发送给所述调试客户端的。

调试代理端在其对应的应用程序所启动的进程中,提取所有函数信息和全局变量信息,并形成全局符号表。调试代理端将全局符号表通过调试客户端提供给调试终端,以便所述调试终端基于所述全局符号表,形成用来调试所述应用程序的调试命令。

步骤S420,调试代理端基于接收到的调试命令,调试对应的所述应用程序,并将调试结果向调试客户端发送。

调试代理端为对应设置的应用程序创建消息队列和有名管道。通过所述消息队列接收所述调试客户端传送的调试命令,通过所述有名管道将调试结果传送给所述调试客户端。

调试客户端将用来调试应用程序的调试命令送入该应用程序对应的消息队列,调试代理端通过该消息队列接收所述调试客户端传送的调试命令。调试代理端在获得调试结果之后,通过有名管道将调试结果传送给所述调试客户端。

在一个实施例中,调试代理端从所述消息队列中获取调试命令;判断所述调试命令中是否包含非法指令;在判定为否的情况下,执行所述调试命令,调试所述应用程序;在判定为是的情况下,从所述消息队列中获取下一个调试命令。具体的,在执行所述调试命令之前,记录当前的执行环境信息;在执行所述调试命令之时,如果执行出现异常,则判定所述调试命令中包含非法指令;根据记录的所述执行环境信息恢复执行环境,并从所述消息队列中获取下一个调试命令。

步骤S430,调试客户端接收所述调试代理端输出的调试结果。

在调试对应的所述应用程序之后,调试客户端通过有名管道接收调试结果,并且调试客户端将所述应用程序的调试结果发送给所述调试终端,以在所述调试终端中显示所述调试结果。

本发明实施例所述的装置的功能已经在图1-图3所示的系统实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。

本发明实施例能够同时跟踪调试多个应用程序。调试客户端和调试代理端同时运行于目标单板的嵌入式系统上,简化了调试过程。本发明实施例能直接运行映射到应用程序地址空间的函数,查看和更改应用程序地址空间中的全局变量,实现了更加灵活的调试方式。本发明实施例提供了调试命令保护机制,当调试命令存在非法指令时,不影响嵌入式系统的运行。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1