- 论坛徽章:
- 0
|
由于GDB的调试教程中都是关于单个.c文件的调试.对于多个.c文件构成的项目调试却是很少涉及.所以本人将自己写的一个socket通讯程序分成两个.c文件分别是main.c,和sys_utility.c文件.以及头文件sy_utility.h.调试如下:
# gcc -c main.c -g
# gcc -v sys_utility.c -g
# gcc -o test main.o sys_utility.o
这样,命令执行完毕,产生test文件.然后通过gdb test.可以正常调试.但是将上述方法调试vsftp源程序时,却不能正常调试.该程序的makefile文件如下:
# Makefile for systems with GNU tools
CC = gcc
INSTALL = install
IFLAGS = -idirafter dummyinc
CFLAGS = -g
#CFLAGS = -O2 -Wall -W -Wshadow #-pedantic -Werror -Wconversion
LIBS = `./vsf_findlibs.sh`
LINK = -Wl,-s
OBJS = main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o
tunables.o ftpdataio.o secbuf.o ls.o
postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o
banner.o filestr.o parseconf.o secutil.o
ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o
tcpwrap.o ipv6parse.o access.o
sysutil.o sysdeputil.o
.c.o:
$(CC) -c $*.c $(CFLAGS) $(IFLAGS)
vsftpd: $(OBJS)
$(CC) -o vsftpd $(OBJS) $(LINK) $(LIBS)
install:
if [ -x /usr/local/sbin ]; then
$(INSTALL) -m 755 vsftpd /usr/local/sbin/vsftpd;
else
$(INSTALL) -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/local/man ]; then
$(INSTALL) -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8;
$(INSTALL) -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5;
elif [ -x /usr/share/man ]; then
$(INSTALL) -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8;
$(INSTALL) -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5;
else
$(INSTALL) -m 644 vsftpd.8 /usr/man/man8/vsftpd.8;
$(INSTALL) -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
if [ -x /etc/xinetd.d ]; then
$(INSTALL) -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
clean:
rm -f *.o *.swp vsftpd
我对比了该makefile中的命令和我上面测试用的命令基本无异,我输入gdb vsftpd时,正常进入,但当我输入"l"列出源程序时,却提示"No symbol table is loaded. Use the "file" command.".应该是符号表信息存在问题.请问,问题是出在什么地方? |
|