En utilisant gdb à partir de la ligne de commande, je suis capable d'interrompre le chargement de la bibliothèque partagée. Comment puis-je obtenir le même comportement dans VS Code sachant que j'ai le code source de la bibliothèque partagée ?
Réponses
Trop de publicités?Pour moi, cela fonctionne d'une manière ou d'une autre.
Voici ma configuration :
- Ubuntu 18.04, débogage d'une bibliothèque partagée C++ que je charge depuis Python3 (plus précisément - via Cython, mais je me souviens que cela fonctionnait tout aussi bien en chargeant un .so via ctypes, et je me souviens également que cela fonctionnait lors du débogage d'une librairie C pure dans une configuration similaire).
- dans VSCode, j'ai un projet qui compile dans ce .so
- J'y ai placé un certain nombre de points d'arrêt
- J'ai créé une configuration de lancement (texte ci-dessous)
- J'ai également compilé le fichier .so avec les informations de débogage
voici mon launch.json (pour l'essentiel, c'est du réchauffé, je n'ai rempli que les parties "program" et "args" et mis en place la var d'environnement PYTHONPATH).
note : il semble important d'avoir "stopAtEntry:false" (ce qui est le cas par défaut), sinon VSCode essaie de localiser un fichier .c d'entrée ou quelque chose comme ça.
{
// 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
}
]
}
]
Quoi qu'il en soit, dans cette configuration, je vois mon VSCode montrer que l'exécution s'arrête sur mes points d'arrêt
Merci @user1312695, votre méthode fonctionne pour moi !
J'ai pu entrer dans pybullet.c maintenant ! Prenons cet exemple. https://github.com/bulletphysics/bullet3
Je veux installer la version debuggable du paquet pybullet dans un environnement conda et utiliser VScode pour commencer mon debugging, voici ce que j'ai fait :
(0) créer un nouvel environnement conda appelé debug_pybullet
.
(1) modifier cmake/FindPythonLibs.cmake
FindPythonLibs.cmake
ne peut pas reconnaître les environnements conda, donc après avoir trouvé le mauvais environnement, le _PYTHON_EXECUTABLE
Je dois donc définir manuellement le chemin d'accès à la ligne 143 :
set(_PYTHON_EXECUTABLE /home/MyName/anaconda3/envs/debug_pybullet/bin/python)
(2) modifier CMakeLists.txt
Je dois ajouter manuellement les définitions qui sont incluses dans le fichier build_cmake_pybullet_double.sh
à l'exception de la définition de CMAKE_BUILD_TYPE=Release
(Je préfère laisser le VSCode contrôler cette définition).
J'ai également défini manuellement PYTHON_SITE_PACKAGES
aux alentours de la ligne 93 :
set(PYTHON_SITE_PACKAGES /home/MyName/anaconda3/envs/debug_pybullet/lib/python3.6/site-packages)
(3) Créer launch.json
en VScode.
Voici ma version de 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",
}
]
}
Comme j'ai défini manuellement le chemin d'accès, je n'ai pas besoin de l'option environments
y setupCommands
ici.
(4) Dans VScode, construire tout.
(5) Installer le paquet debuggable :
$ source activate pybullet_debug
(pybullet_debug)$ pip install -e .
(6) Définir les points d'arrêt en pybullet.c
.
(7) Appuyez sur F5, Exécutez le python, et nous y voilà !