CN111352842A - 基于嵌入式的软件调试方法 - Google Patents
基于嵌入式的软件调试方法 Download PDFInfo
- Publication number
- CN111352842A CN111352842A CN202010131540.9A CN202010131540A CN111352842A CN 111352842 A CN111352842 A CN 111352842A CN 202010131540 A CN202010131540 A CN 202010131540A CN 111352842 A CN111352842 A CN 111352842A
- Authority
- CN
- China
- Prior art keywords
- debugging
- embedded
- information
- function
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了基于嵌入式的软件调试方法,独立编制的PC工具软件(K‑Stack)读入设备运行的二进制代码对应的包含调试信息的嵌入式elf文件,根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数,并反汇编出该函数,显示函数、行号及汇编代码并用特别颜色标识出错指令位置处;独立自主的嵌入式实时操作系统(RTOS)内嵌调试模块;调试模块内嵌命令行,支持按内存地址,配合PC工具可获知变量地址,查看与修改,甚至调用函数;基于串口的热键检测,嵌入式系统一般使用串口作为输入输出,可暂停系统进入RTOS调试模式;解决了现在常用的嵌入式调试一般基于JTAG硬件调试,此方法在系统交付后的现场较难使用,在系统运行出错时不方便调试的问题。
Description
技术领域
本发明属于通信领域,具体涉及基于嵌入式的软件调试方法。
背景技术
现在常用的嵌入式调试一般基于JTAG硬件调试,此方法在系统交付后的现场较难使用,在系统运行出错时亦不可能再连接JTAG调试设备。普通基于打印方式的调试手段正常运行时输出大量信息,占用CPU资源而且难以解析输出的信息。交付环境出错时可能并未连接调试输出设备而错过相关的信息。而运行环境及参数的不同出现问题后,某些故障点也是难以复现。从而在开发阶段和交付维护中耗费大量的人力和时间。
本技术综合运用PC上的反汇编技术、内嵌的异常跟踪和代码调用解析技术、内嵌热键和软断点技术,能够在系统出错时解析出出错指令位置,查看系统中内存数据、变量数据、或强制运行某函数。或实时暂停系统运行,根据模块、代码、文件范围开启、关闭输出调试信息,或运行到指定位置挂起系统,激活调试系统,进而查看系统信息。避免研发或交付过程中不停地复现相关问题或丢失稍纵即逝的“疑难杂症”问题。
发明内容
本发明提供了基于嵌入式的软件调试方法,解决了现在常用的嵌入式调试一般基于JTAG硬件调试,此方法在系统交付后的现场较难使用,在系统运行出错时不方便调试的问题。
本发明所采用的技术方案为:
基于嵌入式的软件调试方法,包括以下步骤,
S1、采用嵌入式系统捕获CPU的异常中断,获取异常类型;
S2、根据异常类型进入异常处理模块,激活调试模式,输出异常信息;
S3、读取异常信息:采用PC上的工具软件装载编译时生成的elf文件,所述elf文件为嵌入式系统上运行代码对应且包含调试信息的elf文件,再解析所述elf文件中的变量或代码地址;
S4、查找对应的地址,获知异常信息对应的机器指令位置;
S5、通过反汇编显示源码信息;
S6、获得嵌入式系统运行出错的函数调用路径,进而分析代码错误原因。
独立编制的PC工具软件(K-Stack)读入设备运行的二进制代码对应的包含调试信息的嵌入式elf文件,根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数,并反汇编出该函数,显示函数、行号及汇编代码并用特别颜色标识出错指令位置处;独立自主的嵌入式实时操作系统(RTOS)内嵌调试模块;调试模块内嵌命令行,支持按内存地址,配合PC工具可获知变量地址,查看与修改,甚至调用函数;基于串口的热键检测,嵌入式系统一般使用串口作为输入输出,可暂停系统进入RTOS调试模式;解决了现在常用的嵌入式调试一般基于JTAG硬件调试,此方法在系统交付后的现场较难使用,在系统运行出错时不方便调试的问题。
基于上述技术优选的,当系统未异常时,采用嵌入式系统的中断热键暂停系统运行,进入调试状态,查看任务的调用堆栈,配合PC工具查看源代码信息。输出的异常信息,各寄存器、堆栈、函数调用栈等,这些信息均为十六进制数值,当没有相应工具时,解读异常困难,通过采用PC上的工具软件装载编译时生成嵌入式系统上运行代码对应且包含调试信息的elf文件可以识别成二进制,设备运行二进制代码,符号表等调试信息不占用设备的ROM/RAM空间。
基于上述技术优选的,在步骤S1中,获取异常类型还可采用PC工具获取指定变量的内存地址,然后在嵌入式系统上查看。
基于上述技术优选的,源码信息包括文件名、函数名及行号。
基于上述技术优选的,步骤S4中查找对应的地址,获知异常信息对应的机器指令位置是根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数。
基于上述技术优选的,步骤S4中查找对应的地址,也可以查询全局变量或符号的地址。
基于上述技术优选的,步骤S5中通过反汇编显示源码信息包括反汇编出出错的指令位置所属的函数,并显示函数、行号及汇编代码,并用颜色标识出错指令位置处。
基于上述技术优选的,所述嵌入式系统采用统一的插桩调试编码方法,包含调试点的文件名、函数名、行号信息、模块名,调试开关包含打印、暂停系统并激活调试模式;所述插桩调试编码方法使用static局部声明每个调试点信息并使用gcc编译器的attributesection语法构建全部调试点来统一管理。
本发明具有如下的优点和有益效果:
1、本发明独立编制的PC工具软件(K-Stack)读入设备运行的二进制代码对应的包含调试信息的嵌入式elf文件,根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数,并反汇编出该函数,显示函数、行号及汇编代码并用特别颜色标识出错指令位置处;独立自主的嵌入式实时操作系统(RTOS)内嵌调试模块;调试模块内嵌命令行,支持按内存地址,配合PC工具可获知变量地址,查看与修改,甚至调用函数;基于串口的热键检测,嵌入式系统一般使用串口作为输入输出,可暂停系统进入RTOS调试模式;解决了现在常用的嵌入式调试一般基于JTAG硬件调试,此方法在系统交付后的现场较难使用,在系统运行出错时不方便调试的问题;
2、本发明开发过程中减少出错时重新装载代码,重新复现问题的过程,节省大量的开发时间;
3、本发明测试部门测出问题时快速定位错误,加速bug修复时间;交付过程中,快速解决复杂环境下的错误定位或“疑难杂症”。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1是本发明采用嵌入系统进行调试的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
本文使用的术语仅用于描述特定实施例,并且不意在限制本发明的示例实施例。如本文所使用的,单数形式“一”、“一个”以及“该”意在包括复数形式,除非上下文明确指示相反意思。还应当理解术语“包括”、“包括了”、“包含”、和/或“包含了”当在本文中使用时,指定所声明的特征、整数、步骤、操作、单元和/或组件的存在性,并且不排除一个或多个其他特征、数量、步骤、操作、单元、组件和/或他们的组合存在性或增加。
实施例1:
如图1所示,本实施例提供了基于嵌入式的软件调试方法,包括以下步骤,
S1、采用嵌入式系统捕获CPU的异常中断,获取异常类型;
S2、根据异常类型进入异常处理模块,激活调试模式,输出异常信息;
S3、读取异常信息:采用PC上的工具软件装载编译时生成的elf文件,elf文件为elf格式的文件,所述elf文件为嵌入式系统上运行代码对应且包含调试信息的elf文件,再解析所述elf文件中的变量或代码地址;
S4、查找对应的地址,获知异常信息对应的机器指令位置;
S5、通过反汇编显示源码信息;
S6、获得嵌入式系统运行出错的函数调用路径,进而分析代码错误原因。
具体实施时,当系统未异常时,采用嵌入式系统的中断热键暂停系统运行,进入调试状态,查看任务的调用堆栈,配合PC工具查看源代码信息。
具体实施时,在步骤S1中,获取异常类型还可采用PC工具获取指定变量的内存地址,然后在嵌入式系统上查看。
具体实施时,所述源码信息包括文件名、函数名及行号。
具体实施时,步骤S4中查找对应的地址,获知异常信息对应的机器指令位置是根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数。
具体实施时,步骤S4中查找对应的地址,也可以查询全局变量或符号的地址。
具体实施时,步骤S5中通过反汇编显示源码信息包括反汇编出出错的指令位置所属的函数,并显示函数、行号及汇编代码,并用颜色标识出错指令位置处。
具体实施时,嵌入式系统采用统一的插桩调试编码方法,包含调试点的文件名、函数名、行号信息、模块名,调试开关包含打印、暂停系统并激活调试模式;所述插桩调试编码方法使用static局部声明每个调试点信息并使用gcc编译器的attribute section语法构建全部调试点来统一管理。static是一种函数;GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器;attribute section是一种函数。
基于插桩及热键响应的嵌入式软调试方法具有以下特点:
1.设备运行二进制代码,符号表等调试信息不占用设备的ROM/RAM空间。
独立编制的PC工具软件(K-Stack)读入设备运行的二进制代码对应的包含调试信息的嵌入式elf文件,根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数,并反汇编出该函数,显示函数、行号及汇编代码并用特别颜色标识出错指令位置处。也可以查询全局变量或符号的地址。
3.统一的插桩调试编码方法,包含调试点的文件名、函数名、行号信息、模块名,调试开关包含打印、暂停系统并激活调试模式。该方法使用static局部声明每个调试点信息并使用gcc编译器的attribute section语法构建全部调试点来统一管理。
4.独立自主的嵌入式实时操作系统(RTOS)内嵌调试模块。调试模块内嵌命令行,支持按内存地址(配合PC工具可获知变量地址)查看与修改,甚至调用函数。
内嵌调试模块还支持独有的统一调试信息管理,可分别基于函数名/文件名+代码行范
围或基于模块名开启、关闭调试点的打印输出或暂停系统。
5.基于串口(嵌入式系统一般使用串口作为输入输出)的热键检测,可暂停系统进入RTOS调试模式。
6.RTOS的CPU异常捕获在系统出错时解析出错时的指令位置及调用堆栈,配合PC工具可获知出错指令地址对应的函数名及行号等
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.基于嵌入式的软件调试方法,其特征在于,包括以下步骤,
S1、采用嵌入式系统捕获CPU的异常中断,获取异常类型;
S2、根据异常类型进入异常处理模块,激活调试模式,输出异常信息;
S3、读取异常信息:采用PC上的工具软件装载编译时生成的elf文件,所述elf文件为嵌入式系统上运行代码对应且包含调试信息的elf文件,再解析所述elf文件中的变量或代码地址;
S4、查找对应的地址,获知异常信息对应的机器指令位置;
S5、通过反汇编显示源码信息;
S6、获得嵌入式系统运行出错的函数调用路径,进而分析代码错误原因。
2.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,当系统未异常时,采用嵌入式系统的中断热键暂停系统运行,进入调试状态,查看任务的调用堆栈,配合PC工具查看源代码信息。
3.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,在步骤S1中,获取异常类型还可采用PC工具获取指定变量的内存地址,然后在嵌入式系统上查看。
4.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,所述源码信息包括文件名、函数名及行号。
5.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,步骤S4中查找对应的地址,获知异常信息对应的机器指令位置是根据标准elf文件格式,读取符号表信息及地址信息,查找出错的指令位置所属的函数。
6.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,步骤S4中查找对应的地址,也可以查询全局变量或符号的地址。
7.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,步骤S5中通过反汇编显示源码信息包括反汇编出出错的指令位置所属的函数,并显示函数、行号及汇编代码,并用颜色标识出错指令位置处。
8.根据权利要求1所述的基于嵌入式的软件调试方法,其特征在于,所述嵌入式系统采用统一的插桩调试编码方法,包含调试点的文件名、函数名、行号信息、模块名,调试开关包含打印、暂停系统并激活调试模式;所述插桩调试编码方法使用static局部声明每个调试点信息并使用gcc编译器的attribute section语法构建全部调试点来统一管理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010131540.9A CN111352842A (zh) | 2020-02-28 | 2020-02-28 | 基于嵌入式的软件调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010131540.9A CN111352842A (zh) | 2020-02-28 | 2020-02-28 | 基于嵌入式的软件调试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111352842A true CN111352842A (zh) | 2020-06-30 |
Family
ID=71192415
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010131540.9A Pending CN111352842A (zh) | 2020-02-28 | 2020-02-28 | 基于嵌入式的软件调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111352842A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966602A (zh) * | 2020-09-04 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种定点代码调试方法、系统、终端及存储介质 |
CN112733093A (zh) * | 2021-01-04 | 2021-04-30 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
CN114237746A (zh) * | 2021-12-16 | 2022-03-25 | 北京天融信网络安全技术有限公司 | 基于c语言的配置信息管理方法、装置、设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261603A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 故障定位的方法和装置 |
US20120209895A1 (en) * | 2009-11-04 | 2012-08-16 | Zte Corporation | Method and device for dynamically loading relocatable file |
CN103106132A (zh) * | 2013-03-05 | 2013-05-15 | 中标软件有限公司 | Linux系统崩溃时内核函数调用栈分析调试方法 |
CN105653432A (zh) * | 2015-12-22 | 2016-06-08 | 北京奇虎科技有限公司 | 一种崩溃数据的处理方法和装置 |
CN105787368A (zh) * | 2016-02-26 | 2016-07-20 | 武汉大学 | 一种基于函数置乱的rop防御方法与装置 |
CN107329896A (zh) * | 2017-06-29 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种基于be的程序崩溃的分析方法及系统 |
CN107577609A (zh) * | 2017-09-28 | 2018-01-12 | 北京计算机技术及应用研究所 | 一种基于主机端动态链接的嵌入式系统动态模块调试方法 |
US20180196648A1 (en) * | 2017-01-10 | 2018-07-12 | Red Hat, Inc. | Providing dynamic instrumentation using domain-specific monitoring-language-to-kernel-bytecode compilation |
CN109308183A (zh) * | 2018-07-30 | 2019-02-05 | 南阳理工学院 | 一种面向vliw芯片可执行代码的逆向工具方法 |
CN109683900A (zh) * | 2018-11-14 | 2019-04-26 | 浙江零跑科技有限公司 | 针对elf文件调试信息的通用上位机符号查找与解析方法 |
-
2020
- 2020-02-28 CN CN202010131540.9A patent/CN111352842A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261603A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 故障定位的方法和装置 |
US20120209895A1 (en) * | 2009-11-04 | 2012-08-16 | Zte Corporation | Method and device for dynamically loading relocatable file |
CN103106132A (zh) * | 2013-03-05 | 2013-05-15 | 中标软件有限公司 | Linux系统崩溃时内核函数调用栈分析调试方法 |
CN105653432A (zh) * | 2015-12-22 | 2016-06-08 | 北京奇虎科技有限公司 | 一种崩溃数据的处理方法和装置 |
CN105787368A (zh) * | 2016-02-26 | 2016-07-20 | 武汉大学 | 一种基于函数置乱的rop防御方法与装置 |
US20180196648A1 (en) * | 2017-01-10 | 2018-07-12 | Red Hat, Inc. | Providing dynamic instrumentation using domain-specific monitoring-language-to-kernel-bytecode compilation |
CN107329896A (zh) * | 2017-06-29 | 2017-11-07 | 郑州云海信息技术有限公司 | 一种基于be的程序崩溃的分析方法及系统 |
CN107577609A (zh) * | 2017-09-28 | 2018-01-12 | 北京计算机技术及应用研究所 | 一种基于主机端动态链接的嵌入式系统动态模块调试方法 |
CN109308183A (zh) * | 2018-07-30 | 2019-02-05 | 南阳理工学院 | 一种面向vliw芯片可执行代码的逆向工具方法 |
CN109683900A (zh) * | 2018-11-14 | 2019-04-26 | 浙江零跑科技有限公司 | 针对elf文件调试信息的通用上位机符号查找与解析方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966602A (zh) * | 2020-09-04 | 2020-11-20 | 苏州浪潮智能科技有限公司 | 一种定点代码调试方法、系统、终端及存储介质 |
CN111966602B (zh) * | 2020-09-04 | 2022-05-31 | 苏州浪潮智能科技有限公司 | 一种定点代码调试方法、系统、终端及存储介质 |
CN112733093A (zh) * | 2021-01-04 | 2021-04-30 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
CN112733093B (zh) * | 2021-01-04 | 2024-03-12 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
CN114237746A (zh) * | 2021-12-16 | 2022-03-25 | 北京天融信网络安全技术有限公司 | 基于c语言的配置信息管理方法、装置、设备及存储介质 |
CN114237746B (zh) * | 2021-12-16 | 2023-11-14 | 北京天融信网络安全技术有限公司 | 基于c语言的配置信息管理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5778230A (en) | Goal directed object-oriented debugging system | |
US7266809B2 (en) | Software debugger and software development support system for microcomputer operable to execute conditional execution instruction | |
US8266608B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
US7058927B2 (en) | Computer software run-time analysis systems and methods | |
US8091075B2 (en) | Method and apparatus for breakpoint analysis of computer programming code using unexpected code path conditions | |
US7478366B2 (en) | Debugger and method for debugging computer programs across multiple programming languages | |
EP1179777B1 (en) | Generation of runtime execution traces of applications and error detection | |
CN111352842A (zh) | 基于嵌入式的软件调试方法 | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
US8739135B2 (en) | Static instrumentation macros for fast declaration free dynamic probes | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US20060259830A1 (en) | Real-time software diagnostic tracing | |
JPH0748182B2 (ja) | プログラム・エラー検出方法 | |
CN115757183A (zh) | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 | |
CN114036072B (zh) | 一种支持自动化检测程序缺陷的方法和系统 | |
US20120110383A1 (en) | Method and apparatus for off-line analyzing crashed programs | |
JP4009517B2 (ja) | プログラム開発支援装置およびコンパイル方法 | |
CN113867704A (zh) | 一种代码测试处理方法、装置、电子设备及存储介质 | |
JP2008052688A (ja) | プログラムのパッチデータ生成装置 | |
CN114510429B (zh) | 一种基于动态符号执行的调试方法、系统和介质 | |
CN114090440A (zh) | 一种基于安卓操作系统的一体化免源码调试方法 | |
JPH11110256A (ja) | プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体 | |
CN113076247B (zh) | 一个管理与运行测试脚本的方法及系统 | |
CN115098080B (zh) | 一种兼容多种语言的编程系统 | |
JP2002014847A (ja) | プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200630 |