![](/img/trans.png)
[英]makefile flags for debugging (needs symbolic information) -g flag didn't work
[英]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.