写了一个工程,有好几个文件,出了一点问题,找不到原因,只能调试,但是在调试的时候也碰到了各种问题,现在记录在这篇博客里面,也为后面的人带来更多的帮助。
首先是这个问题:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1
gdb调试提示:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.......
但是按照大多数的教程做下来,安装各种库 还是会出现这种情况
怎么办?
主要原因是gcc版本太高,gdb版本太低,升级以下gdb版本就好了。
1.下载源码包:
wget http://ftp.nluug.nl/gnu/gdb/gdb-7.8.2.tar.gz
2.解压源码包:
tar -zxvf gdb-7.8.2.tar.gz
3../configure
4. make
如果提示缺少一个库:configure: error: no termcap library found
5.下载termcap库源码:
wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
6.编译安装termcap库:
./configure
make
make install
7.重新跳到gdb源码目录编译安装:
./config
make
make install
注意:默认安装在/usr/local/bin目录下,后面自己改环境变量就可以直接用了。
8 发现还是老版本7.2 怎么办
查了下GDB的默认安装目录是/usr/loca/bin,export命令查看了下我机器默认的环境变量是/usr/bin,于是备份旧版本的gdb程序后,将usr/loca/bin下新的gdb可执行程序复制过去。gdb -v终于显示版本7.8。调试一下程序,原来的bug不见了。
然后又碰到了这个问题:
gdb Single stepping until exit from function main
这个原因是需要调试函数在编译的时候没有加入-g选项,加上后即可,如果是使用makefile编译的,需要编译很多文件,像我这样的,则在CFLAGS 后加上-g, 并且在生成可执行程序的时候也加上-g即可,就像下面的那样。
BIN = wcamsrv
INC = -Iinclude/
SRC = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o,$(SRC))
CC = gcc
CFLAGS = $(INC) -g
$(BIN):$(OBJS)
$(CC) -o $@ $^ -g #-lavformat -lavdevice -lavcodec
clean:
rm $(OBJS) $(BIN)