在ubuntu纯字符gdb界面下来开发调试嵌入式ARM
前面一个帖子介绍了使用eclipse来开发STM32的固件,但有的时候使用Eclipse的GDB调试器会崩溃掉,反复这样造成我们开发的效率降低,信心也会受一打击。
最近接触到的许多源码,就是在linux下编译开发的,源码中显示他们并没有使用任何的IDE。
实际上在Linux中的开源软件,很可能几乎不会使用IDE环境,他们都很“原始”地采用文本的方式进行编写。可能,在Linux环境中,这才叫做原生态。
在此我打算不依赖于Eclipse等IDE工具去开始嵌入式开发,并将这些过程详尽地纪录下来。
主机系统:Ubuntu 12.04 LTS 32bit
交叉编译器:CodeSourcery
目标机:stm32w108
1 启动openocd
我使用的调试器为st-linkV2,与st-linkv2配套的软件在Ubuntu下没有的官方的支持,有爱好者开发了一个st-linkv2的调试服务器。在我这里使用于STM32F407时很不错,但用于我这块新的stm32w芯片时表现出一些问题来,估计是尚未支持到。所以我转而使用openocd(需要0.7版本)这个非常流行也是多数在Linux下做嵌入式开发人员的调试软件。
openocd在启动时需要指定使用哪一个调试接口(stlinkv2),再指定目标的MCU名(stm32w),这些输入每次都是一样的。为了方便,我做了一个sh文件,将启动命令复制进去。这样每次开始调试的时候执行一次这个脚本就可以了。
新建一个start_debug_stm32w108_with_stlinkv2.sh在openocd/share/openocd/scripts下面,然后使用
chmod +x start_debug_stm32w108_with_stlinkv2.sh
让该文件具有执行属性。
start_debug_stm32w108_with_stlinkv2.sh内容
openocd -f interface/stlink-v2.cfg -f target/stm32w108_stlink.cfg -c "init" -c "halt" -c "reset halt"
2 gdb自动执行初始化文件
想要gdb在启动时执行自己当前elf文件夹下的.gdbinit文件,还需要在~文件中有一个.gdbinit文件,里面的内容是:
add-auto-load-safe-path /home/merlin/projects/eclipseCppJuno/stm32w_gpio/Debug/.gdbinit
然后在自己的elf文件目录下面添加另外一个.gdbinit文件,里面写上自己想要在程序启动时的初始化命令即可,如:
target extended localhost:
load
set $pc = Reset_Handler
#break pre_main
break main
含义很明显
先连接到gdb服务器,openocd的正常使用服务器端口为3333(如果使用telnet测试的话是4444端口)
然后load加载程序到flash中
再把pc设置到Reset_Handler,这就是程序的开头(如果没有这个常常飞到不知所云的地方去,下图显示它到了0x08000088地址上了,而我的Reset_Handler是在0x08000199地址的)
最后在main开始的地方加一个断点
之后你应该看到这样的输出了:

使用backtrace命令(缩写bt)可以看到当前运行地址已经在了Reset_Handler上了。
1. 如何查看程序运行到哪一行了
bt命令可以看到当前线程已经运行到何处了

2. 多线程程序(fork分支程序)
info threads用于查看有多个线程在运行
thread x用于将线程切换到x号去
3. 从某函数中跳出来
使用finish命令
4 打印变量的值
打印为10进制数:
(gdb) p realAddress
$4 = 134481884
打印为16进制数:
(gdb) p/x realAddress
$5 = 0x80407dc
5 查看断点与删除断点
使用info breakpoints查看地断点
删除时使用delete n(n为查看地断点时GDB所打印出来的标记)

6 查看某地址上的数据(FLASH或者内存都可以)
x address

在ubuntu纯字符gdb界面下来开发调试嵌入式ARM的更多相关文章
- Ubuntu纯字符界面的一些设置
由于Ubuntu的纯字符界面不支持中文显示,所以进行了一些配置,为了更好的显示 1. 把环境语言配置为英文 在用户目录下的".bashrc"文件的结尾处添加以下内容,然后重新登录 ...
- Linux 纯字符界面的玩法
Linux 纯字符界面的用途 装逼必备 省资源,服务器一般不安装图形界面 图形界面崩溃后紧急救援 进入字符界面的正确方式 目前新的 Linux 发行版基本上都使用 Systemd 作为 init 程序 ...
- linux纯字符界面不支持中文
[2017-01-17] linux纯字符界面不支持中文
- Ubuntu下qemu环境搭建vexpress开发平台
在查找资料过程中,发现自己搭建虚拟的arm环境的话,有一个比较好的软件就是qemu了,当然还有其他的,大家各投所好就好. 接下来说一下qemu环境搭建过程. 其实搭建很简单,作为小白,我还是捣鼓了两三 ...
- 在Ubuntu下搭建ASP.NET 5开发环境
在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...
- 在Ubuntu下配置舒服的Python开发环境
Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的一个安装和配置步骤,基于 Ubuntu 12.0 ...
- 转[开发环境配置]在Ubuntu下配置舒服的Python开发环境
在Ubuntu下配置舒服的Python开发环境 Ubuntu 提供了一个良好的 Python 开发环境,但如果想使我们的开发效率最大化,还需要进行很多定制化的安装和配置.下面的是我们团队开发人员推荐的 ...
- Ubuntu 12.04 搭建 Eclipse Android 开发环境(转)
Ubuntu 12.04 搭建 Eclipse Android 开发环境 http://blog.sina.com.cn/s/blog_93dc666c0101b39p.html (2012-09-0 ...
- OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
/******************************************************************************************** * OK33 ...
随机推荐
- curl 要么 file_get_contents 获得授权页面的方法的必要性
今天,需要工作,需要使用 curl / file_get_contents 获得授权的必要性(Authorization)的页面内容.解决后写了这篇文章分享给大家. php curl 扩展,可以在se ...
- Xcode的小标记旁边的文件的名称的作用
这两天老板教我要注意Xcode该文件名以小标记权.例如: 这里的M就是Xcode中类名旁边的一个symbol.还有A,D等,这些标记用于显示当前文件和代码仓库中该文件对照后的状态: M = Local ...
- 网站的SEO以及它和站长工具的之间秘密(转)
博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...
- AsyncTask来源分析(一)
于android开发过程AsyncTask我会经常处理它.在网上,也有很多的其描述,因此,这里是不是说的用法,直接写自己的学习经验,以及它的一些浅显的认识,忘记错批评. AsyncTask它是一个抽象 ...
- 产品 线上 保持 和 支持 服务 (Support and maintenance solutions)
Maintenance and support are the key factors for the smooth functioning of ERP solutions. ERP mainten ...
- C++拷贝构造函数具体解释
一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是非常easy的,比如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各 ...
- 开源搜索引擎Iveely 0.8.0
开源搜索引擎Iveely 0.8.0 这是一篇博客,不是,这是一篇开源人的心酸和喜悦,没有人可以理解我们的心情,一路的辛酸一路的艰辛,不过还好,在大家的支持下,总算是终见天日,谢谢那些给予我们无私帮助 ...
- Android Wear 开发入门——怎样创建一个手机与可穿戴设备关联的通知(Notification)
创建通知 为了创建在手机与可穿戴设备中都能展现的通知,能够使用 NotificationCompat.Builder.通过该类创建的通知,系统会处理该通知是否展如今手机或者穿戴设备中. 导入必要的类库 ...
- 【百度地图API】如何制作可拖拽的沿道路测距
原文:[百度地图API]如何制作可拖拽的沿道路测距 摘要: 地图测距,大家都会,不就map.getDistance麼.可是,这只能测任意两点的直线距离,用途不够实际啊.比如,我想测试北京天安门到北京后 ...
- LSM树存储模型
----<大规模分布式存储系统:原理解析与架构实战>读书笔记 之前研究了Bitcask存储模型,今天来看看LSM存储模型,两者尽管同属于基于键值的日志型存储模型.可是Bitcask使用哈希 ...