clang : в настройках отладчика VS Code не отображаются переменные

#c #vscode-debugger

#c #vscode-debugger

Вопрос:

Проблема: отладка не показывает переменные в среде разработки VS Code. Возможно, LLDB не подключается должным образом.

Мой проект на c скомпилирован и запущен с помощью Makefile. Я связываю Makefile с задачами.json и launch.json для реализации отладки в IDE. До сих пор мне не удалось успешно связать отладчик. При добавлении «miDebuggerPath» код успешно создает исполняемый файл, но не запускается.

Я предполагаю, что LLDB не удалось подключиться. Я проверяю путь к LLDB, и он действительно правильный. В чем может быть проблема здесь?

В tasks.json:

 {
    "tasks": [
        {
            "type": "shell",
            "label": "cd Directory",
            "command": "cd",
            "args": [
                "${workspaceFolder}"
            ]
        },
        {
            "type": "shell",
            "label": "C  : Build",
            "command": "make",
            "args": [
                "build"
            ],
            "dependsOn":["cd Directory"]
        },
        {
            "type": "shell",
            "label": "C  : Build amp; Run",
            "command": "make",
            "args": [
                "run"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": [
                "cd Directory"
            ]
        }
    ],
    "version": "2.0.0"
}
 

В launch.json, если я добавлю «miDebuggerPath», это каким-то образом остановит запуск отладки.

 {
    "version": "0.2.0",
    "configurations": [

        {
            "name": "clang   - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/main",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            //"miDebuggerPath": "/usr/bin/lldb", 
            //uncommenting the "miDebuggerPath" statement stalls the program
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for lldb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }],
            "preLaunchTask": "C  : Build"
        }
    ]
}
 

Makefile имеет две основные функции:

‘make build’: создать исполняемый файл, но не запускать

‘make run’: сборка и запуск исполняемого файла

 PROJECT_TITLE:= main
CC := /usr/bin/clang  
EXTENSION := .cpp

#directory for src, bin, obj
SRC_DIR := src
BIN_DIR := bin
OBJ_DIR := obj

#flags (ldflags: lib directory ldlibs: direct lib file (.dylib/.so/.a))
CPPFLAGS := -std=c  17 -stdlib=libc   -Iinclude -ILibrary/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -ILibrary/Developer/CommandLineTools/usr/lib/llvm-gcc/4.2.1/include -I/usr/local/opt/icu4c/include -MMD -MP
CFLAGS := -Wno-deprecated-declarations
LDFLAGS := -Llib/GLFW -L/usr/local/opt/icu4c/lib
LDLIBS := -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit

#list source files
SRC := $(wildcard $(SRC_DIR)/*$(EXTENSION))

#list object files (.o)
OBJ := $(SRC:$(SRC_DIR)/%$(EXTENSION)=$(OBJ_DIR)/%.o)

#building executable path
EXE := $(BIN_DIR)/$(PROJECT_TITLE)

#starting run
all: $(EXE)

run: $(EXE)
    ${EXE}

build: $(OBJ) | $(OBJ_DIR) $(BIN_DIR)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o

#if obj is updated, run linker
$(EXE): $(OBJ) | $(OBJ_DIR) $(BIN_DIR)
    $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@

#if program is updated, update object
$(OBJ_DIR)/%.o: $(SRC_DIR)/%$(EXTENSION) |$(OBJ_DIR)
    $(CC) $(CPPFLAGS) $(CFLAGS) -c

lt; -o $@

#create dir
$(BIN_DIR) $(OBJ_DIR) $(TEMP_DIR):
mkdir -p $@

При отладке (без «miDebuggerPath») это происходит:
введите описание изображения здесь

Комментарии:

1. Ни в коем случае не добавляйте флаги отладки, по крайней мере -g , и, желательно, a -O0 .

2. @sweenish Спасибо за ваш вклад! Я попробую добавить эти флаги и посмотреть, поможет ли это.

3. Добавление -g и -O0 , похоже, не улучшает ситуацию. Я пробовал это во время компиляции и фазы компоновки.

4. Это не они «улучшают ситуацию». -g это обязательный флаг, если вы хотите отладить свой код.

5. @sweenish я согласен. Большое спасибо, что указали на это. Я просто имею в виду, что должно быть что-то еще, что может быть проблематичным. Я протестировал lldb непосредственно на терминале после сборки отладки, и он работает нормально. Одна из проблем во время тестирования терминала заключается в том, что точка останова не отображается в файле cpp, и мне нужно target.source-map направить отладчик к исходному коду. Не уверен, что это проблема для VS Code.