отладка — Как отлаживать код C ++ с помощью Bazel на ОС Windows 10

Недавно я начал играть с Bazel, и у меня возникла проблема с отладкой приложения, я могу отлаживать с г ++ но я не могу отладить Базэл сгенерированный .exe файл.

Спасибо, что посмотрели на это.

Кроме того, я создаю исходный код с помощью задач Bazel и VsCode.

  1. Какой файл .exe я должен выбрать для отладки моего приложения?
  2. Все в порядке?
  3. Можно отладить исходный код на C ++, используя Bazel в Windows.
  4. Должен ли я использовать MinGW для отладки Bazel сгенерированный исполняемый файл или некоторые
    другие инструменты или отладчики.

Версии

  • ОС: Windows 10
  • Базель версия: метка сборки: 0.20.0

У меня есть такая структура проекта:

|-- CPP_TESTS
|-- .gitignore
|-- a.exe  <-- I generated this with g++ minGW
|-- readme.md
|-- WORKSPACE
|-- .vscode
|   |-- c_cpp_properties.json
|   |-- launch.json
|   |-- settings.json
|   |-- tasks.json
|-- project
|-- WORKSPACE
|-- main
|-- app.cc
|-- BUILD
|-- readme.md

введите описание изображения здесь

app.cc

#include <iostream>

int main(int argc, char const *argv[])
{
int a = 3;
int b = 5;
int c = a + b;

/* code */
std::cout << "Hello world" << std::endl;
std::cout << c << std::endl;
return 0;
}

Файл BUILD

cc_binary(
name = "app",
srcs = ["app.cc"]
)

А затем я запускаю эту команду в корне ./CPP_TESTS

bazel build //project/main:app

эта команда сгенерирует некоторые файлы и папки

введите описание изображения здесь

Некоторые из папок содержат файл app.exe, например, внутри
Базэл-Бен У меня есть файлы и папка

|-- bazel-bin
|-- project
|   |-- main
|       |-- app.exe
|       |-- app.exe-2.params
|       |-- app.exe.runfiles_manifest
|       |-- app.pdb
|       |-- app.exe.runfiles
|       |   |-- MANIFEST
|       |-- _objs
|           |-- app
|               |-- app.obj
|-- project-name
|-- main
|-- app.exe
|-- app.exe-2.params
|-- app.exe.runfiles_manifest
|-- app.pdb
|-- app.exe.runfiles
|   |-- MANIFEST
|-- _objs
|-- app
|-- app.obj

так что, если я запускаю app.exe внутри

|-- bazel-bin
|-- project
|   |-- main
|       |-- app.exe   <=========

Я получаю этот вывод

INFO: Elapsed time: 0,145s, Critical Path: 0,01s
INFO: 0 processes.
INFO: Build completed successfully, 1 total action
INFO: Build completed successfully, 1 total action
Hello world
8
PS C:\dev\tests\cpp_tests>

если я отлаживаю приложение, я получаю эту ошибку.

прежде чем начать это мой Задачи / JSON

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "bazel_run",
"type": "shell",
"command": "bazel run //project/main:app",
"args": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "bazel_build",
"type": "shell",
"command": "bazel build //project/main:app",
"args": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "bazel_debug_build",
"type": "shell",
"command": "bazel",
"args": [
"build",
"//project/main:app",
"--compilation_mode=dbg"],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"]
}
]
}

launch.json

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
// "program": "${workspaceFolder}/a.exe",
"program": "${workspaceFolder}\\bazel-bin\\project\\main\\app.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/MinGW/bin/gdb.exe",
"preLaunchTask": "bazel_debug_build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

Так что я бегу bazel build //project/main:app команда
введите описание изображения здесь

Сообщение об ошибке.

введите описание изображения здесь

Но есть ли app.exe?
введите описание изображения здесь

1

Решение

Пожалуйста, смотрите мой ответ на связанный вопрос: https://stackoverflow.com/a/54007919/7778502

Хотя я не могу сказать, правильны ли ваши настройки (мне нужно знать больше, например, какие плагины VSCode вы установили, каков контент других файлов .json), я могу точно сказать, что он выглядит неправильно, что у вас есть два WORKSPACE файлы.

Вы должны удалить project\WORKSPACEпотому что Базель считает каждое дерево каталогов с WORKSPACE файл должен быть уникальным рабочим пространством. Каждое рабочее пространство нуждается только в одном файле WORKSPACE в своем корневом каталоге. Если подкаталог имеет свой собственный файл WORKSPACE, то это отдельное рабочее пространство, и Bazel не будет использовать цели из него в «родительском» рабочем пространстве.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]