Debugging C pointers on 64 bit
Antonis Christofides
anthony at itia.ntua.gr
Thu Dec 2 12:36:01 EET 2010
Έχω μια shared library γραμμένη σε C, η οποία χρησιμοποιείται από μια
εφαρμογή Python/Django. Είχε ένα bug με αποτέλεσμα, όταν έτρεχε σε
σύστημα 64 bit, να χάνει κάποια στιγμή τα άνω 32 bit. Το πρόβλημα είναι
πως όταν το δοκίμαζα σε 64 bit, τα τεστ έτρεχαν μια χαρά, ο Django
development server έτρεχε μια χαρά, και μόνο όταν έτρεχα σε production
environment, με apache+mod_wsgi, έβγανε segmentation fault. Ευτυχώς ήταν
repeatable, και κατάφερα σχετικά εύκολα να βρω και να διορθώσω το
πρόβλημα, κάνοντας διάφορα κόλπα (και με τη βοήθεια των θαυμάσιων
οδηγιών του mod_wsgi περί debugging techniques).
Υπάρχει τρόπος να αναδεικνύονται τέτοια προβλήματα στη φάση των δοκιμών;
Για παράδειγμα, υπάρχει κάποιος τρόπος να πω στον kernel ή στον debugger
"σε παρακαλώ όταν σου ζητήσουμε malloc να μας δίνεις όσο πιο κουφή
διεύθυνση μπορείς;" Υπάρχει τρόπος, όταν το πρόγραμμά μου προσπαθεί να
διαβάσει μνήμη (είτε στο heap είτε στο stack) που είναι uninitialized,
να λαμβάνει κατά το δυνατόν σκουπίδια ώστε να βγει πιο εύκολα το
segmentation fault;
More information about the Linux-greek-users
mailing list