Προς το περιεχόμενο

-O2 optimization option GDB


kfoynt

Προτεινόμενες αναρτήσεις

Δεν χρειάζεται να γραφεί σε asm, ένα optimisation barrier αρκεί. Επίσης από μια έκδοση και μετά το gcc υποστηρίζει διαφορετικό optimisation του κώδικα (νομίζω με κάποιο preprocessor statement) αλλά δεν το έχω χρησιμοποιήσει ποτέ και δεν ξέρω πως υλοποιείται. Τέσπα εξακολουθώ να αμφιβάλλω ότι φτάιει το οπτιμισάτιον και ότι inline, και barriers θα το διορθώσουν (ίσως εμφανιστεί στο μέλλον και να crash χωρίς να έχεις ιδέα γιατί. Κάτι μου λεεί πάντως ότι φτάιει το function call.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, 1 - 1 :-D

 

Ναι λογικό το βρίσκω να μην μπορεί να μυρίσει κάποιος τα νύχια του, αλλά έλεγα μήπως φταίει το option. Γιατί μου έκανε εντύπωση που χωρις αυτό δεν έπαιρνα segmentation.

 

Άλλο ένα πρόβλημα που υποψιάζομαι είναι ότι ο pointer L δείχνει σε extern μεταβλητή, και ο κώδικας που έδωσα βρίσκεται σε μία function που έχει ως όρισμα τον pointer L.

Ναι, το πρόγραμμα αποτελείται από πολλά αρχεία. Αυτό που έκανα quote το βρήκα εδώ:

 

http://www.yolinux.com/TUTORIALS/GDB-Commands.html

 

στην ενότητα GDB operations

 

Ακόμη και να στείλω εκτελέσιμο, το πρόγραμμα χρησιμοποιεί Matlab engine, οπότε θα σου ζητήσει paths για libraries μέσα απο matlab, θα πρέπει να φτιάχνεις paths στα makefile κτλ κτλ, και μετά για να το κάνεις compile θα πρέπει να χρησιμοποιήσεις mex. Είναι λίγο μπέρδεμα.

 

Θα κρατήσω οτι το option -O2 δεν δημιουργεί προβλήματα και ο θεος βοηθός :-( .

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@ippo

Εφοσον επιμενει οτι δεν υπαρχει λαθος απο την μερια του, τοτε κανει λαθος μεταφραση ο compiler.

Προσωπικα πιστευω οτι ειναι σε λαθος δρομο. Καλυτερα να ξαναδει τη δομη του προγραμματος παρα να περιμενει θαυματα απο τον compiler.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Anw, ευχαριστώ για τις προτάσεις. Θα δω τι μπορώ να κάνω με το compile, και αν δεν βγει τίποτα debugging στον κώδικα.

 

Έχετε να μου προτείνετε κανενα πιο αποδοτικό τρόπο για να κάνω debug σε τέτοιες περιπτώσεις απο το να κοιτάω απλά τιμές στις μεταβλητές?

 

assembly μήπως???

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό που σημαίνει το σχόλιο είναι το εξής: Με την επιλογή -O2 o compiler μπορεί να αλλάζει τη σειρά του αντικείμενου κώδικα που παράγει σε σχέση με τον πηγαίο κώδικα, επομένως μπορεί ο debugger να μην μπορεί να παρακολουθήσει σωστά τη ροή του προγράμματος.

 

Για την περίπτωσή σου, αν το segmentation fault βγαίνει μέσα από τον gdb, είναι πιθανό να μην σου δίνει σωστά το σημείο στο οποίο αυτό συμβαίνει!

 

Νομίζω ότι ο καλύτερος (δυστυχώς) τρόπος είναι οι παλιές-καλές εντολές εκτύπωσης για να εντοπίσεις ακριβώς που συμβαίνει το πρόβλημα...

 

Και θυμίσου να κάνεις recompile όλο το πρόγραμμα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για την περίπτωσή σου, αν το segmentation fault βγαίνει μέσα από τον gdb, είναι πιθανό να μην σου δίνει σωστά το σημείο στο οποίο αυτό συμβαίνει!

 

Χεχε, καλό αυτό μου άρεσε... :-D

 

Οκ έχω μία ιδέα τότε, το τεστάρω και βλέπω

 

Ευχαριστώ!

 

---------- Προσθήκη στις 16:17 ---------- Προηγούμενο μήνυμα στις 16:11 ----------

 

Λοιπόν, όντως το segmentation fault υπάρχει!! αλλά αν χρησιμοποιώ την επιλογή -Ο2 όπως ειπες δεν μου το πετάει στην σωστή θέση!!

 

Οπότε κάνω compile προς το παρόν χωρίς -O2, και όταν με το καλό δεν υπάρχουν bugs το κάνω compile με -Ο2 και είμαι οκ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...