Ich habe versucht, eine gemeinsam genutzte Bibliothek (.so) zu debuggen, die in C ++ mit VScode erstellt wurde. Ich hatte nicht viele Informationen und hatte es schwer, also werde ich es als Artikel schreiben.
Erstellen Sie zunächst eine Bibliothek
g++ -shared -g -fPIC -o libtodebug.so file1.cpp file2.cpp
Beim separaten Kompilieren
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
Erstellen mit. Sie müssen die Option -fPIC einschließen.
Beim VScode-Debugging Die Debug-Konfigurationsdatei muss so konfiguriert sein, dass eine ausführbare Datei gestartet wird, die die gemeinsam genutzte Bibliothek verwendet.
launch.json
{
//Mit IntelliSense können Sie die verfügbaren Attribute kennenlernen.
//Bewegen Sie den Mauszeiger und zeigen Sie die Beschreibung der vorhandenen Attribute an.
//Überprüfen Sie das Folgende für weitere Informationen: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python-Debugger",
"type": "cppdbg",
"request": "launch",
"program": "python",
"args": [
"${Python-Dateiname zum Debuggen, debug.py}"
],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
Geben Sie ein Python-Programm als Programm zum Debuggen mit gdb an. Durch Laden der gemeinsam genutzten Bibliothek ohne Python und Aufrufen der Funktionen in der gemeinsam genutzten Bibliothek von Python aus Es wird in Form von Debugging mit GDB sein.
Natürlich muss es nicht Python sein, Dieses Mal habe ich mich für Python entschieden, weil es einfach ist, eine Funktion zu schreiben, die eine gemeinsam genutzte Bibliothek lädt und ausführt.
Schreiben Sie ein Python-Programm, das die gemeinsam genutzte Bibliothek lädt und die Funktion aufruft.
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()
Ich fühle mich so. In meinem Fall habe ich mit tkinter eine GUI erstellt und eine Umgebung erstellt, die flexibles Debuggen ermöglicht.
Recommended Posts