kfoynt Δημοσ. 9 Ιουλίου 2010 Δημοσ. 9 Ιουλίου 2010 Καλησπέρα Έχω ένα πρόγραμμα σε C που χρησιμοποιεί κάποιες συναρτήσεις απο αρχεία Fortran. Χρειάζομαι να κάνω debug και χρησιμοποιώ gdb, αλλά όταν έρχεται η ώρα να κάνω step into στις συναρτήσεις απο Fortran ο debugger απλά εκτελεί την συνάρτηση και πάει στην επόμενη γραμμή μέσα στο αρχείο C. Γίνεται να κάνω debug σε αυτήν την περίπτωση? Άλλη μία ερώτηση ειναι: θέλω να βάλω breakpoints σε αρχεία που δεν βρίσκονται στο ίδιο directory που ειναι και η main, πως βάζω αυτά τα breakpoints? Ευχαριστώ
V.I.Smirnov Δημοσ. 10 Ιουλίου 2010 Δημοσ. 10 Ιουλίου 2010 Για το 2), οι περισσότεροι compilers (IDE) δεν έχουν κανένα πρόβλημα. Εφόσον τα αρχεία ανήκουν στο project, βάζεις τα brekapoint και τα βλέπει κανονικά. Πχ. στο visual studio τα αρχεία που έχουν breakpoints ή bookmarks ανοίγουν όπου και να βρίσκονται (αρκεί βέβαια να ανήκουν στο ίδιο project ή solution). Για τo 1), η συμπεριφορά μάλλον είναι φυσιολογική. Αφού ο compiler αφορά την C δεν μπορεί να δουλέψει στα πηγαία αρχεία της Fortran. Eκτός αν με κάποιον τρόπο παρέχεται η δυνατότητα κάτω από το ίδιο IDE να δουλεύουν αμφότεροι οι compilers και το IDE τους εναλλάσει αυτόματα. Αυτό γίνεται πχ. στο visual studio : Fortran και C++ ταυτόχρονα στο ίδιο solution (υπερσύνολο του project) είναι μια χαρά. Στο ίδιο project όμως, προφανώς δεν επιτρέπεται διότι σε κάθε project o compiler αφορά μία γλώσσα και δεν μπορούν να αναμιχθούν αρχεία από διαφορετικές γλώσσες. Eπιπλέον, στο VS το debugging σε μικτό προγραμματισμό δεν έχει κανένα πρόβλημα. Όπου και αν θέσω breakpoints (σε αρχεία είτε της Fortran είτε της C++) σταματάει κανονικά και η εκτέλεση μπορεί να γίνει βηματικά περνώντας από τη μια γλώσσα στην άλλη, το δοκίμασα...
pinball_elf Δημοσ. 10 Ιουλίου 2010 Δημοσ. 10 Ιουλίου 2010 Debugging C or FORTRAN Programs with gdb. Debugging Fortran programs with gdb.
kfoynt Δημοσ. 10 Ιουλίου 2010 Μέλος Δημοσ. 10 Ιουλίου 2010 ευχαριστώ και τους δύο, θα δοκιμάσω ξανά και θα επανέλθω... ---------- Προσθήκη στις 14:23 ---------- Προηγούμενο μήνυμα στις 13:40 ---------- Λοιπόν, έβαλα τον GUI debugger ddd, και μπόρεσα να βάλω breakpoints σε αρχεία που ειναι σε διαφορετικά directories. Αν γνωρίζει κάποιος πως να το κάνω αυτό στο terminal γράφοντας κάτι σαν: break ../../folder/file.c:315 θα ήταν χρήσιμο.. Κάνω debug και όταν έρχεται η ώρα να κάνω step into στην συνάρτηση fortran παίρνω το μήνυμα: No symbol "SOLVER" in the current context ή Function "SOLVER" is not defined παρόλο που έχω φτιάξει τα flags για τον g77 compiler, g77 - g κτλ... καμία ιδέα? ---------- Προσθήκη στις 14:59 ---------- Προηγούμενο μήνυμα στις 14:23 ---------- Οκ, έκανα μία απατεωνιά: Έφτιαξα μία C συνάρτηση που καλείται απο την fortran συνάρτηση (στην οποία δεν είχα πρόσβαση) και της έβαλα ένα breakpoint. Όταν ο debugger σταμάτησε στην C συνάρτηση πάτησα Up και με πήγε στην αμέσως προηγούμενη stack του debugger που ήταν μέσα στην fortran! Έβαλα ένα breakpoint μέσα στο fortran αρχειο και δουλεύει! Ξαναλέω, όποιος έχει κάποιον πιο αποδοτικό τρόπο για όλα αυτά, ας βοηθήσει..
V.I.Smirnov Δημοσ. 10 Ιουλίου 2010 Δημοσ. 10 Ιουλίου 2010 Έφτιαξα μία C συνάρτηση που καλείται απο την fortran συνάρτηση (στην οποία δεν είχα πρόσβαση) και της έβαλα ένα breakpoint. Όταν ο debugger σταμάτησε στην C συνάρτηση πάτησα Up και με πήγε στην αμέσως προηγούμενη stack του debugger που ήταν μέσα στην fortran! Έβαλα ένα breakpoint μέσα στο fortran αρχειο και δουλεύει! Παρακαλώ, διευκρίνισέ μου κάτι. Αν κατάλαβα καλά, δεν έχεις πρόσβαση στον πηγαίο κώδικα της Fortran. Χρησιμοποιείς μια 'εικονική' συνάρτηση της C ως όρισμα για την ρουτίνα της Fortran και θέτεις εκεί ένα breakpoint. Η εκτέλεση περνάει στην Fortran και σταματά στο breakpoint της C συνάρτησης. Από εκεί και πέρα συνεχίζεις το debug εντός της Fortran. Αυτό που ρωτώ είναι : πώς γίνεται το debug εντός της Fortran αφού δεν έχεις πηγαίο κώδικα γι' αυτήν αλλά μόνον τα εκτελέσιμα ; Ή δεν κατάλαβα σωστά ;
kfoynt Δημοσ. 10 Ιουλίου 2010 Μέλος Δημοσ. 10 Ιουλίου 2010 Παρακαλώ, διευκρίνισέ μου κάτι. Αν κατάλαβα καλά, δεν έχεις πρόσβαση στον πηγαίο κώδικα της Fortran. Χρησιμοποιείς μια 'εικονική' συνάρτηση της C ως όρισμα για την ρουτίνα της Fortran και θέτεις εκεί ένα breakpoint. Η εκτέλεση περνάει στην Fortran και σταματά στο breakpoint της C συνάρτησης. Από εκεί και πέρα συνεχίζεις το debug εντός της Fortran. Αυτό που ρωτώ είναι : πώς γίνεται το debug εντός της Fortran αφού δεν έχεις πηγαίο κώδικα γι' αυτήν αλλά μόνον τα εκτελέσιμα ; Ή δεν κατάλαβα σωστά ; Σωστά κατάλαβες, αυτό κάνω, αλλά έχω τα αρχεία της fortran για κάποιο λόγο όμως το ddd δεν με αφήνει να έχω άμεση πρόσβαση στα αρχεία της fortran, συμπεριφέρεται σαν να μην υπάρχουν! Πχ, όταν ειμαι σε C αρχείο και πάω να περάσω πάνω απο την ρουτινά της fortran, όταν κάνω double click στην ρουτίνα δεν μου την εμφανίζει! ενώ για οποιαδήποτε συνάρτηση της C σε οποιοδήποτε directory και αν ειναι μου την εμφανίζει κανονικα και βάζω όπου θέλω breakpoints. Είναι λίγο μπερδεμένο, αυτό που έκανα στην ουσία είναι: Ξεκίνησα απο C, μπαίνω σε Fortran, μπαίνω ξανά στην C, και μέσω της stack απο τον debugger γυρνάω ένα βήμα πίσω και το αρχείο εμφανίζεται κανονικα. Αντίθετα με απλό double click δεν μπορώ να το δω.. Έχεις καμία ιδέα?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.