2 votes

Comment configurer VS Code pour qu'il puisse accéder à une bibliothèque partagée (.so) chargée lors du débogage d'un script Python ?

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 ?

3voto

user1312695 Points 151

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

enter image description here

0voto

Brett Cannon Points 3579

Malheureusement, il n'existe pas de moyen de passer du code Python au code C à des fins de débogage (à ma connaissance, seul Visual Studio offre cette possibilité).

0voto

Star Points 13

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à !

Une capture d'écran est jointe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X