Используя gdb из командной строки, я могу сломаться при загрузке общей библиотеки. Как я могу получить такое же поведение в VS Code, зная, что у меня есть исходный код общей библиотеки?
Я не могу использовать Visual Studio, потому что работаю в среде Linux. Рабочий процесс выглядит следующим образом. У меня есть скрипт Python, который использует определенную библиотеку Python. Я изменяю код общей библиотеки, написанной на C++. Эта общая библиотека загружается библиотекой Python, которую я вызываю из своего скрипта Python. Я ищу способ сломать, когда моя общая библиотека загружена, чтобы иметь возможность графически отлаживать в VS Code.






К сожалению, нет способа перейти из кода Python в код C для целей отладки (насколько мне известно, только Visual Studio имеет такую возможность).
В качестве альтернативы, есть ли способ подключиться к общей библиотеке при ее загрузке?
@салах не уверен.
У меня как-то работает.
Вот моя установка:
вот мой 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 показывает остановку выполнения на моих точках останова
Работает, но только если я удалю блок setupCommands. ` "setupCommands": [ { "description": "Включить красивую печать для gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }`
Кроме того, мне вообще не нужен блок окружения.
У меня есть вопрос. Что если я хочу использовать cuda-gdb вместо gdb для отладки не только c++, но и cuda c++? Есть ли аналогичный способ сделать это?
Спасибо @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, Запускаем питон, и вот мы здесь!
Это действительно связано с Python или только с C? Если вы имеете в виду модули расширения C для Python, то нет возможности пересечь барьер Python/C в отладчике (для этого вам понадобится Visual Studio).