使用 CodeLLDB 调试使用 Neovim 中的 Makefile 和 DAP 构建的 Raylib 5.0 C++ 代码时,断点被跳过

问题描述 投票:0回答:1

我目前正在使用 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 有问题?

debugging makefile neovim raylib
1个回答
0
投票

我通过简单地使用 CMake 生成构建类型等于 debug 的 Makefile 来解决它。通过在 CMake 中编写此行:

set(CMAKE_BUILD_TYPE Debug)

© www.soinside.com 2019 - 2024. All rights reserved.