моя текущая установка включает модуль boost-python, который я написал. Для отладки этого модуля я написал отдельную программу на C ++, которая вызывает Python-скрипт из программы C ++.
int main()
{
try
{
PyImport_AppendInittab("oum_export", INIT_MODULE);
Py_Initialize();
PyObject *obj = Py_BuildValue("s", "/media/thomas/Data/seafile/Seafile/TUG/ILearnHeart/Anisotropic\\ Diffusion/python/oum_cpp_opt.py");
FILE *file = _Py_fopen_obj(obj, "r+");
if (file != NULL)
PyRun_SimpleFile(file, "D:/seafile/Seafile/TUG/ILearnHeart/Anisotropic Diffusion/python/oum_cpp_opt.py");
else
cout << "Script file to execute not found" << endl;
}
catch( p::error_already_set )
{
PyErr_Print();
}
Py_Finalize();
}
Это должно позволить мне легко отлаживать обратные вызовы, сделанные для Python-модулей, написанных на C ++. При вызове отладчика vscode программа вылетает с ошибкой
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
что связано с тем, что я не в правильной среде анаконды. Как я могу сказать Visual-Studio код для входа в правильную среду, прежде чем запускать GDB (т. Е .: «источник активировать aniso_diff && gdb oum_export_test «)?
Вот мой текущий launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "oum_export_test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build_linux",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build oum standalone"}
]
}
Я попытался включить команду активации в сборку preLaunchTask, но, похоже, vscode вызывает новую оболочку для gdb.
Для большинства из вас это, наверное, не сложно, но я только что понял, что самое простое решение — просто активировать желаемую среду перед вызовом vscode в той же оболочке.
Других решений пока нет …