Используя gdb из командной строки, я могу сломаться при загрузке общей библиотеки. Как я могу получить такое же поведение в VS Code, зная, что у меня есть исходный код общей библиотеки?
Как настроить VS Code для перехода в разделяемую библиотеку (.so), которая загружается при отладке скрипта Python?
Ответы (3)
У меня как-то работает.
Вот моя установка:
- Ubuntu 18.04, отладка общей библиотеки C++, которую я загружаю из Python3 (точнее - через Cython, но IIRC одинаково хорошо работал при загрузке .so через ctypes, также я помню, что она работала при отладке чистой библиотеки C в аналогичной настройке)
- в VSCode у меня есть проект, который компилируется в этот .so
- там я поставил кучу точек останова
- Я создал конфигурацию запуска (текст ниже)
- также я скомпилировал .so с отладочной информацией
вот мой launch.json (по большей части это шаблон, я только заполнил части «программа» и «аргументы» и настроил переменную среды PYTHONPATH).
примечание: важно иметь «stopAtEntry:false» (что по умолчанию), иначе VSCode попытается найти файл записи .c или что-то в этом роде.
{
// 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 1123",
"type": "cppdbg",
"request": "launch",
"program": "/home/sergey/anaconda3/bin/python",
"args": [
"/storage/projects/cython-vst-loader/cython_vst_loader/test_load_plugin.py"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [
{
"name": "PYTHONPATH",
"value": "/storage/projects/cython-vst-loader"
}
],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
в любом случае, в этой настройке я вижу, что мой VSCode показывает остановку выполнения на моих точках останова
К сожалению, нет способа перейти из кода Python в код C для целей отладки (насколько мне известно, только Visual Studio имеет такую возможность).
Спасибо @user1312695, ваш метод работает для меня!
Теперь я смог войти в pybullet.c! Итак, позвольте мне взять это в качестве примера. https://github.com/bulletphysics/bullet3
Я хочу установить пакет pybullet отладочной версии в среду conda и использовать VScode для запуска отладки, вот что я сделал:
(0) создайте новую среду conda с именем debug_pybullet
.
(1) изменить cmake/FindPythonLibs.cmake
FindPythonLibs.cmake
не может распознавать среды conda, поэтому после того, как он обнаружил неправильный _PYTHON_EXECUTABLE
, мне нужно вручную установить путь примерно в строке 143:
set(_PYTHON_EXECUTABLE /home/MyName/anaconda3/envs/debug_pybullet/bin/python)
(2) изменить CMakeLists.txt
Мне нужно вручную добавить определения, включенные в файл build_cmake_pybullet_double.sh
, за исключением определения CMAKE_BUILD_TYPE=Release
(я предпочитаю, чтобы VSCode управлял этим определением).
также я вручную установил PYTHON_SITE_PACKAGES
примерно в строке 93:
set(PYTHON_SITE_PACKAGES /home/MyName/anaconda3/envs/debug_pybullet/lib/python3.6/site-packages)
(3) Создайте launch.json
в VScode.
Вот моя версия 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": "/home/MyName/anaconda3/envs/debug_pybullet/bin/python",
"args": [
"/home/MyName/<path_to_python_file>/main.py"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
}
]
}
Поскольку я задаю путь вручную, мне не нужны здесь environments
и setupCommands
.
(4) В VScode соберите все.
(5) Установите отлаживаемый пакет:
$ source activate pybullet_debug
(pybullet_debug)$ pip install -e .
(6) Установите точки останова в pybullet.c
.
(7) Нажимаем F5, Запускаем питон, и вот мы здесь!