Εργαστήριο Τεχνολογίας Λογισμικού
0 votes
312 views

Εμπειρική συμβουλή

in progtech by (790 points) | 312 views

2 Answers

0 votes

Τσεκαρετε λαθος προσβασεις στην μνημη (πχ σε μνημη που δεν ειναι δεσμευμενη). Απο εμπειρια, με μεγαλη πιθανοτητα αυτο είναι το λαθος - ο υπολογιστης σου μπορει να αφησει να περασουν καποιες προσβασεις χωρις να παραπονεθει.

by (790 points)
+1

Το παραπάνω είναι relevant κυρίως αν το error είναι segmentation fault.

0 votes

Είπα να πάρω λίγο χρόνο να γράψω έναν τρόπο να ελέγξετε το error μόνοι σας, μιας και είναι ένα από τα πιο συχνά ερωτήματα στο εργαστήριο (και ταυτόχρονα σημεία που δημιουργήται frustration).

Τα παρακάτω απαιτούν και μια μικρή εξοικείωση με Linux.

Τα παρακάτω είναι για Linux, αλλά αν νιώθετε έστω και λίγο tech-savvy ή περιπετειώδεις, μπορείτε να δοκιμάσετε το Windows Subsystem for Linux και πρακτικά να έχετε ένα μηχάνημα Linux μέσα στα Windows σας με ελάχιστο εως καθόλου κόπο.

Το εργαλείο που προτείνω είναι το Valgrind. Πιθανώς να υπάρχουν και native εργαλεία για Windows και για Eclipse συγκεκριμένα, αλλά δεν βρήκα κάτι με μια γρήγορη αναζήτηση.

Το Valgrind είναι μια σουίτα εργαλείων που κάνουν διάφορους ελέγχους μνήμης. Στην περίπτωση μας μας ενδιαφέρει μόνο το απλούστερο εργαλείο που είναι ο memory checker.

Μπορείτε να το εγκαταστήσετε από τον package manager της επιλογής σας, π.χ.
sudo apt install valgrind

και μετά μπορείτε να τρέξετε το πρόγραμμα κάνοντας
valgrind ./my_program

Σε γενικές γραμμές το valgrind θα σας πει τι memory leaks υπάρχουν. Για παράδειγμα, μπορείτε να δείτε κάποια συχνά errors στην εικόνα. Εδώ το πρόγραμμα κάνει access θέση μνήμης που δεν έχει δεσμεύσει. Το valgrind σου λέει ακριβώς σε ποια κλήση συνάρτησης έγινε αυτό, οπότε μπορείς πολύ εύκολα να έχεις εποπτία των λαθών σου και να τα βρεις σχετικά εύκολα.

Αυτά τα λίγα για το valgrind, φυσικά το εργαλείο έχει πολύ περισσότερες δυνατότητες. Για ένα πιο in-depth tutorial, δείτε και εδώ.

by (2.2k points)

301 questions

289 answers

288 comments

769 users