[LINUX] Déboguer les bibliothèques partagées avec VScode

J'ai essayé de déboguer une bibliothèque partagée (.so) créée en C ++ avec VScode, Je n'avais pas beaucoup d'informations et j'ai eu du mal, je vais donc l'écrire sous forme d'article.

Créer une bibliothèque partagée

Tout d'abord, créez une bibliothèque

g++ -shared -g -fPIC -o libtodebug.so file1.cpp file2.cpp

Lors de la compilation séparément

g++ -g -fPIC -c -o file1.o file1.cpp
g++ -g -fPIC -c -o file2.o file2.cpp
g++ -shared -o libtodebug.so file1.o file2.o

Construire avec. Vous devez inclure l'option -fPIC.

Déboguer avec VScode

Dans le débogage VScode, Le fichier de configuration de débogage doit être configuré pour lancer un exécutable qui utilise la bibliothèque partagée.

launch.json


{
    //Vous pouvez utiliser IntelliSense pour apprendre les attributs disponibles.
    //Survolez et affichez la description des attributs existants.
    //Vérifiez les éléments suivants pour plus d'informations: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Débogueur Python",
            "type": "cppdbg",
            "request": "launch",
            "program": "python",
            "args": [
            "${Nom de fichier Python pour le débogage, debug.py}"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
                }
            ]
        }
    ]
}

Spécifiez un programme Python comme programme à déboguer avec gdb, En chargeant la bibliothèque partagée sans Python et en appelant les fonctions de la bibliothèque partagée depuis Python, Ce sera sous forme de débogage avec gdb.

Bien sûr, il n'est pas nécessaire que ce soit Python, Cette fois, j'ai choisi Python car il est facile d'écrire une fonction qui charge et exécute une bibliothèque partagée.

Créer un programme Python

Écrivez un programme Python qui charge la bibliothèque partagée et appelle la fonction.

debug.py


import ctypes

def main():
    sharedlib = ctypes.cdll.LoadLibrary("./libtodebug.so")
    func = sharedlib .SampleFunc
    func.argtypes = [ctypes.c_int]
    func.argtypes = [ctypes.c_int]
    res = func(ctypes.c_int(10))
    print(res)

if "__name__" == "__main__":
    main()

Je me sens comme cela. Dans mon cas, j'ai créé une interface graphique avec tkinter et créé un environnement qui peut être débogué de manière flexible.

Recommended Posts

Déboguer les bibliothèques partagées avec VScode
Utiliser la mémoire partagée avec une bibliothèque partagée
Imprimer le débogage avec PyScribe
erreur lors du chargement des bibliothèques partagées
Installer une bibliothèque externe avec Python
Déboguer Python avec VS Code
Déboguer avec l'interpréteur PEPPER python
Étapes pour développer Django avec VSCode
Déboguer la transmission des e-mails avec smtpd.DebuggingServer de Python
Déboguer le script avec l'éditeur Sakura
Limiter les symboles publics dans les bibliothèques partagées
Je veux déboguer avec Python
Intellisense ne fonctionne pas avec tensorflow2.0 + VScode