首页> 中国专利> 一种嵌入式Linux系统应用程序的调测方法及系统

一种嵌入式Linux系统应用程序的调测方法及系统

摘要

本发明提供了一种嵌入式Linux系统应用程序的调测方法及系统,本发明通过在应用程序中添加Shell模块,以及自制debugshell工具,两者通过管道进行进程间通信,同时应用程序进程利用自动提取的符号表解析调试命令,完成在标准Linux系统根Shell命令行交互窗口中,通过debugshell工具对应用程序全局变量的实时读写、函数的实时调用等功能,操作简单,实时性强,且能够做到不干扰系统的正常运行,不影响现场环境的正常运营。

著录项

  • 公开/公告号CN112231221A

    专利类型发明专利

  • 公开/公告日2021-01-15

    原文格式PDF

  • 申请/专利权人 积成电子股份有限公司;

    申请/专利号CN202011153779.2

  • 发明设计人 常卫江;赵静;魏峰;柳逢源;

    申请日2020-10-26

  • 分类号G06F11/36(20060101);G06F9/54(20060101);

  • 代理机构11582 北京久维律师事务所;

  • 代理人邢江峰

  • 地址 250104 山东省济南市科航路1677号

  • 入库时间 2023-06-19 09:35:27

说明书

技术领域

本发明涉及嵌入式Linux系统技术领域,特别是一种嵌入式Linux系统应用程序的调测方法及系统。

背景技术

在嵌入式Linux系统中调试程序或定位问题时,经常需要在运行时查看某个变量的值,或执行某个调试函数,这时往往需要在源代码中增加打印语句,或增加函数调用的语句,并重新编译运行,这样做不仅操作步骤繁琐,要花费大量编译和运行的时间,更重要的是破坏了问题发生时的现场,不利于一些偶发问题的调试定位,尤其是当设备在客户运营的环境下工作时,重新编译运行的方式可能会中断现场的运营,无法得到客户的认同,这就需要一种能让开发人员在系统正常运行不受干扰的情况下定位问题的快捷手段。

发明内容

本发明的目的是提供一种嵌入式Linux系统应用程序的调测方法及系统,旨在解决现有技术中调试过程影响系统正常运行的问题,实现不干扰系统的正常运行,降低操作复杂度。

为达到上述技术目的,本发明提供了一种嵌入式Linux系统应用程序的调测方法,所述方法包括以下操作:

在应用程序源码中添加Shell模块,重新编译后,利用nm工具获取重新编译后的应用程序文件的符号表;

在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并将debugshell工具放置在设备目录下,创建符号链接;

在设备的Shell命令行中键入调试命令和参数,debugshell工具向命令管道发送调试命令,Shell模块接收调试命令,调用命令函数并查找符号表,将参数中符号替换为内存地址,输出调试结果至结果管道,debugshell工具读取结果并打印。

优选地,所述debugshell工具以只写方式打开命令管道文件以及以只读方式打开结果管道文件;所述Shell模块以只读方式打开命令管道文件以及以只写方式打开结果管道文件。

优选地,所述调试命令包括d/m/call的调试命令,d命令为按一定的字节宽度显示指定地址后若干字节的内容,m命令为按一定的字节宽度修改指定地址后若干字节的内容,call命令为调用指定的应用程序中的函数,并根据命令的参数个数选用相应的函数指针,通过函数指针调用目标函数并传递参数。

优选地,所述调试结果具有固定的结尾字符。

本发明还提供了一种嵌入式Linux系统应用程序的调测系统,所述系统包括:

主程序Shell模块,用于在应用程序源码中添加Shell模块,重新编译后,利用nm工具获取重新编译后的应用程序文件的符号表;

debugshell模块,用于在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并将debugshell工具放置在设备目录下,创建符号链接;

调试交互模块,用于在设备的Shell命令行中键入调试命令和参数,debugshell工具向命令管道发送调试命令,Shell模块接收调试命令,调用命令函数并查找符号表,将参数中符号替换为内存地址,输出调试结果至结果管道,debugshell工具读取结果并打印。

优选地,所述debugshell工具以只写方式打开命令管道文件以及以只读方式打开结果管道文件;所述Shell模块以只读方式打开命令管道文件以及以只写方式打开结果管道文件。

优选地,所述调试命令包括d/m/call的调试命令,d命令为按一定的字节宽度显示指定地址后若干字节的内容,m命令为按一定的字节宽度修改指定地址后若干字节的内容,call命令为调用指定的应用程序中的函数,并根据命令的参数个数选用相应的函数指针,通过函数指针调用目标函数并传递参数。

优选地,所述调试结果具有固定的结尾字符。

本发明还提供了一种嵌入式Linux系统应用程序的调测设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序,以实现所述的嵌入式Linux系统应用程序的调测方法。

本发明还提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现所述的嵌入式Linux系统应用程序的调测方法。

发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:

与现有技术相比,本发明通过在应用程序中添加Shell模块,以及自制debugshell工具,两者通过管道进行进程间通信,同时应用程序进程利用自动提取的符号表解析调试命令,完成在标准Linux系统根Shell命令行交互窗口中,通过debugshell工具对应用程序全局变量的实时读写、函数的实时调用等功能,操作简单,实时性强,且能够做到不干扰系统的正常运行,不影响现场环境的正常运营。

附图说明

图1为本发明实施例中所提供的一种嵌入式Linux系统应用程序的调测方法流程图;

图2为本发明实施例中所提供的debugshell工具与Shell模块通信流程图;

图3为本发明实施例中所提供的一种嵌入式Linux系统应用程序的调测系统框图。

具体实施方式

为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

下面结合附图对本发明实施例所提供的一种嵌入式Linux系统应用程序的调测方法及系统进行详细说明。

如图1所示,本发明公开了一种嵌入式Linux系统应用程序的调测方法,所述方法包括以下操作:

在应用程序源码中添加Shell模块,重新编译后,利用nm工具获取重新编译后的应用程序文件的符号表;

在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并将debugshell工具放置在设备目录下,创建符号链接;

在设备的Shell命令行中键入调试命令和参数,debugshell工具向命令管道发送调试命令,Shell模块接收调试命令,调用命令函数并查找符号表,将参数中符号替换为内存地址,输出调试结果至结果管道,debugshell工具读取结果并打印。

在嵌入式Linux系统应用软件的源码中移植Shell模块,重新编译应用软件,在编译选项中添加-g,并在嵌入式设备中正常运行。Shell模块主要用于创建传输调试命令和调试结果的管道文件。通过添加Shell模块,可启动tShell线程,用于从管道文件中接收调试命令、执行调试动作以及向管道文件发送调试结果。

下载GNUBinutils的源码压缩包,配置编译选项,交叉编译得到一组二进制工具集,其中的nm工具用于可执行文件的符号表提取。

将nm工具和新编译得到的应用程序放在设备中,nm工具放置在设备的/usr/bin目录下,在应用程序main的目录下运行nm工具,得到应用程序的符号表文件symbol。

在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并放置在设备的/usr/bin目录下。通过自制debugshell工具,可接收标准Linux系统shell命令行的调试命令、向管道文件发送调试命令以及从管道文件接收调试结果,从而能够通过两个管道文件与应用程序的tShell线程对接。在本发明实施例中,debugshell主要用于传输调试命令和打印结果,因此一般不需要修改,其与应用程序的通信,是靠两个方向的管道文件实现的。

在设备的/usr/bin目录下放入debugshell工具,并与具体的调试命令同名,创建若干个常用命令的符号链接,都指向debugshell。

进入设备的Shell命令行界面,直接键入调试命令及其参数,即可在命令行界面中打印出该调试命令的结果。用户在命令行键入的调试命令,是在应用程序的Shell模块中解析的,因此调试命令的格式是在Shell模块中定义的,具有较好的扩展性,若要增加调试命令,在Shell模块中增加命令解析的实现即可。

在应用程序源码中,按实际需要添加调试函数或全局变量,并重新编译运行,在命令行中可直接键入d/m/call的调试命令,即可实现运行时查看内存、修改内存以及调用函数的调试。其中,d命令可以按一定的字节宽度显示指定地址后若干字节的内容,m命令可按一定的字节宽度修改指定地址后若干字节的内容,call命令可以调用指定的应用程序中的函数,并根据命令的参数个数选用相应的函数指针,通过函数指针调用目标函数并传递参数,目前最大支持4个4bytes的参数,必要时可修改Shell模块实现参数扩展。

如图2所示,通过debugshell工具检查命令管道文件以及结果管道文件,当不存在时则进行创建,以只写方式打开命令管道文件以及以只读方式打开结果管道文件,组装调试命令,单词以空格隔开,向命令管道发送调试命令,通过命令管道传入Shell模块,并接收结果管道的调试结果,循环读取结果管道的信息并打印,打印后关闭管道文件。Shell模块检查命令管道文件以及结果管道文件,当不存在时则进行创建,以只读方式打开命令管道文件以及以只写方式打开结果管道文件,在接收到命令管道的调试命令后,查找命令函数表调用命令函数,查找符号表将参数中的符号替换为内存地址,向结果管道输出调试结果。调试结果具有固定的结尾字符,一般选用0x00和0xff两个字节作为结尾字符。

本发明实施例通过在应用程序中添加Shell模块,以及自制debugshell工具,两者通过管道进行进程间通信,同时应用程序进程利用自动提取的符号表解析调试命令,完成在标准Linux系统根Shell命令行交互窗口中,通过debugshell工具对应用程序全局变量的实时读写、函数的实时调用等功能,操作简单,实时性强,且能够做到不干扰系统的正常运行,不影响现场环境的正常运营。

如图3所示,本发明实施例还公开了一种嵌入式Linux系统应用程序的调测系统,所述系统包括:

主程序Shell模块,用于在应用程序源码中添加Shell模块,重新编译后,利用nm工具获取重新编译后的应用程序文件的符号表;

debugshell模块,用于在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并将debugshell工具放置在设备目录下,创建符号链接;

调试交互模块,用于在设备的Shell命令行中键入调试命令和参数,debugshell工具向命令管道发送调试命令,Shell模块接收调试命令,调用命令函数并查找符号表,将参数中符号替换为内存地址,输出调试结果至结果管道,debugshell工具读取结果并打印。

在嵌入式Linux系统应用软件的源码中移植Shell模块,重新编译应用软件,在编译选项中添加-g,并在嵌入式设备中正常运行。Shell模块主要用于创建传输调试命令和调试结果的管道文件。通过添加Shell模块,可启动tShell线程,用于从管道文件中接收调试命令、执行调试动作以及向管道文件发送调试结果。

下载GNUBinutils的源码压缩包,配置编译选项,交叉编译得到一组二进制工具集,其中的nm工具用于可执行文件的符号表提取。

将nm工具和新编译得到的应用程序放在设备中,nm工具放置在设备的/usr/bin目录下,在应用程序main的目录下运行nm工具,得到应用程序的符号表文件symbol。

在ubuntu中交叉编译debugshell源码,得到debugshell工具的可执行文件,并放置在设备的/usr/bin目录下。通过自制debugshell工具,可接收标准Linux系统shell命令行的调试命令、向管道文件发送调试命令以及从管道文件接收调试结果,从而能够通过两个管道文件与应用程序的tShell线程对接。在本发明实施例中,debugshell主要用于传输调试命令和打印结果,因此一般不需要修改,其与应用程序的通信,是靠两个方向的管道文件实现的。

在设备的/usr/bin目录下放入debugshell工具,并与具体的调试命令同名,创建若干个常用命令的符号链接,都指向debugshell。

进入设备的Shell命令行界面,直接键入调试命令及其参数,即可在命令行界面中打印出该调试命令的结果。用户在命令行键入的调试命令,是在应用程序的Shell模块中解析的,因此调试命令的格式是在Shell模块中定义的,具有较好的扩展性,若要增加调试命令,在Shell模块中增加命令解析的实现即可。

在应用程序源码中,按实际需要添加调试函数或全局变量,并重新编译运行,在命令行中可直接键入d/m/call的调试命令,即可实现运行时查看内存、修改内存以及调用函数的调试。其中,d命令可以按一定的字节宽度显示指定地址后若干字节的内容,m命令可按一定的字节宽度修改指定地址后若干字节的内容,call命令可以调用指定的应用程序中的函数,并根据命令的参数个数选用相应的函数指针,通过函数指针调用目标函数并传递参数,目前最大支持4个4bytes的参数,必要时可修改Shell模块实现参数扩展。

通过debugshell工具检查命令管道文件以及结果管道文件,当不存在时则进行创建,以只写方式打开命令管道文件以及以只读方式打开结果管道文件,组装调试命令,单词以空格隔开,向命令管道发送调试命令,通过命令管道传入Shell模块,并接收结果管道的调试结果,循环读取结果管道的信息并打印,打印后关闭管道文件。Shell模块检查命令管道文件以及结果管道文件,当不存在时则进行创建,以只读方式打开命令管道文件以及以只写方式打开结果管道文件,在接收到命令管道的调试命令后,查找命令函数表调用命令函数,查找符号表将参数中的符号替换为内存地址,向结果管道输出调试结果。调试结果具有固定的结尾字符,一般选用0x00和0xff两个字节作为结尾字符。

本发明实施例还公开了一种嵌入式Linux系统应用程序的调测设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序,以实现所述的嵌入式Linux系统应用程序的调测方法。

本发明实施例还公开了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现所述的嵌入式Linux系统应用程序的调测方法。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号