Как настроить GDB при компиляции с использованием makefile? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь скомпилировать свой проект для отладки, используя Makefile. В настоящий момент make-файл генерирует несколько разных объектных файлов, а затем компилирует один исполняемый файл из всех этих разных объектных файлов. Файл make выглядит следующим образом:

CC=gcc

Scheduler: scheduler-exec.o scheduler-impl.o lab5_linkedlist.o lab5_queue.o
        $(CC) -o Scheduler scheduler-impl.o scheduler-exec.o lab5_linkedlist.o lab5_queue.o

scheduler-exec.o: scheduler-exec.c
        $(CC) -c -o scheduler-exec.o scheduler-exec.c

scheduler-impl.o: scheduler-impl.c
        $(CC) -c -o scheduler-impl.o scheduler-impl.c

queue.o: lab5_queue.c
        $(CC) -c -o lab5_queue.o lab5_queue.c

linkedlist.o: lab5_linkedlist.c
        $(CC) -c -o lab5_linkedlist.o lab5_linkedlist.c

clean:
        rm *.o 

Я бы хотел сохранить эту распределенную систему компиляции так, чтобы я генерировал эти разные объектные файлы и затем компилировал их вместе, используя задачу Scheduler в Makefile. Я попытался добавить флаг -g ко всем задачам, но когда я запустил gdb на сгенерированном исполняемом файле Scheduler, он все еще не имел отладочной информации. Вывод программы gdb такой:

GNU gdb (GDB) 8.3
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin18.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from Scheduler...
--Type <RET> for more, q to quit, c to continue without paging--

, и программа просто застряла там. Я был бы признателен за метод, с помощью которого я могу скомпилировать эту программу, используя Makefile, и иметь возможность получать информацию о переменных. Спасибо

Я попробовал следующий make-файл, он не работал:

CC=gcc

Scheduler: scheduler-exec.o scheduler-impl.o lab5_linkedlist.o lab5_queue.o
        $(CC) -o Scheduler scheduler-impl.o scheduler-exec.o lab5_linkedlist.o lab5_queue.o -g

scheduler-exec.o: scheduler-exec.c
        $(CC) -c -o scheduler-exec.o scheduler-exec.c -g

scheduler-impl.o: scheduler-impl.c
        $(CC) -c -o scheduler-impl.o scheduler-impl.c -g

queue.o: lab5_queue.c
        $(CC) -c -o lab5_queue.o lab5_queue.c -g

linkedlist.o: lab5_linkedlist.c
        $(CC) -c -o lab5_linkedlist.o lab5_linkedlist.c -g

clean:
        rm *.o 

1 Ответ

2 голосов
/ 17 октября 2019

Удалите большинство ваших правил и вместо этого используйте встроенные правила:

CC := gcc
CFLAGS += -g
CFLAGS += -Wall -Wextra -Wwrite-strings -Wno-parentheses -Wpedantic -Warray-bounds

Scheduler: scheduler-exec.o scheduler-impl.o lab5_linkedlist.o lab5_queue.o
        $(LINK.c) $^ $(LDLIBS) -o $@

clean:
        rm *.o

Это все, что вам нужно. Теперь восстановите все (make -B). Вы можете проверить наличие отладочной информации:

$ file Scheduler

Вывод будет выглядеть примерно так:

Планировщик: ELF 64-битный исполняемый круговой файл LSB, x86-64, версия 1 (SYSV), динамически связанный, интерпретатор /lib64/ld-linux-x86-64.so.2, BuildID [sha1] = 5812e87410be09796cfed309a265dbcff1cf5d5e, для GNU / Linux 3.2.0, с debug_info, без удаления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...