嵌入式开发中使用DDD进行调试
嵌入式开发中使用DDD进行调试
? ???? 在嵌入式程序开发过程中,程序员要进行大量的调试,以此验证程序的正确性,修改潜在的错误。调试器对于程序员来说是不可或缺的必备工具。在Linux环境中,有很多调试工具和调试辅助工具,例如GDB、XXGDB、RHIDE、XWPE、GVD和DDD等。其中,DDD是命令行调试器的图形前端,除了一般的程序调试功能以外,还具有交互式图形数据显示的功能。它在嵌入式应用开发中也十分出色。本文主要讲述DDD(Data Display Debugger)的使用方法。 ???? 图1显示的是DDD的主窗口。它主要由选单栏、工具条、数据窗口、源文件窗口、机器码窗口、控制台和命令工具窗口等几部分组成。其中,数据窗口用于观察复杂的数据结构,在删除数据之后,显示仍然有效;源文件窗口显示源代码、断点和当前执行到达的位置,选择该窗口中的“Display”项,可以显示任意表达式的值;机器码窗口显示当前所选函数的机器代码,但仅对于GDB来说是可用的;在Debugger控制台里,用户可以与DDD内置调试器的命令行接口进行交互,等同于执行命令工具栏中的命令。 图1 DDD的主窗口 DDD运行机理 图2 DDD的运行机理 ??? DDD 在事件循环时等待用户输入和GDB输出,同时等着GDB进入等待输入状态。当GDB可用时,下一条命令就会从命令队列中取出,送给GDB。GDB到达的输出由上次命令的回调过程来处理。这种异步机制避免了DDD在等待GDB输出时发生阻塞现象,到达的事件可以在任何时间得到处理。 #include <stdio.h> #include <stdlib.h> #define MAXINPUTSTRINGSIZE 5 int n; int factn; char resultstring[100]; int getInt() { char * inputString; int inputInt; inputString = (char *) malloc (MAXINPUTSTRINGSIZE * sizeof(char)); printf("Enter the value:"); fgets(inputString,MAXINPUTSTRINGSIZE,stdin); printf("You entered %sn",inputString); inputInt = atoi(inputString); return inputInt; } int computeFact(int n) { int accum=0; while(n>1) { accum *= n; n--; } return accum; } char * buildResultString(int x,int factx) { char * resultString = (char *) malloc(100 * sizeof(char)); sprintf(resultString,"The factorial of %d is %dn",x,factx); return resultString; } void main(int argc,char * argv[]) { char * outString; // The string we will print out n = getInt(); factn = computeFact(n); outString = buildResultString(n,factn); printf("%sn",outString); } ??? 首先,使用下面的命令编译sample.c,切记要使用“-g”选项生成调试信息: 图3 使用DDD进行调试 ??? 在控制台中提示符下输入数字“5”后按回车键,就会运行到图3中箭头指示的位置。这时候检查可疑变量accum的值,在控制台提示后输入下面的命令: (gdb) step 43 while(n>1) { 1: accum = 0 (gdb) 44 accum *= n; 1: accum = 0 (gdb) 45 n--; 1: accum = 0 (gdb) 43 while(n>1) { 1: accum = 0 (gdb) 44 accum *= n; 1: accum = 0 (gdb) 45 n--; 1: accum = 0 ??? 可以看出问题出在accum上。这时点击命令工具栏上的“Kill”按钮将程序断掉,把初始化accum的那一句改为“int accum = 1;”。重新运行之后,发现结果正确。至此,调试过程完毕。 图4 绘制数据集 ??? DDD包含的内容不止这些,由于篇幅的限制,这里就不多说了。希望能起到抛砖引玉的作用。如果用户想进一步学习,可以参考DDD的用户手册。
阅读
(71)┊
评论
(0)┊
收藏
(0)
┊禁止转载
┊
顶
▼
┊
打印
┊
举报
加载中,请稍候......
前一篇:
【转】打造人脉不如打造自己
后一篇:
使用文件进行数据存储
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |