身为程序员,Debug是少不了的。本文简单介绍一下在Linux下如果调试,如有错误请及时纠正。
1、Linux下调试静态库
静态库,以.a形式链接进主程序,其Makefile文件如下所示:
#makefile
CC=gcc
CXX=g++
RM=rm -f
CPPFLAGS=-g
LDFLAGS=-g
LDLIBS=-lfunctions
AR=ar
SRCS=main.cpp functions.cpp
OBJS=$(subst .cpp,.o,$(SRCS))
all: main
main: $(OBJS) libfunctions.a
$(CXX) $(CPPFLAGS) -o main $(OBJS) -L. $(LDLIBS)
main.o: main.cpp functions.h testobj.h
functions.o: functions.h functions.cpp
clean: $(RM) $(OBJS)
all-clean: clean $(RM) main
上述makefile文件,将functions相关部分编译打包成一个.a文件,并在最后链接进主程序。libfunctions.a由functions.o生成,具体过程可自行搜索Makefile语法及编译过程了解。
2、Linux下调试动态库
以下是动态库调试的Makefile文件
CC=gcc
CFLAGS=-g
LDLIBS=libex.so
AR=ar
SRCS=main.c exlib.c
OBJS=main.o
all:main
main:$(OBJS) LDLIBS
$(CC) $(CFLAGS) -o main $(OBJS) -L . $(LDLIBS)
main.o:main.c exlib.c exlib.h
LDLIBS:exlib.o
$(CC) -shared -o $@ $^
exlib.o:exlib.c exlib.h
$(CC) -fPIC -g $^ -o $@
clean:
$(RM) $(OBJS) main
无论是动态库或者静态库,本质都是在库文件中加入了调试信息,如代码位置,行号等信息,这些信息被gdb捕捉后进行相应的动作。