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