簡體   English   中英

Makefile 不使用 -g 標志生成調試信息

[英]Makefile not generating debugging information with -g flag

我最近從在終端工作到 VScode,並且需要生成調試信息以與 vscode 中的調試器一起使用。

我的 makefile 是:

SRCS =  src/ft_argcheck.c       \
        src/ft_operations.c     \
        src/ft_stcutils.c       \
        src/push_swap.c

NAME    = push_swap
INCS    = inc/push_swap.h
OBJS    = $(SRCS:c=o)
CC      = gcc
CFLAGS  = -g -Wall -Wextra -Werror
RM      = rm -f
LIBFT = libft/libft.a
LIBFT_DIR = libft

.PHONY: all bonus clean fclean re

all: $(NAME)

$(NAME): $(OBJS)
    @make -C $(LIBFT_DIR) --silent
    @$(CC) $(CFLAGS) -I$(INCS) -o $(NAME) $(OBJS) -L $(LIBFT_DIR) -lft

clean:
    @$(RM) $(OBJS)
    @make -s clean -C $(LIBFT_DIR)

fclean: clean
    @$(RM) $(NAME)
    @make -s fclean -C $(LIBFT_DIR)

re: fclean all

但是盡管添加了 -g 標志,但不會生成任何調試信息。 我可以在其上運行 lldb。

一個好的建議是刪除命令名稱前面的@ s,以查看make正在執行的命令......為了使程序可調試,您需要檢查所有編譯步驟是否使用-g標志完成,並且鏈接步驟還包括-g標志。 另外一個不錯的選擇是不指定優化,這樣您就不會遇到無法修復的斷點問題,因為編譯器已經消除或更改了最終代碼,並且破壞了源代碼行和代碼中的點之間的對應關系。

如果你去掉那里的所有@ s,你會看到make正在執行它們的命令,認為你現在看不到。 我認為有一個命令(berkeley make 有它)讓make打印命令,即使@ s 仍然存在。

順便說一句,正如您所說的,您正在使用vscode ,如果您單獨在命令行上執行make應該沒問題,以查看命令的 output,並嘗試查看是否是 make 或 vscode 本身的問題。

由於您沒有提供完整的項目,我很遺憾地說我只能用啞/假文件測試它,並且沒有任何程序可以用 gdb 測試它。

我想問題是您將項目源代碼放在與構建程序的目錄不同的目錄中,並且 gdb 找不到源代碼,因此無法進行源代碼調試,因為 gdb 找不到源文件。 Gdb 有一些方法可以指定源文件的路徑...您應該查看 gdb 文檔。

感謝您的所有回答(刪除 @ 並沒有真正給我更多信息,因為它確實顯示了 -g 標志,我已經嘗試使用 fclean 重新制作所有內容)。 在朋友的幫助下,我似乎找到了一個簡單的解決方法:

添加規則“調試”

debug: 
    $(CC) -g $(CFLAGS) -I$(INCS) $(LIBFT) $(SRCS) -o $(NAME)

我們可以在我們想要生成調試信息時運行它並直接使用 $(SRCS) 運行它,而不是像在正常命令中那樣在 $(OBJS) 上運行它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM