arm gdb调试简述

arm gdb调试简述

编译、调试工具和平台

gcc-arm-none-eabi gdb-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模拟发生的情况,在真实的板子上会不会直接崩溃,我还没试验。
posted @ 2017-10-01 04:36  hongxing  阅读(960)  评论(0编辑  收藏  举报