我目前正在使用 Raylib 5.0 开发一个 C++ 项目,并使用 Makefile 构建它。我使用 Neovim,使用 DAP 和 DAP UI 进行调试,并使用 CodeLLDB 作为调试器。但是,我有一个问题,我的断点总是被拒绝,并且调试器不会在断点处停止。执行 dap continue 函数启动调试器后,B(断点符号)更改为 R(拒绝)
注意:我知道 BUILD_MODE 设置为 RELEASE 但这不是问题,因为我确实设置了 -g 标志。我也尝试使用调试模式和相同的结果。
这是我的 Makefile:
.PHONY: all clean
# Define required raylib variables
PROJECT_NAME ?= game
RAYLIB_VERSION ?= 5.0
RAYLIB_PATH ?= C:\raylib\raylib
# Define compiler path on Windows
COMPILER_PATH ?= C:/raylib/w64devkit/bin
PLATFORM ?= PLATFORM_DESKTOP
DESTDIR ?= /usr/local
RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
RAYLIB_LIBTYPE ?= STATIC
BUILD_MODE ?= RELEASE
USE_EXTERNAL_GLFW ?= FALSE
USE_WAYLAND_DISPLAY ?= FALSE
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(OS),Windows_NT)
PLATFORM_OS=WINDOWS
export PATH := $(COMPILER_PATH):$(PATH)
endif
endif
RAYLIB_RELEASE_PATH ?= $(RAYLIB_PATH)/src
EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH)
CC = g++
MAKE = mingw32-make
CFLAGS += -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces
ifeq ($(BUILD_MODE),DEBUG)
CFLAGS += -g -O0
else
CFLAGS += -s -O1
endif
LDFLAGS = -L.
ifneq ($(wildcard $(RAYLIB_RELEASE_PATH)/.*),)
LDFLAGS += -L$(RAYLIB_RELEASE_PATH)
endif
ifneq ($(wildcard $(RAYLIB_PATH)/src/.*),)
LDFLAGS += -L$(RAYLIB_PATH)/src
endif
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
endif
endif
SRC_DIR = src
OBJ_DIR = obj
SRCS = $(wildcard src/*.cpp)
OBJS = $(SRCS:.cpp=.o)
all: $(PROJECT_NAME)
$(PROJECT_NAME): $(OBJS)
$(CC) $(CFLAGS) $(RAYLIB_PATH)/src/raylib.rc.data -o $(PROJECT_NAME) $(OBJS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
%.o: %.cpp
$(CC) $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -c $< -o $@
clean:
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
ifeq ($(PLATFORM_OS),WINDOWS)
del *.o *.exe /s
endif
endif
@echo Cleaning done
这是
make
命令的输出:
PS C:\Users\userx\OneDrive\Documents\Development\C++\raylib-test> make
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/Game.cpp -o src/Game.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/GameObject.cpp -o src/GameObject.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/Map.cpp -o src/Map.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/Player.cpp -o src/Player.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/Vector2D.cpp -o src/Vector2D.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 -DPLATFORM_DESKTOP -c src/main.cpp -o src/main.o
g++ -g -Wall -std=c++14 -D_DEFAULT_SOURCE -Wno-missing-braces -s -O1 C:\raylib\raylib/src/raylib.rc.data -o game src/Game.o src/GameObject.o src/Map.o src/Player.o src/Vector2D.o src/main.o -L. -LC:\raylib\raylib/src -LC:\raylib\raylib/src -lraylib -lopengl32 -lgdi32 -lwinmm -DPLATFORM_DESKTOP
这是我的源代码的主文件:
#include "raylib.h"
#include "Game.hpp"
int main(void)
const int screenWidth = 1024; //breakpoint here (just to test)
const int screenHeight = 512;
Game *game=new Game();
game->init((char *)"RAYCAST", screenWidth, screenHeight);
SetTargetFPS(60);
while (!WindowShouldClose())
{
game->update();
game->render();
}
CloseWindow();
return 0;
}
我不确定为什么断点不起作用。我在 makefile 中做错什么导致了这个问题吗?或者是什么 ? 任何帮助将不胜感激。 谢谢!
我尝试了带有两个 .cpp 文件和一个 .hpp 文件的简单 C++ 项目的调试器。我用 Makefile 构建了它,并且调试器可以工作(在断点处停止)。那么也许是我的 Makefile 有问题?
我通过简单地使用 CMake 生成构建类型等于 debug 的 Makefile 来解决它。通过在 CMake 中编写此行:
set(CMAKE_BUILD_TYPE Debug)