Gibt es trotzdem, die Python-Wert eines PyObject * von einem corefile in gdb zu entdeckenZugriff auf Python-Objekte in einem Core Dump
Antwort
Es ist viel Arbeit, aber natürlich kann es geschehen, vor allem, wenn man die ganze Symbole. Sehen Sie sich die Header-Dateien für die spezifische Version von Python an (und die Kompilierungsoptionen, die zum Erstellen verwendet werden): Sie definieren PyObject als eine Struktur, die in erster Linie einen Zeiger auf einen Typ enthält. Es werden viele Makros verwendet, daher empfiehlt es sich, das Kompilieren dieses Python erneut mit genau denselben Flags auszuführen, aber zusätzlich ein -E, um nach der Vorverarbeitung anzuhalten, so dass Sie auf den spezifischen C-Code verweisen können, der die Bits erstellt hat Sie sehen im Core Dump.
Ein Typ-Objekt hat neben vielen anderen Dingen einen String (char-Array), aus dem man ableiten kann, was genau Objekte dieses Typs enthalten - sei es Inhalt direkt oder vielleicht etwas Inhalt (wie eine Länge, dh Anzahl der Items) und einen Zeiger auf die eigentlichen Daten.
Ich habe solche super-erweiterte Post-Mortem-Debugging ein paar Mal (beginnend mit sehr genaue Kenntnis der Python-Versionen beteiligt und alle vorbereiteten vorverarbeiteten Quellen & c) und jedes Mal dauerte es mich ein oder zwei Tage (Wäre ich noch freiberuflich tätig und würde stundenweise bezahlen, wenn ich für eine solche Aufgabe Gebote abgeben müsste, würde ich sagen, mindestens 20 Stunden - zu meinen nicht-billigen Stundensätzen! -).
IOW, es ist es nur wert, wenn es wirklich wirklich der einzige Ausweg aus etwas sehr teuer Gurke ist. Auf der positiven Seite wird es Ihnen mehr über Pythons Interna lehren, als Sie jemals dachten, selbst wenn Sie sich jede Zeile der Quellen auswendig gelernt haben. Viel Glück, du wirst etwas brauchen !!!