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.
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.
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.
É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