张君毅,李洪威,桑钊,孟小锁(西安微电子技术研究所陕西西安710065)0引言在软件开发过程中,程序出现错误在所难免。无论是普通软件还是嵌入式软件,调试器都是开发过程中不可缺少的工具。“调试器”是用于跟踪程序执行情况,快速有效地定位错误产生的位置,从而找到引起错误的原因,并将其消除的工具。调试功能是开发环境中最重要、也是最复杂的功能之一,其好坏在很大程度上决定了一个开发环境的优劣。调试是一个从错误现象出发
张君毅,李洪威,桑钊,孟小锁
(西安微电子技术研究所 陕西西安 710065)
0引 言
在软件开发过程中,程序出现错误在所难免。无论是普通软件还是嵌入式软件,调试器都是开发过程中不可缺少的工具。
“调试器”是用于跟踪程序执行情况,快速有效地定位错误产生的位置,从而找到引起错误的原因,并将其消除的工具。调试功能是开发环境中最重要、也是最复杂的功能之一,其好坏在很大程度上决定了一个开发环境的优劣。调试是一个从错误现象出发,通过某种手段寻找错误代码的过程。调试的基本原理是在发现程序运行的错误后,设法再现程序的执行过程,并获取程序执行中的有关信息,通过对这些信息的分析,逐步找到引起错误的原因。循环调试是最基本的调试模型;循环调试的意思是反复运行程序,利用打印输出、断点、单步等技术,观察程序状态,控制程序运行,逐渐逼近错误代码;循环调试的前提是程序运行是确定的,即对同样的输入,程序的执行过程是相同的。串行程序具有确定性。
调试的基本行为有观察、控制与修改。观察是对程序的执行状态进行察看,包括处理机状态、进程状态和数据状态等;控制即控制程序的执行过程,例如设断点、单步执行等;修改就是改变程序的运行状态,如修改变量的值、修改指令计数器、修改状态寄存器等。调试器在不同程度上支持这3种行为的综合使用。
经典的调试手段有断点(Break Pointing)、跟踪(Tracing)、断言(Assertion)、分析(Analysis)、打印输出等。在源程序级支持图形化的用户界面使得调试工作更加容易进行。对于实时程序或专用机上的程序还常采用模拟手段进行调试。
1 CDT的调试机制解析
CDT提供了4个插件用于实现调试功能。这几个插件对于GDB调试器进行操作,并且应用GDB提供的MI接口进行通信。这四个插件分别为org.eclipse.cdt.debug.mi.core插件,用以实现GDB的MI接口功能及GDB调用功能;org.eclipse.cdt.debug.mi.ui插件,主要用于实现GDB的相关设置选项界面;org.eclipse.cdt.debug.core插件,用于实现CDT的调试模型,包括用串口调试,用网卡调试,设置波特率等功能;org.eclipse.cdt.debug.ui插件,用于实现界面显示功能,包括调试视图,调试动作等,比如单步调试,设置断点,下载,运行程序等调试功能。它们之间的关系如图1所示。