Я пытаюсь отлаживать сценарий 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}")
Код: Выделить всё
// 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");
}
Код: Выделить всё
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)
Код: Выделить всё
cmake .. -G "Visual Studio 16 2019" -A x64
cmake --build . --config Debug
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
Мобильная версия