1 / 17
使用GDB调试Linux应用程序
版本:
2009-04
.29
文档创建。
使用GDB调试Linux应用程序
Team MCUZone 本文演示使用GDB调试本站AR1 / 17
使用GDB调试Linux应用程序
版本:
2009-04
.29
文档创建。
使用GDB调试Linux应用程序
Team MCUZone 本文演示使用GDB调试本站ARM开发板上的Linux应用程序的过程。包含源程序编译,GDB,DDD,insight的使用。调试器与开发板使用网络连接。。
2 / 17
一,准备工作
1.在开发板上建立Linux运行环境
启动。
制作根
的
3 / 17
使用如下命令编译:
注意其中的-g参数,指明生成debug信息。
将生成的dbgtst文件复制到rootfs的目录下,比如/usr/testapp。
启动开发板,以NFS方式mount根文件系统(rootfs。
.,Linux .。
三,使用GDB
从arm-none-linux-gnueabi的工具链相应目录下复制gdbserver到开发板:
4 / 17
将其放到开发板的/usr/bin下:
在开发板上运行gdbserver:
此时gdbserver将在2345端口等待远端连接。
切换到Linux server上,运行arm-none-linux-gnueabi-gdb:
5 / 17
通过arm-none-linux-gnueabi-gdb dbgtst启动命令行调试器,在(gdb提示符下运行
命令target remote :2345将连接到开发板的gdbserver,下面就可以用gdb 的命令开始调试。
例如l命令列出源代码:
使用b命令设置断点:
6 / 17
使用c运行程序:
再次设置断点:
使用n单步运行:
7 / 17
使用p打印变量:
由于优化的原因,不是所有的变量都可以通过p查看。
调试结束,通过disconnect断开gdbserver的连接,停止调试,并使用q退出gdb:
开发板上的gdbserver也有相应提示:
在命令行下,也可以使用arm-none-linux-gnueabi-gdbtui,
8 / 17
运行起来后如下图:
窗口上方会有代码的显示,下面仍然是命令行方式操作。比纯命令行稍有改进,该方式可以显示代码运行的位置:
9 / 17
调试过程中被调试程序在开发板上也有相应的输出:
调试完成需要断开连接。
四,使用DDD
如果觉得命令行界面不是很方便,也可以选择DDD这个前端。
10 / 17
首先需要在宿组机上安装DDD,
输入Y或者直接回车,即可开始从网络安装。
安装完成:
输入ddd开始运行:
11 / 17
上方显示源代码,最下面是命令行。在命令行输入:
连接到开发板上等待连接的gdbserver。连接上后,可以用图形方式设置断点:
使用命令按钮控制代码运行:
12 / 17
代码运行如下图:
调试完成断开连接。
五,使用insight
如果觉得DDD的界面仍然不OK,可以使用insight。
13 / 17
展开insight源码后,使用下面命令配置:
编译获得的可执行文件:
直接运行arm-none-linux-gnueabi-insight:
14 / 17
配置target:
此时需要使得远端的gdbserver处于等待连接的状态。
使用file下的open命令打开调试文件:
15 / 17
使用Run下的命令连接到target:
成功连接:
16 / 17
点击代码左侧短横线可以设置断点,并可以打开寄存器和变量查看窗口:
使用工具栏上的调试控制按钮可以控制程序的运行,使用右侧的下拉栏,可以选择代码查看的方式。
17 / 17
调试完成使用Run里的命令断开连接即可。
六,总结
比较上面的几种调试方式,可以看见insight的界面最为友好,而gdb对系统的依赖最低,无需图形界面的支持。
七,一些事项
本文并没有描述GDB的命令,在以上三种调试方式下均可以使用GDB命令。
使用gdb调试linux下的程序解析 来自淘豆网m.daumloan.com转载请标明出处.