编译环境:
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的执行文件,拷贝到你板子上直接运行即可。
-
TOOLS_TOP_DIR := $(shell pwd)
-
#如果是其他版本,请修改TOOL_TAR_BALL和TOOL_TAR_BALL2,使其对应具体的程序包
-
TOOL_TAR_BALL := gdb-7.9.1.tar.gz
-
TOOL_TAR_BALL2 := ncurses-6.0.tar.gz
-
TOOL_NAME := gdb-7.9.1
-
TOOL_NAME2 := ncurses-6.0
-
TOOL_BIN := ncur_release
-
TOOL_BIN2 := gdb_release
-
#填入你要交叉的编译器和编译参数
-
OSDRV_CROSS ?= arm-linux-gnueabihf
-
#OSDRV_CROSS_CFLAGS ?= -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
-
all:
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_NAME) -rf;
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_NAME2) -rf;
-
tar -xf $(TOOL_TAR_BALL2);
-
mkdir -p $(TOOLS_TOP_DIR)/$(TOOL_BIN)/;
-
pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/; \
-
./configure --host=$(OSDRV_CROSS) CFLAGS="$(OSDRV_CROSS_CFLAGS)" CPPFLAGS="-P" \
-
LDFLAGS="$(OSDRV_CROSS_CFLAGS)" --prefix=$(TOOLS_TOP_DIR)/$(TOOL_BIN)/; \
-
make -j > /dev/null; \
-
make install;\
-
popd;
-
tar -xf $(TOOL_TAR_BALL);
-
mkdir -p $(TOOLS_TOP_DIR)/$(TOOL_BIN)/;
-
pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME)/; \
-
./configure --host=$(OSDRV_CROSS) CFLAGS="$(OSDRV_CROSS_CFLAGS) -lm"\
-
LDFLAGS="$(OSDRV_CROSS_CFLAGS)" --disable-tui\
-
LDFLAGS=-L$(TOOLS_TOP_DIR)/$(TOOL_BIN)/lib --prefix=$(TOOLS_TOP_DIR)/$(TOOL_BIN2); gdb_cv_prfpregset_t_broken=no \
-
make -j > /dev/null; \
-
make install;\
-
popd;
-
cp $(TOOLS_TOP_DIR)/$(TOOL_NAME)/gdb/gdb $(TOOLS_TOP_DIR)/gdb-$(OSDRV_CROSS) -rf; \
-
-
.PHONY: clean
-
clean:
-
-pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME)/ &&\
-
make -C $(TOOLS_TOP_DIR)/$(TOOL_NAME)/ clean && \
-
popd
-
-pushd $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/ &&\
-
make -C $(TOOLS_TOP_DIR)/$(TOOL_NAME2)/ clean && \
-
popd
-
-
.PHONY: distclean
-
distclean:
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_NAME) -rf;
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_NAME2) -rf;
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_BIN) -rf;
-
-rm $(TOOLS_TOP_DIR)/$(TOOL_BIN2) -rf;
-
-rm $(TOOLS_TOP_DIR)/gdb-$(OSDRV_CROSS) -rf;
如果需要编译其他版本,下载地址如下,并修改一下Makefile对应的文件名称即可,非常简单。
ncurses下载地址:http://linux.softpedia.com/get/Programming/Libraries/Ncurses-6097.shtml#download
gdb下载地址:
阅读(2474) | 评论(0) | 转发(0) |