Chinaunix首页 | 论坛 | 博客
  • 博客访问: 672980
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2019-03-06 14:11
个人简介

我,并不比别人差。

文章分类
文章存档

2021年(1)

2020年(2)

2019年(3)

我的朋友

分类: 嵌入式

2019-05-21 11:30:02

编译环境:
Ubuntu16.04 + gdb-7.9.1.tar.gz + ncurses-6.0.tar.gz

  传统的gdb调试是GDB+gdbserver,对于大型的嵌入式程序来说,这种方法效率过低,特别是追踪低概率的段错误时。并且对调试环境较高,有时候程序在客户手里或者测试部,不可能要求他们都装上同样开发环境等等。

  我们要做的只需要把gdb和执行程序拷贝到U盘,然后从U盘运行执行程序,挂机等待。问题复现时会有core文件产生,此时我们直接运行./gdb app core, 随后输入bt即可查看函数调用关系和死机位置,也可以进行其他的gdb命令操作,非常方便。

编写的Makefile可实现自动编译安装ncurese和gdb,只需修改这两个变量,根据你编译器和编译选项填入即可:
OSDRV_CROSS ?= arm-linux-gnueabihf
OSDRV_CROSS_CFLAGS ?= -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
然后执行make命令,如果提示某些命令找不到,请检查或安装即可,编译好后会生成一个gdb-xxx的执行文件,拷贝到你板子上直接运行即可。

点击(此处)折叠或打开

  1. TOOLS_TOP_DIR := $(shell pwd)
  2. #如果是其他版本,请修改TOOL_TAR_BALL和TOOL_TAR_BALL2,使其对应具体的程序包
  3. TOOL_TAR_BALL := gdb-7.9.1.tar.gz
  4. TOOL_TAR_BALL2 := ncurses-6.0.tar.gz
  5. TOOL_NAME := gdb-7.9.1
  6. TOOL_NAME2 := ncurses-6.0
  7. TOOL_BIN := ncur_release
  8. TOOL_BIN2 := gdb_release
  9. #填入你要交叉的编译器和编译参数
  10. OSDRV_CROSS ?= arm-linux-gnueabihf
  11. #OSDRV_CROSS_CFLAGS ?= -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
  12. all:
  13.     -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME) -rf;
  14.     -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME2) -rf;
  15.     tar -xf $(TOOL_TAR_BALL2);
  16.     mkdir -p $(TOOLS_TOP_DIR)/$(TOOL_BIN)/;
  17.     pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/; \
  18.         ./configure --host=$(OSDRV_CROSS) CFLAGS="$(OSDRV_CROSS_CFLAGS)" CPPFLAGS="-P" \
  19.         LDFLAGS="$(OSDRV_CROSS_CFLAGS)" --prefix=$(TOOLS_TOP_DIR)/$(TOOL_BIN)/; \
  20.         make -j > /dev/null; \
  21.         make install;\
  22.     popd;
  23.     tar -xf $(TOOL_TAR_BALL);
  24.     mkdir -p $(TOOLS_TOP_DIR)/$(TOOL_BIN)/;
  25.     pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME)/; \
  26.         ./configure --host=$(OSDRV_CROSS) CFLAGS="$(OSDRV_CROSS_CFLAGS) -lm"\
  27.         LDFLAGS="$(OSDRV_CROSS_CFLAGS)" --disable-tui\
  28.         LDFLAGS=-L$(TOOLS_TOP_DIR)/$(TOOL_BIN)/lib --prefix=$(TOOLS_TOP_DIR)/$(TOOL_BIN2); gdb_cv_prfpregset_t_broken=no \
  29.         make -j > /dev/null; \
  30.         make install;\
  31.     popd;
  32.     cp $(TOOLS_TOP_DIR)/$(TOOL_NAME)/gdb/gdb $(TOOLS_TOP_DIR)/gdb-$(OSDRV_CROSS) -rf; \

  33. .PHONY: clean
  34. clean:
  35.     -pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME)/ &&\
  36.     make -C $(TOOLS_TOP_DIR)/$(TOOL_NAME)/ clean && \
  37.     popd
  38.     -pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/ &&\
  39.     make -C $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/ clean && \
  40.     popd

  41. .PHONY: distclean
  42. distclean:
  43.     -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME) -rf;
  44.     -rm $(TOOLS_TOP_DIR)/$(TOOL_NAME2) -rf;
  45.     -rm $(TOOLS_TOP_DIR)/$(TOOL_BIN) -rf;
  46.     -rm $(TOOLS_TOP_DIR)/$(TOOL_BIN2) -rf;
  47.     -rm $(TOOLS_TOP_DIR)/gdb-$(OSDRV_CROSS) -rf;

如果需要编译其他版本,下载地址如下,并修改一下Makefile对应的文件名称即可,非常简单。
ncurses下载地址:http://linux.softpedia.com/get/Programming/Libraries/Ncurses-6097.shtml#download
gdb下载地址:
阅读(2367) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~