2016-04-15 6 views
-1

Я хочу использовать gdb для отладки программы. Когда я использую b lib.c:FUNCTION, чтобы установить точку останова в lib.c, GDB игнорирует точки останова:Как использовать GDB для отладки файлов зависимостей?

Breakpoint 1 at 0x8048d03: file lib.c, line 120. 
(gdb) run 
Starting program: /home/jharvard/Dropbox/project/macro_main 
usage: output file in rows of INT, INT, A or D 
i.e. ./macro_main in/data_1 
[Inferior 1 (process 14766) exited with code 01] 

Я думаю, что может быть что-то не так с Makefile. Как я могу это исправить?

CC?=gcc 
CFLAGS+= -g -Wall 
LDFLAGS= 
LIBS = -lm 

macro_main: macro_main.o lsm.o lib.o level.o 
    $(CC) $(LDFLAGS) -o [email protected] $^ $(LIBS) 

%.o: %.c 
    $(CC) $(CFLAGS) -c -o [email protected] $^ 

clean: 
    rm -rf *.o macro_main 

Редактировать: ниже - это то, что я получаю. Подозрительная нота - Make breakpoint pending on future shared library load? (y or [n]) y. Кажется, что в Makefile что-то неправильно не связано.

me (~/Dropbox/project): make 
make: Warning: File `Makefile' has modification time 1.7e+06 s in the future 
clang -Wall -c -o macro_main.o macro_main.c 
clang -Wall -c -o lsm.o lsm.c 
clang -Wall -c -o lib.o lib.c 
clang -Wall -c -o level.o level.c 
gcc -o macro_main macro_main.o lsm.o lib.o level.o -lm 
make: warning: Clock skew detected. Your build may be incomplete. 
me (~/Dropbox/project): gdb ./macro_main in/data_1 
Reading symbols from ./macro_main...(no debugging symbols found)...done. 
"/home/me/Dropbox/project/in/data_1" is not a core dump: File format not recognized 
(gdb) b main 
Breakpoint 1 at 0x8048685 
(gdb) run 
Starting program: /home/me/Dropbox/project/macro_main 

Breakpoint 1, 0x08048685 in main() 
(gdb) b lib.c:lsm_merge 
No source file named lib.c. 
Make breakpoint pending on future shared library load? (y or [n]) y 

Breakpoint 2 (lib.c:lsm_merge) pending. 

(gdb) continue 
Continuing. 
usage: output file in rows of INT, INT, A or D 
i.e. ./macro_main in/data_1 
[Inferior 1 (process 16156) exited with code 01] 
+1

Вы уверены, что программа никогда не вызывает эту функцию? – immibis

+0

Как gdb нуждаются в файлах зависимостей? Это может вызвать проблемы с инструментами построения, такими как Scons, которые им даже не нужны. – Olaf

+0

Да, когда я запускаю './macro_main in/data_1', он запускает содержимое' printf' в функции. – Pippi

ответ

0

Наконец, ниже работает для меня:

CFLAGS = -std=c99 -Wall -g -ggdb -O0 
LIBS = -lm 

macro_main: macro_main.o lsm.o lib.o level.o 
    gcc $(CFLAGS) -o [email protected] $^ $(LIBS) 


macro_main.o: macro_main.c 
    gcc $(CFLAGS) -c macro_main.c 

lsm.o: lsm.c 
    gcc $(CFLAGS) -c lsm.c 

lib.o: lib.c 
    gcc $(CFLAGS) -c lib.c 

level.o: level.c 
    gcc $(CFLAGS) -c level.c 

clean: 
    rm -rf *.o macro_main 
Смежные вопросы