2009-07-03 8 views

Répondre

4

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ées pour la construire): ils définissent PyObject comme une structure qui inclut, en premier lieu, un pointeur sur un type. Beaucoup de macros sont utilisées, vous pouvez donc réexécuter la compilation de ce Python à partir des sources, avec exactement les mêmes drapeaux mais en plus un -E pour arrêter après le pré-traitement, 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 (array of char) qui est son nom, et à partir de là vous pouvez déduire ce que contiennent exactement les objets de ce type - soit directement le contenu, soit peut-être du contenu (comme une longueur, c'est-à-dire le nombre d'éléments) et un pointeur vers les données réelles.

J'ai fait un tel débogage post-mortem super-avancé à quelques reprises (en commençant par une connaissance très précise des versions Python impliquées et toutes les sources pré-préparées préparées) et chaque fois cela m'a pris un jour ou deux (Avais-je encore un freelance et charge à l'heure, si je devais enchérir sur une telle tâche, je dirais au moins 20 heures - à mon taux horaire pas-bon marché! -). IOW, ça vaut le coup que si c'est vraiment le seul moyen de sortir de certains cornichons très coûteux. Sur le plan positif, il vous en apprendra plus sur les internes de Python que vous ne l'auriez jamais pensé, même après avoir mémorisé chaque ligne des sources. Bonne chance, vous en aurez besoin !!!

Questions connexes