#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.