Question

Y at-il de toute façon de découvrir la valeur d'un python PyObject * d'un corefile dans gdb

Était-ce utile?

La solution

Il y a beaucoup de travail, mais bien sûr, il peut être fait, surtout si vous avez tous les symboles. Regardez les fichiers d'en-tête pour la version spécifique de Python (et les options de compilation utilisé pour le construire): ils définissent PyObject comme struct qui comprend, d'abord et avant tout, un pointeur vers un type. Beaucoup de macros sont utilisées, de sorte que vous pouvez exécuter la compilation de Python à partir de sources encore une fois, avec exactement les mêmes drapeaux, mais en plus un -E arrêter après traitement préalable, donc vous pouvez vous référer au code C spécifique qui a fait les bits vous voyez dans la décharge de base.

Un objet de type a, entre autres choses, une chaîne (tableau de char) qui est son nom, et de celui-ci, vous pouvez déduire quels objets exactement de ce type contiennent - que ce soit le contenu directement, ou peut-être une partie du contenu (par exemple en longueur, à savoir le nombre d'éléments) et un pointeur sur les données réelles.

Je l'ai fait comme post-mortem super-avancé le débogage d'un couple de fois (en commençant par une connaissance très précise des versions de Python impliquées et toutes les sources prétraitées préparées et c) et à chaque fois il m'a fallu un jour ou deux (étaient Je reste indépendant et charge à l'heure, si je devais faire une offre sur une telle tâche que je dirais au moins 20 heures - à mes tarifs horaires sans bon marché -.)

OIEau, il vaut la peine que si elle est vraiment vraiment le seul moyen de sortir de certains cornichon très coûteux. Du côté positif, il vous apprendra plus sur les parties internes Python que vous avez jamais pensé était là, même après la mémorisation de chaque ligne des sources. Bonne chance, vous aurez besoin d'un peu !!!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top