[发明专利]一种嵌入式多核环境下应用程序的调试方法有效

专利信息
申请号: 201310533640.4 申请日: 2013-11-01
公开(公告)号: CN103729288A 公开(公告)日: 2014-04-16
发明(设计)人: 李国徽;欧阳峥峥;黄瑛;曹粟;马艳;万伟;杨顺华 申请(专利权)人: 华中科技大学;武汉轻工大学
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 华中科技大学专利中心 42201 代理人: 曹葆青
地址: 430074 湖北*** 国省代码: 湖北;42
权利要求书: 查看更多 说明书: 查看更多
摘要: 一种嵌入式多核环境下应用程序的调试方法,属于应用程序调试方法,解决现有调试方法存在的不能独立于操作系统、不适于两个以上核调试,且功能不够全面的问题。本发明包括建立远程连接步骤、发送调试命令步骤、分析调试命令步骤、线程核绑定步骤、插入断点步骤、查询断点步骤、删除断点步骤、单步执行步骤、持续执行步骤、执行至结束步骤、查看变量步骤、查看线程运行核步骤、获取核运行线程步骤和统计线程运行时间步骤。本发明能够独立于操作系统并独立于嵌入式开发工具对应用程序进行调试,调试功能较全面,宿主机端调试器可以了解应用程序运行的基本情况、对应用程序运行的各种异常更准确定位,提高了应用程序调试效率。
搜索关键词: 一种 嵌入式 多核 环境 应用程序 调试 方法
【主权项】:
一种嵌入式多核环境下应用程序的调试方法,包括建立远程连接步骤、发送调试命令步骤、分析调试命令步骤、线程核绑定步骤、插入断点步骤、查询断点步骤、删除断点步骤、单步执行步骤、持续执行步骤、执行至结束步骤、查看变量步骤、查看线程运行核步骤、获取核运行线程步骤和统计线程运行时间步骤,其特征在于: (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)目标机端调试代理在自身存储的断点信息链表中添加一个节点,在该节点数据位加入一个新的断点编号,同时从所述调试命令的命令参数中提取相应的线程号、核号、源代码文件名、源代码文件行号,加入所述节点数据位中;所述线程号为子步骤(1.2)所创建的子线程的线程号; (5.2)目标机端调试代理利用被调试应用程序的符号表,根据(5.1)新添加节点数据位中的源代码文件名和源代码文件行号,确定在目标文件中与之对应的机器指令的地址,然后用一条中断指令替换该地址处的机器指令,将该地址处原有机器指令保存至(5.1)新添加节点数据位的断点指令中;所述中断指令用于暂停执行被调试应用程序,并发送信号通知目标极端调试代理; (5.3)目标机端调试代理将(5.1)新添加节点的数据位作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (6)查询断点步骤: 目标机端调试代理将断点信息链表中的所有节点的数据位作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (7)删除断点步骤,包括下述子步骤: (7.1)目标机端调试代理从所述调试命令的命令参数中提取相应的断点编号,在自身存储的断点信息链表中查找是否存在包含所述断点编号的节点,是则进行子步骤(7.2),否则进行子步骤(7.3); (7.2)将该节点数据位中断点地址所指代地址处的机器指令删除,并以断点指令中存放的机器指令替换,在断点信息链表中删除包含所述断点编号的节点,将表示成功的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (7.3)将表示错误的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (8)单步执行步骤,包括下述子步骤: (8.1)按照子步骤(5.1),目标机端调试代理在自身存储的断点信息链表中添加一个节点,所述节点数据位中,源文件名为当前执行的源文件名,源文件行号为当前执行源代码行的下一行的行号,核号为0,线程号为被调试应用程序所对应的线程号;在执行子步骤(5.2)后,进行子步骤(8.2); (8.2)根据被调试应用程序的当前暂停位置处的断点的断点编号,在自身存储的断点信息链表中查找是否存在包含所述断点编号的节点,是则进行子步骤(8.3),否则进行子步骤(8.5); (8.3)将该节点数据位中断点地址所指代地址处的机器指令删除,并以断点指令中存放的机器指令替换,在断点信息链表中删除包含所述断点编号的节点,被调试应用程序恢复执行,然后判断被调试应用程序是否成功执行至(8.1)所设定的断点位置处,是则进行子步骤(8.4),否则进行子步骤(8.5); (8.4)将表示成功的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (8.5)将表示错误的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (9)持续执行步骤,包括下述子步骤: (9.1)目标机端调试代理在自身存储的断点信息链表中,根据被调试应用程序的当前断点的断点地址,查找是否存在包含所述断点地址的节点,是则进行子步骤(9.2),否则进行子步骤(9.5); (9.2)将该节点数据位中断点地址所指代地址处的机器指令删除,并以断点指令中存放的机器指令替换,在断点信息链表中删除包含所述断点地址的节点,被调试应用程序恢复执行;判断在执行过程中是否遇到断点,是则进行子步骤(9.3),否则进行子步骤(9.4); (9.3)比较所述应用程序的运行核的核号与所遇到断点位置所对应的节点中数据位的核号是否相同,是则被调试应用程序暂停运行,进行子步骤(9.4),否则进行子步骤(9.1); (9.4)将暂停位置处的行号作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (9.5)将表示错误的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (10)执行至结束步骤,包括下述子步骤: (10.1)目标机端调试代理在自身存储的断点信息链表中,根据被调试应用程序的当前断点的断点地址,查找是否存在包含所述断点地址的节点,是则进行子步骤(10.2),否则进行子步骤(10.4); (10.2)将该节点数据位中断点地址所指代地址处的机器指令删除,并以断点指令中存放的机器指令替换,在断点信息链表中删除包含所述断点地址的节点,被调试应用程序恢复执行;判断在执行过程中是否遇到断点,是则进行子步骤(10.1),否则被调试应用程序执行至结束,进行子步骤(10.3); (10.3)将表示成功的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (10.4)将表示错误的字符串作为数据,封装成执行结果RSP数据包, 发送给宿主机端调试器,转子步骤(2.4); (11)查看变量步骤,包括下述子步骤: (11.1)目标机端调试代理利用被调试应用程序的符号表,从所述调试命令的命令参数中提取相应的变量名称,查找符号表,判断在符号表中是否存在该变量;是则进行子步骤(11.2),否则进行子步骤(11.3); (11.2)将该变量的值作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (11.3)将表示错误的字符串作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (12)查看线程运行核步骤,包括下述子步骤: (12.1)目标机端调试代理从所述调试命令的命令参数中提取相应的线程号,查看其指代的线程在操作系统的进程信息文件系统proc目录下的task文件夹下对应的线程子文件夹下的stat文件,读取该线程的运行核; (12.2)目标机端调试代理将所读取线程的运行核的核号作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (13)获取核运行线程步骤,包括下述子步骤: (13.1)目标机端调试代理从操作系统的进程信息文件系统proc目录下的task文件夹下各线程子文件夹下的stat文件,读取所有线程的运行核,然后统计各个核的核状态及各个核运行线程的状态; 核状态分为三种:运行状态、暂停状态、空闲状态; 核运行线程的状态分为四种:当前核没有线程运行、当前核只有单个线程运行、当前核有多个线程运行、当前核所有线程运行; (13.2)目标机端调试代理从所述调试命令的命令参数中提取核号,将该核号所指代的核的核状态以及在该核上的核运行线程的状态作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4); (14)统计线程运行时间步骤,包括下述子步骤: (14.1)目标机端调试代理从所述调试命令的命令参数中提取相应的线 程号,查看其指代的线程在操作系统的进程信息文件系统proc目录下的task文件夹下对应的线程子文件夹下的stat文件,读取该线程在核上运行的系统时间与用户时间; (14.2)目标机端调试代理将所述系统时间与用户时间作为数据,封装成执行结果RSP数据包,发送给宿主机端调试器,转子步骤(2.4)。 
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学;武汉轻工大学,未经华中科技大学;武汉轻工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/patent/201310533640.4/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top