一种嵌入式多核环境下应用程序的调试方法技术

技术编号:9927714 阅读:95 留言:0更新日期:2014-04-16 18:40
一种嵌入式多核环境下应用程序的调试方法,属于应用程序调试方法,解决现有调试方法存在的不能独立于操作系统、不适于两个以上核调试,且功能不够全面的问题。本发明专利技术包括建立远程连接步骤、发送调试命令步骤、分析调试命令步骤、线程核绑定步骤、插入断点步骤、查询断点步骤、删除断点步骤、单步执行步骤、持续执行步骤、执行至结束步骤、查看变量步骤、查看线程运行核步骤、获取核运行线程步骤和统计线程运行时间步骤。本发明专利技术能够独立于操作系统并独立于嵌入式开发工具对应用程序进行调试,调试功能较全面,宿主机端调试器可以了解应用程序运行的基本情况、对应用程序运行的各种异常更准确定位,提高了应用程序调试效率。

【技术实现步骤摘要】
【专利摘要】,属于应用程序调试方法,解决现有调试方法存在的不能独立于操作系统、不适于两个以上核调试,且功能不够全面的问题。本专利技术包括建立远程连接步骤、发送调试命令步骤、分析调试命令步骤、线程核绑定步骤、插入断点步骤、查询断点步骤、删除断点步骤、单步执行步骤、持续执行步骤、执行至结束步骤、查看变量步骤、查看线程运行核步骤、获取核运行线程步骤和统计线程运行时间步骤。本专利技术能够独立于操作系统并独立于嵌入式开发工具对应用程序进行调试,调试功能较全面,宿主机端调试器可以了解应用程序运行的基本情况、对应用程序运行的各种异常更准确定位,提高了应用程序调试效率。【专利说明】—种嵌入式多核环境下应用程序的调试方法
本专利技术属于计算机的应用程序调试方法,具体涉及。
技术介绍
随着应用需求的扩大和技术的不断进步、单核处理器性能提升越来越困难,单核嵌入式架构已难以满足相应处理要求,多核技术是处理器发展的必然趋势,并广泛应用于汽车、通信、信息电器、医疗、军事等行业的智能化装备中。多核技术带来更高的处理器性能、更高的功率利用效率和针对嵌入式设备更小的物理内存体积,同时也显著增加了嵌入式系统复杂度。为充分发挥多核以及多处理解决方案的潜能,仅仅拥有上述优势还不够,还需要发展相应软件(软件的串并转换、高效率的并行算法等),改进目前的编译器技术,尤其需要采用新的调试方法和工具,以帮助软件和硬件开发人员在完整的嵌入式多核环境中高效地进行调试工作,进而对“编译-编辑-调试”的流程进行优化,使多核架构能得到成功普及。现阶段,虽然多核架构芯片已成为高端嵌入式产品的首选,但国内外在嵌入式多核系统的调试技术方面所做的研究工作较少,作为单核架构下首选的项目调试器(GNUProject debugger,⑶B)只具有单核调试功能,虽然能在嵌入式Linux操作系统支持下调试多核架构下的程序,但原有单核调试功能远不能满足调试人员多核调试的需求。此外,国内嵌入式领域的各种开发大多都只是集中在利用第三方或开源的工具进行各种应用开发的阶段。对于任务级调试工具而言,需要有相对成熟嵌入式操作系统的支持,很难开发出独立于操作系统的应用程序调试工具。目前,对于开发人员来说,只能够通过开发工具提供的调试方法,逐步地调试自己的程序。而在近年能对嵌入式多核系统独立进行软件调试的工具比较少,主要包括如下两种:(a)实视图调试器(RealView Debugger):开发人员可以同时对两个处理器进行调试,带有同步功能,可以使两个处理器内核同时启动或者停止。在多处理器上运行的代码可以使用单一调试核在同一会话期实现独立或同步的停止、开始和步进;该调试解决方案还支持某个内核上的断点或在更多其他内核上产生断点,调试人员可选择外部寄存器和存储器值。但是实视图调试器对超过两个核不具备调试能力,多核调试功能也不够全面。(b)全视图调试器(TotalView Debugger):是一个Linux操作系统并行环境下的纯软件调试工具,它的集成开发环境(Integrated Development Environment, IDE)、多线程(进程)调试能力、内存调试能力、集群调试能力在业界都是无与伦比的,它可以完成复杂的测试以及多个核和多个应用软件之间的同步。但全视图调试器与Linux操作系统联系紧密,多核调试功能也不够全面。目前,基于多核的嵌入式操作系统一般都是多任务操作系统,如Linux等,而开发的各种应用程序实际上就是一个在操作系统支持下在各种嵌入式平台上运行的应用程序,多个任务在操作系统的支持下,协同完成各种设计功能。在这样一种嵌入式开发的环境下,能够尽可能少地影响其它任务运行的情况下进行应用程序调试显得越来越重要。因此,研究独立于操作系统、独立于嵌入式开发工具的多核环境下应用程序调试方法具有相当重要的现实意义。为了更好地理解本专利技术,以下对本专利技术涉及的专业术语加以解释:(I)远程通信协议(Remote Serial Protocol, RSP):远程通信协议(RSP)是一种通过串口、网口等至少支持半双工通信的媒介进行ASCII数据传输的协议,通过RSP进行数据传输时,将所传输的数据打成RSP数据包,RSP数据包以字符$作为开始,字符$之后为数据,数据由一个或多个ASCII字节组成,以字符#作为数据的结束,在字符#后,还有两个ASCII字节作为前述数据的校验和。(2)远程交叉调试:在嵌入式软件开发过程中,交叉调试是通过宿主机端调试器能控制目标机上被调试程序的运行方式,并且通过宿主机端调试器能查看和修改目标机上的内存、寄存器以及被调试程序中的变量等功能的一种类型的调试。在远程交叉调试的过程中,在目标机和宿主机端分别加入某些功能模块,二者通过网口或串口遵循远程通信协议(RSP)互通信息来进行调试,目标机用于调试的功能模块称为目标机端调试代理,目标机端调试代理是一个接受参数的可执行文件,参数为被调试应用程序的文件名,运行方法是打开目标机命令窗口,快捷键是Ctrl+Alt+t,在目标机的命令窗口下输入目标机端调试代理的文件名与参数,宿主机端用于调试的功能模块称为宿主机端调试器,宿主机端调试器也是一个接受参数的可执行文件,参数为目标机的IP地址和被调试应用程序的程序名,运行方法是打开宿主机命令窗口,快捷键是Ctrl+Alt+t,在宿主机的命令窗口下输入宿主机端调试器的文件名与参数,在交叉调试中,宿主机端调试器和被调试应用程序放在宿主机端,目标机端调试代理放在目标机端,而应用程序的可执行文件既放在目标机端,也放在宿主机端,应用程序可执行文件具有调试信息。(3)线程跟踪系统调用函数(ptrace):线程跟踪系统调用函数(ptrace)是各类操作系统均提供的一个用于线程跟踪的系统调用函数。跟踪线程可以通过ptrace读写被跟踪线程的指令空间、数据空间、堆栈以及该线程运行时所有寄存器的值。通过与信号机制相结合,可以实现让被跟踪线程在跟踪线程的控制下运行。目标机端调试代理正是使用了 Ptrace来完成对被调试应用程序调试工作。线程跟踪系统调用函数(ptrace)有四个参数:功能参数(request)、线程号(Pid)、地址(addr)、数据(data)。不同的功能参数决定了跟踪线程对被跟踪线程不同的控制操作,例如:PTRACE_TRACEME:供被跟踪进程调用,等待被跟踪;相应的线程号(P i d)、地址(addr)、数据(data)均为 O。PTRACE_ATTACH:跟踪线程指定被跟踪线程,被跟踪线程由线程号参数(pid)给出;地址(addr)与数据(data)均为O。(4)符号表:要运行被调试程序,必须首先将被调试程序的源代码文件编译成目标文件,源代码文件存放着源代码,目标文件存放着源代码经过编译形成的机器指令。执行被调试应用程序实际上是逐条执行目标文件中的机器指令。经过编译之后,源代码文件中的一行源代码对应目标文件中的多行机器指令,换言之,单步执行一行源代码实际上要执行多行机器指令。如何确定每一行源代码对应多少条机器指令,这就需要获取源代码文件与目标文件之间的映射关系。符号表记录着被调试程序的源代码文件每行源代码与目标文件多行机器指令之间的映射关系。编译器在将源代码文件编译成目标文件本文档来自技高网...

【技术保护点】
一种嵌入式多核环境下应用程序的调试方法,包括建立远程连接步骤、发送调试命令步骤、分析调试命令步骤、线程核绑定步骤、插入断点步骤、查询断点步骤、删除断点步骤、单步执行步骤、持续执行步骤、执行至结束步骤、查看变量步骤、查看线程运行核步骤、获取核运行线程步骤和统计线程运行时间步骤,其特征在于: (1)建立远程连接步骤,包括下述子步骤: (1.1)调试人员运行目标机端调试代理,参数为被调试应用程序的文件名;运行宿主机端调试器,参数为目标机的IP地址和被调试应用程序的文件名; (1.2)目标机端调试代理首先创建一个子线程,在子线程中调用ptrace函数,ptrace函数的功能参数为PTRACE_TRACEME、线程号、地址和数据均为0,此时所述子线程处于等待状态,等待目标机端调试代理的跟踪,进行子步骤(1.3); (1.3)目标机端调试代理对(1.2)所创建的子线程进行跟踪:调用ptrace函数,其功能参数为PTRACE_ATTACH、线程号为(1.2)所创建的子线程的线程号、地址参数和数据参数均为0; 然后进行子步骤(1.4); (1.4)目标机端调试代理在所述子线程内部加载被调试应用程序,并另外为被调试应用程序建立符号表,加载被调试应用程序的子线程处于暂停状态,停在代码起始位置;进行子步骤(1.5); (1.5)宿主机端调试器向目标机端调试代理发起远程连接请求,经目标机端调试代理确认后,建立远程连接;在建立远程连接之后的整个调试过程中,目标机端调试代理一直处于监听状态,时刻准备接受宿主机端调试器发送的RSP数据包,进行步骤(2); (2)发送调试命令步骤,包括下述子步骤: (2.1)宿主机端调试器接收调试人员输入的调试命令,判断所述调试命令的命令类型是否为退出命令(quit),是则结束,否则进行子步骤(2.2); (2.2)遍历自身存储的调试命令集,查找所述调试命令的命令类型在调试命令集中是否存在,是则进行子步骤(2.3),否则输出提示信息,提示调试人员调试命令输入错误,转子步骤(2.1);所述调试命令集包括调试命令的下述命令类型:线程核绑定、插入断点、查询断点、单步执行、持续执行、执行至结束、删除断点、查看变量、查看线程运行核、获取核运行线程、统计线程运行时间; (2.3)将所述调试命令作为数据,封装成RSP数据包,发送给目标机端调试代理,转步骤(3); (2.4)判断在T秒内是否收到目标机端调试代理的执行结果RSP数据包,是则进行子步骤(2.5),否则转子步骤(2.1),0<T≤1; (2.5)宿主机端调试器解析执行结果RSP数据包,将其中的数据反馈给调试人员,转子步骤(2.1); (3)分析调试命令步骤,包括下述子步骤: (3.1)目标机端调试代理接收宿主机端调试器发送的RSP数据包,提取其中的数据成为调试命令; (3.2)目标机端调试代理分析所述调试命令的命令类型:命令类型为线程核绑定时,相应的命令参数为待绑定的线程号与CPU亲和度掩码,进行步骤(4);命令类型为插入断点时,相应的命令参数为线程号、核号、源代码文件名、源代码文件行号,进行步骤(5);命令类型为查询断点时,相应的命令参数为空,进行步骤(6);命令类型为删除断点时,相应的命令参数为断点编号,进行步骤(7);命令类型为单步执行时,相应的命令参数为空,进行步骤(8);命令类型为持续执行时,相应的命令参数为空,进行步骤(9);命令类型为执行至结束时,相应的命令参数为空,进行步骤(10);命令类型为查看变量时,相应的命令参数为变量名,进行步骤(11);命令类型为查看线程运行核时,相应的命令参数为待查看的线程号,进行步骤(12);命令类型为获取核运行线程时,相应的命令参数为核号,进行 步骤(13);命令类型为统计线程运行时间,相应的命令参数为被统计线程的线程号,进行步骤(14); (4)线程核绑定步骤,包括下述子步骤: (4.1)目标机端调试代理从操作系统调用设置亲和度掩码函数,从所述调试命令的命令参数中提取线程号与CPU亲和度掩码,作为所述设置亲和度掩码函数的两个参数,运行所述设置亲和度掩码函数,即能够将所述线程号指代的线程绑定到所述CPU亲和度掩码所确定的核上;所述线程号为子步骤(1.2)所创建的子线程的线程号; (4.2)判断所述设置亲和度掩码函数返回值是否为1,是则将表示成功的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4);否则将表示错误的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (5)插入断点步骤,包括下述子步骤: (5.1)目标机端调试代理在自身存储的断点信息链表中添加一个节点,在该节点数据位加入一个新的断点编号,同时从所述调试命令的命令参数中提取相应的线程号、核号、源代码文件...

【技术特征摘要】

【专利技术属性】
技术研发人员:李国徽欧阳峥峥黄瑛曹粟马艳万伟杨顺华
申请(专利权)人:华中科技大学 武汉轻工大学
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1