Как войти в код C ++ из Python с помощью Pybind11 в VSCODE при использовании отладчика Python C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как войти в код C ++ из Python с помощью Pybind11 в VSCODE при использовании отладчика Python C ++?

Сообщение Anonymous »

Вопрос:
Я пытаюсь отлаживать сценарий Python, который вызывает функцию C ++ через a .pyd модуль, построенный с pybind11 (скомпилирован с использованием MSVC). Я хочу установить точку останова в Python, и когда я нажимаю шаг в (f11, шаг в) в vscode, я хочу, чтобы она автоматически вступила в реализацию C ++.

Код: Выделить всё

import sys
import os

# Add debug directory to Python path
debug_path = os.path.join(os.path.dirname(__file__), 'build', 'Debug')

sys.path.insert(0, debug_path)

import myadder

result = myadder.add(5, 3)  #  BREAKPOINT: Click left of line number

for i in range(3):
result = myadder.add(i, i + 1)
print(f"add({i}, {i+1}) = {result}")
c ++ (add.cpp)

Код: Выделить всё

// add.cpp
#include 

int add(int a, int b) {
printf(" C++ add() called with a=%d, b=%d\n", a, b);
int result = a + b;  // Set C++ breakpoint here
printf(" C++ add() returning: %d\n", result);
return result;
}
< /code>
c ++ (bindings.cpp) < /p>
// bindings.cpp
#include

int add(int a, int b);

namespace py = pybind11;

PYBIND11_MODULE(myadder, m) {
m.def("add", &add, "A function that adds two numbers");
}

cmakelists.txt

Код: Выделить всё

cmake_minimum_required(VERSION 3.14)
project(myadder)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_BUILD_TYPE Debug)

# Use Python to find pybind11 automatically
execute_process(
COMMAND python -c "import pybind11; print(pybind11.get_cmake_dir())"
OUTPUT_VARIABLE pybind11_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)

# find  pybind11 package
find_package(pybind11 REQUIRED)

# build -add debug info
pybind11_add_module(myadder bindings.cpp add.cpp)

build

Код: Выделить всё

cmake .. -G "Visual Studio 16 2019" -A x64
cmake --build . --config Debug
✅ Build Info:
Compiler: MSVC
Built as: myadder.pyd with pybind11
Python version: 3.12
Platform: Windows 11
Debugger: cppvsdbg
плагин vscode: python c ++ Debugger
launch.json config
{
// 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": "Python C++ Debugger",
"type": "pythoncpp",
"request": "launch",
"pythonLaunchName": "Python: Current File",
"cppAttachName": "(Windows) Attach"
},

{
"name": "(Windows) Attach",
"type": "cppvsdbg",
"request": "attach",
"processId": "${command:pickProcess}",
"symbolSearchPath": "${workspaceFolder}/build/Debug", // .pdb

},
// Python
{
"name": "Python: Current File",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/debug.py",
"console": "integratedTerminal",
"justMyCode": false,
"stopOnEntry": true,
}
]
}
< /code>
Текущее поведение: < /strong>
Когда я запускаю отладчик Python C ++ и устанавливаю точку останова на myadder.add (5, 3), он останавливается в Python, но шаг в (f11) не входит в функцию C ++. Затем я могу попасть в точки останова в C ++. Но это руководство. Отладка от python. < /p>
Установите точку останова в Python. Recap:

Можно ли вступить в код C ++ Pybind11 непосредственно из Python, используя отладчик CPPVSDBG в VSCODE без вручного щелчка (Windows) Aattach ? /> Есть советы? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»