首页 理论教育 高效调试:GDB调试和ddd使用技巧

高效调试:GDB调试和ddd使用技巧

时间:2023-06-28 理论教育 版权反馈
【摘要】:GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。接下来,将具体讲解如何结合命令行调试工具GDB和可视化前端ddd这两个工具来进行TinyOS程序的调试工作。用gdb/ddd调试nesC代码gdb现在还没有特定的nesC模式。为了方便,可以采用ddd辅助调试。使用gdb/ddd调试BlinkTask应用的步骤如下。ddd由三个主要的窗口构成。图9-1 ddd调试截图仿真环境下调试TOSSIM是TinyOS传感器网络的离散事件仿真器,它为用户提供了一个可控制和可重复的调试、检验和分析代码的仿真环境。

高效调试:GDB调试和ddd使用技巧

由于TinyOS并不自带调试工具,因此在TinyOS下进行程序开发时需要借助第三方的调试工具进行程序调试。GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。与VC、BCB等IDE的调试方式不同,GDB虽然没有图形化的调试界面,却有着更强大的功能。

Ddd(Data Display Debugger)是命令行调试程序,如GDB、DBX、WDB、Ladebug、JDB、XDB、Perl Debugger或Python Debugger的可视化图形前端。它特有的图形数据显示功能(Graphical Data Display)可以把数据结构按照图形的方式显示出来。接下来,将具体讲解如何结合命令行调试工具GDB和可视化前端ddd这两个工具来进行TinyOS程序的调试工作。

(1)nesC名称到C名称的映射关系

ncc将nesC代码转换为C代码后,nesC中的类型、变量和函数名称是不会发生变化的,除非和nesC的关键字相同。在这种情况下需要在名字前面加上前缀“_nesc_keyword_”,比如,组件AA就变为“__nesc_keyword_AA”。nesC代码与C代码的具体映射关系如下:

模块M中的变量X映射为M$X,变量的名字不发生改变;

模块M中的函数F映射为M$F;

模块M中的命令或者事件C映射为M$C;

模块M中的接口I的命令或者事件C被映射为M$I$C。

(2)用gdb/ddd调试nesC代码

gdb现在还没有特定的nesC模式。但是,在gdb中可以有效地调试通过ncc编译器产生的C代码,C代码中包含#line,所以对nesC代码的单步跟踪可以显示正确的nesC源代码,可以根据nesC组件的名称和行号设置断点。但是变量、函数、命令和事件的名称就不是这么简单了。如果你想要引用他们中的任何一个就必须使用他们在产生的C代码中的名称,在调试中读者要注意这一点。

gdb是命令行调试工具,要输入的字符比较多,调试起来比较麻烦。为了方便,可以采用ddd辅助调试。它是命令行调试工具的图形化前端,能够提供更友好的用户功能和界面,而且更容易设定调试会话。

我们在Linux环境下安装了TinyOS。使用gdb/ddd调试BlinkTask应用的步骤如下。

1)编译欲调试的TinyOS应用程序,把将目标映像下载到节点上。

978-7-111-40722-5-Chapter09-11.jpg

注意,调试时上面的命令中要加debug参数。

输出信息:

978-7-111-40722-5-Chapter09-12.jpg

2)从互联网上下载msp430-gdbproxy。它是JTAG和gdb之间连接的桥梁。在msp430-gdbproxy文件存放的路径下输入:

978-7-111-40722-5-Chapter09-13.jpg

输出信息:(www.xing528.com)

978-7-111-40722-5-Chapter09-14.jpg

978-7-111-40722-5-Chapter09-15.jpg

3)建立新的终端,在应用程序二进制文件所在的目录下(apps/Tutorials/BlinkTask/build/telosb)输入:

978-7-111-40722-5-Chapter09-16.jpg

该命令启动ddd,使用msp430-gdb作为调试软件

ddd由三个主要的窗口构成。

●数据窗口:显示被调试程序的当前数据。

●源代码窗口:显示调试程序的源代码。

●调试控制台:输入调试命令,显示调试信息。

除了三个主要的窗口外,还有其他一些可选的窗口。

●命令工具:提供了经常使用的命令。

●机器码窗口:显示当前的机器码,通常在源代码窗口之下。

●执行窗口:显示调试程序的输入和输出。

启动ddd后,通过菜单栏的file→open source,打开BlinkTaskC文件,BlinkTaskC的源代码会显示在源代码窗口中。要在Timer0.fired处设置断点,只需要把鼠标移到源代码窗口中Timer0.fired所在的行,单击右键选择set breakpoint,就会在对应的行看到一个红色的stop标志,表示断点设置成功。要使程序运行到断点处,单击浮动命令工具的cont按键,经过一小段时间,在断点所在行出现一个小箭头,表示程序已运行到断点处。在工具栏中输入BlinkTaskC$state,单击Display就会在数据窗口中显示变量state的值。如图9-1所示。

978-7-111-40722-5-Chapter09-17.jpg

图9-1 ddd调试截图

(4)仿真环境下调试

TOSSIM是TinyOS传感器网络的离散事件仿真器,它为用户提供了一个可控制和可重复的调试、检验和分析代码的仿真环境。TOSSIM在PC环境上运行,用户可以通过gdb和其他的相关工具调试TinyOS代码。

TinyViz是TOSSIM的图形用户调试接口,它能够可视化地与TinyOS应用程序进行交互,更方便地跟踪TinyOS应用的执行。有关TOSSIM和TinyViz,有兴趣的读者可以阅读参考文献

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈