arm gdb调试简述

摘要:
armgdb调试概述编译、调试工具和平台gcc arm无eabigdb arm无eabi,ubantu64 64位;在互联网上,许多开发人员和董事会使用nfs或通过串行端口进行调试;这里我们使用qemu的gnuar eclipse来模拟stm32f429板。运行qemu,qemu system gnuarmeclipse--verbose--verbose-boardSTM32F429I Discovery--mcuSTM32F429ZI--gdbtcp::1234-S-dump,guest_errors--image your ELF file ELF--semihosting configenable=on,target=native--semihhosting-cmdlinehello_如果未为rtos123设置PATH,则命令应使用绝对路径。qemu启动后,等待来自gdb的调试指令,打开另一个终端窗口,运行arm none-eabi-gdbELF文件绝对路径或使用命令fileELF文件的绝对路径,并在gdb接口中运行它:targetremotelocalhost:1234。接下来,我们进入gdb调试命令的阶段。互联网上有很多博客。我们尝试了几个命令,并简单地调试了程序b、c、n、显示变量名。
arm gdb调试简述

编译、调试工具和平台

gcc-arm-none-eabigdb-arm-none-eabi,ubantu64位;网上有很多用nfs或者通过串口连接开发机和板子进行调试;这里用qemu的gnuarmeclipse模拟stm32f429的板子。

步骤

  • 先在你的Makeflie的编译加上-g,这样生成的ELF文件里才有调试信息,否则只有地址,看不到在源码里的位置。
  • 运行qemu,qemu-system-gnuarmeclipse --verbose --verbose --board STM32F429I-Discovery --mcu STM32F429ZI --gdb tcp::1234 -S -d unimp,guest_errors --image 你的ELF文件.elf --semihosting-config enable=on,target=native --semihosting-cmdline hello_rtos 1 2 3如果没有设置PATH,命令要用绝对路径。
  • qemu启动后等待来自gdb的调试指令,打开另外一个终端窗口,运行arm-none-eabi-gdb ELF文件绝对路径或者再用一个命令file ELF文件绝对路径,在gdb界面内运行:(gdb)target remote localhost:1234
  • 接下来,就进入gdb调试命令的阶段,网上有很多博客,试了几个命令,简单调试了程序,b,c,n,display 变量名。

在改作业发现的一个问题

  • 很多同学用xQueueCreate创建队列,队列大小很大,然而板子内存有限,故而申请失败,应该只涉及到队列创建失败;但是很多同学疑惑,为什么我和别人写的一样,编译通过,我却灯不亮;进而,我想到是不是一开始就计数错误导致不满足条件;然后就把monitor的其他语句都注释掉,只留下green_led_on();发现灯还是不亮,后面也注意到队列大小值取的太大,但是应该只影响队列失败,而影响不到green_led_on();,后来有一位同学说,他把队列大小改小,灯就亮了。我的直觉是这之间是没有关系,但是我还是试了试,发现果然亮了,于是才想到用gdb调试看看,但是一设置断点,continue,发现就卡死在哪里不动,调试不了,就和程序运行一样直接卡死没反应;我想到这可能类似我在window是开发控制台程序时,当给一个程序不能处理的值,会弹出exe崩溃的对话框,可是linux不是,就卡死在这里。我只能这样想到,队列创建失败导致程序崩溃。或许这只是qemu模拟发生的情况,在真实的板子上会不会直接崩溃,我还没试验。

免责声明:文章转载自《arm gdb调试简述》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ligerUI框架[WorldWind学习]8.Cache对象下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何调试程序的 Release 版本

很多时候程序的 Debug 版本运行没有任何问题,但是一旦发布 Release 版本后,运行就出错,着实让人郁闷。大家知道,VC++ 中 Release 版本是对无法对源代码进行调试的。一般的做法是在怀疑有错误的代码前后插入MessageBox 函数,在函数中显示可能导致错误的变量的值。或者插入写文件的语句,输出可能导致错误的变量的值到一个记录文件。其实,...

Arm设计思想与高效C语言编程联系

一.RISC设计思想 ARM内核采用RISC体系结构。RISC是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行,简单而有效的指令集。RISC的设计重点在于由硬件执行的指令的复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。因此,RISC设计对编译器有更高的要求;相反,传统的复杂指令集的计算机(CISC)则更侧重于硬件执行指令的功能性,...

交叉编译工具链的安装

一、参考网址   1. Ubuntu18.04使用x86(32位)交叉编译工具链   2. error while loading shared libraries: libstdc++.so.6 二、实践   1. 安装交叉编译器arm-linux-gcc-3.3.2     1.1 下载arm-linux-gcc-3.3.2.tar.bz2 到任意的目录...

.NET疯狂架构经验分享系列之(七)WCF支持(转)

本文只做入门参考用,WCF服务器端注意事项 1:WCF服务器端配置文件如何写很关键、例如多个服务怎么一同发布? 2:如何用最简单的程序,把WCF服务器发布好? 3:配置文件如何配置,客户端才能正常引用已发布的服务? 其实这3个问题,是服务器端编写程序的核心关键问题,这解决了,就算是好入门了,接着可以深入某个问题了。 工程的效果图如下: 以下程序是启动W...

Mac 使用androidStudio真机调试android机

对于第一次想在mac上的androidStudio上真机调试。 1.首先配置adb环境变量 2.创建(修改) adb_usb.ini 文件 a.手机数据线连接 b.在终端输入,查看设备信息 system_profiler SPUSBDataType 打印如下 记住上面标红的。 c.终端输入 vi ~/.android/adb_usb.ini 编辑该文件,...

VC6.0设置选项解读(转)

其实软件调试还是一个技术熟练过程,得慢慢自己总结,可以去搜索引擎查找一些相关的文章看看,下边是一篇关于VC6使用的小文章,贴出来大家看看: 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这...