使用gdb调试linux下的程序解析.docVIP

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

文档评论(0)

1亿VIP精品文档

相关文档