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

Ελληνική μετάφραση του IDE του Orwell Dev-C++


migf1

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

Σε συνέχεια του νήματος με τη μετάφραση του IDE της Pelles C ανοίγω νέο θέμα, αυτή τη φορά με τη μετάφραση του IDE του Orwell Dev-C++, μιας και πρόκειται για 2 διαφορετικά προγράμματα.

 

Το Orwell Dev-C++ είναι σύγχρονο fork του παρατημένου επί χρόνια Dev-C++ της Bloodshed Software, το οποίο πλέον αναπτύσσεται τελείως ανεξάρτητα. Διατίθεται τόσο για 32 όσο και για 64-bits, και μάλιστα είτε με ενσωματωμένο το TDM-GCC bundle (ανεξάρτητη διανομή του mingw gcc είναι αυτό) είτε ως σκέτο IDE (σε αυτή την περίπτωση μπορείτε να ορίσετε άλλη διανομή του mingw, όπως για παράδειγμα την original ή του Cygwin... με την προϋπόθεση πως θα την εγκαταστήσετε ξεχωριστά ή την έχετε ήδη εγκατεστημένη).

 

Το Orwell Dev-C++ διατίθεται ήδη με ελληνική μετάφραση, η οποία όμως αντιστοιχεί στην παλιά έκδοση του IDE. Πέρα όμως από αυτό, υπάρχουν κι άλλα προβλήματα τόσο με τη μετάφραση όσο και με το IDE. Τα έχω περιγράψει στο νήμα της Pelles C, αλλά τα ξαναβάζω κι εδώ σε παράθεση για να είναι συγκεντρωμένα όλα μαζί σε αυτό το νήμα.

 

Διαβάστε την πριν κατεβάσετε την μετάφραση (ή και το fork) για να ξέρετε τι κατεβάζετε...

 

...

Σχεδόν τελειώνω όμως την μετάφραση του σύγχρονου fork του Dev-C++ ;) ... αν και πολλά strings τα έχει hardcoded μέσα στον κώδικα. Πέρα από αυτό, δεν υπάρχει καν η δυνατότητα να μεγαλώσουν τα μεγέθη των controls, με αποτέλεσμα περίπου το 30% των ελληνικών της τρέχουσας μετάφρασης (δεν την έχω κάνει εγώ την τρέχουσα) να βγαίνουν εκτός ορίων... βασικά άλλα κόβονται απότομα πάνω στο όριο, κι άλλα ξεχειλίζουν εκτός. Έχω καταβάλει μεγάλη προσπάθεια να περιορίσω όσο μπορώ αυτό το φαινόμενο στην καινούρια μετάφραση, αλλά αφενός δεν μπορώ να το εξαλείψω τελείως, κι αφετέρου έχω αναγκαστεί να κάνω συμβιβασμούς στην απόδοση των μεταφράσεων (αλλιώς δεν χωράνε).

 

Γενικώς, παρά τις πολλές βελτιώσεις που του έχει κάνει αυτός που έχει αναλάβει το σύγχρονο fork, η γενικότερη αίσθηση που αποκομίζει κανείς συγκρίνοντας τα 2 περιβάλλοντα είναι πως η Pelles C έχει γραφτεί με επαγγελματικά στάνταρ, ενώ το Dev-C++ με ερασιτεχνικά.

 

Υπάρχουν όμως και πράγματα στον Dev-C++ (κυρίως ρυθμίσεις & ευκολίες) που απουσιάζουν από την Pelles C) Από την άλλη μεριά, είναι τόσες πολλές οι επιλογές μέσα στο Dev-C++ που από ένα σημείο και μετά σε... ζαλίζουν.

 

Όπως και να 'χει, είναι πολύ πιθανό σε καμιά ώρα να ανεβάσω ένα 1st draft και αυτής της μετάφρασης (σε ξεχωριστό νήμα), κυρίως για την αμυδρή πιθανότητα να βρεθεί κανείς να της κάνει λίγο beta testing :P

 

Λοιπόν, η μετάφραση είναι ένα απλό αρχείο κείμενου, το οποίο απλώς το τοποθετείτε στον φάκελο \Lang του Dev-C++ και κατόπιν επιλέγετε Greek (Ελληνικά) μέσα από το IDE (Tools -> Environment options).

 

Λήψη: Greek_Ελληνικά.zip

 

Όπως μπορείτε να διαπιστώσετε και μόνοι σας ανοίγοντάς το σε οποιοδήποτε text editor, είναι μεταφρασμένα όλα τα μηνύματα. Αυτά που εξακολουθούν να εμφανίζονται στα Αγγλικά μέσα στο IDE πολύ απλά είναι hard-coded στον κώδικα του προγράμματος .Αυτό θα πρέπει να το διορθώσει ο κατασκευαστής (θα τον ενημερώσω σχετικά)

 

Η παλιά μετάφραση (δεν την έχω κάνει εγώ) έχει το όνομα Greek.lng, δεν χρειάζεται να τη σβήσετε. Η καινούρια (η δικιά μου) ονομάζεται Greek_Ελληνικά.lng και εμφανίζεται με ανάλογο όνομα στο σχετικό μενού επιλογής. Οπότε μπορείτε να συγκρίνετε όποτε το επιθυμείτε την παλιά με τη νέα μετάφραση ;)

 

Να αναφέρω πως δεν είναι στα υψηλά στάνταρ της μετάφρασης που έχω κάνει για την Pelles C, για τους λόγους που αναφέρω στην παράθεση παραπάνω. Παρόλα αυτά χρησιμοποιεί την επίσημη ορολογία της Microsoft σε ποσοστό μεγαλύτερο του 90%.

 

Επίσης, παρόλο που προσπάθησα να ελέγξω όλες τις πιθανές περιπτώσεις εμφάνισης των μηνυμάτων μέσα στο IDE, είναι πολύ πιθανό να μην το έχω καταφέρει πλήρως. Ο βασικός λόγος είναι για να περιορίσω το φαινόμενο των υπερχειλισμένων/κουτσουρεμένων ελληνικών φράσεων σε διάφορα μέρη του IDE. Νομίζω το έχω πετύχει σε πολύ μεγάλο βαθμό, παρόλο που υπάρχουν μερικά τέτοια σημεία, τα οποία είναι έως και αδύνατον να διορθωθούν αν δεν ο κατασκευαστής δεν μεριμνήσει να μεγαλώσει τα κουμπιά/controls/κλπ προγραματιστικά (ή έστω να μας δώσει έναν τρόπο να τα αλλάζουμε εμείς... τώρα τα έχει κι αυτά hard-coded).

 

Επίσης σημειώστε πως δεν έχω ελέγξει αν υπάρχουν κοινά μνημονικά στα στοιχεία των μενού/διαλόγων ( τα υπογραμμισμένα γράμματα συντόμευσης, όταν πατάτε το ALT key για να περιηγηθείτε με το πληκτρολόγιο, αντί για ποντίκι). Υπάρχει κι ένα bug εκεί, δείτε το υστερόγραφο στο τέλος του post.

 

Τέλος, δεν έχω μεταφράσει τα Tips of the Days (βαρέθηκα).

 

Παραθέτω και μερικά screen-shots...

 

post-38307-0-08953800-1339356353_thumb.jpg post-38307-0-50230400-1339356356_thumb.jpg post-38307-0-01560800-1339356345_thumb.jpg

 

post-38307-0-54620300-1339356347_thumb.jpg post-38307-0-19190500-1339356350_thumb.jpg

 

ΥΓ1. Το Orewell Dev-C++ βρίσκεται σε διαρκή ανάπτυξη, οπότε ρίχνετε ματιές για τυχόν αναβαθμίσεις του στο site του. Για παράδειγμα, μέσα στην βδομάδα θα βγει νέα έκδοση που θα φτιάχνει ένα bug που εμφανίζεται μόνο σε Vista/Win7 και κατά το οποίο στα περισσότερα dialogs αν πατήσετε το πλήκτρο ALT τότε εξαφανίζονται τα πεδία του διαλόγου (αν κουνήσετε το ποντίκι σας πάνω τους επανέρχονται).

 

ΥΓ2. Ακόμα δεν την έχω στείλει την μετάφραση στον δημιουργό του IDE. Θα περιμένω πρώτα μερικές ημέρες μήπως βρεθεί καμιά χοντράδα :P

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

Ετσι ετσι. Αντε ανοιξε και κανα λογαριασμο στο wiki και γραψε καποια στοιχειωδες πραγματα πχ http://en.wikipedia.org/wiki/Debugger

 

 

 

ΥΓ ΝΑΙ εχω κολλημα με τον debugger

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

Thanks παίδες

 

@papi:

 

Δεν μπορώ με τίποτε να βρω πως και αν μπορώ να κάνω debug με τον mingw-gdb εκτελέσιμα του win32 api. To Dev-C++ κάνει; Από λίγο που δοκίμασα νομίζω πως ούτε αυτό κάνει, αλλά αφενός δεν το 'χω ψάξει ακόμα πολύ, κι αφετέρου δεν το έχω στημένο με το TDM-GCC... σκέτο το IDE έχω στήσει (και μάλιστα το portable version που δεν θέλει εγκατάσταση) κι απλώς έχω φτιάξει ένα compiler-profile με τα paths και τα executables του mingw32 που έχω στο μηχανάκι μου.

 

Κατά καιρούς έχω δοκιμάσει μερικά gdb front-ends για Windows (π.χ. Beaver, προχτές βρήκα και το Affinic Debugger) αλλά τα περισσότερα είναι γτπ (άλλα δεν δείχνουν έξοδο, άλλα θέλουν το cygwin, άλλα είναι αρχαία και δεν τρέχουν καν)... πάντως με κανένα δεν έχω καταφέρει να κάνω debug win32api πρόγραμμα με gdb.

 

Πρέπει κάποια στιγμή να κάτσω να στήσω το Code::Blocks που έχει ενσωματωμένο gdb front-end και να δω αν κάνει εκείνο debug win32api apps. Αν κάνει (που πολύ αμφιβάλλω) θα κοιτάξω τι command-ine args χρησιμοποιεί.

 

Δεν με πειράζει αν δεν έχω γραφικό front-end του gdb, γιατί έχω μάθει και τον λειτουργώ σε text-mode έτσι κι αλλιώς. Και μάλιστα μπορώ να πως κάνω πιο γρήγορα debug έτσι, παρά με τον gui debugger της Pelles C (εκεί κάνω debug τα win32 specific). Αν ξέρει κανείς αν & πως μπορούμε να κάνουμε debug win32api apps με gdb, θα του ήμουν ευγνώμων!

 

 

@moukoublen:

 

Μόνο αυτό το fork γνωρίζω εγώ. Δεν πρέπει να υπάρχει άλλο, αλλά δεν βάζω και το χέρι μου στη φωτιά. Υπάρχει κι ένα RAD tool για wxWidgets, που λέγεται wxDev-C++, αλλά νομίζω είναι μονάχα για οπτικό σχεδιασμό των resources σε wxWidgets (πάλι δεν βάζω το χέρι μου στη φωτιά όμως).

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

...

Αν ξέρει κανείς αν & πως μπορούμε να κάνουμε debug win32api apps με gdb, θα του ήμουν ευγνώμων!

Τελικά είναι φοβερό τι μπορεί να πάθει κανείς από μια απροσεξία. Σε ΟΛΑ μου τα win32api buld-scripts είχα ορισμένο το -s στον linker του gcc, με αποτέλεσμα να γίνονται stripped-off τα symbol-tables από το εκτελέσιμο (Ε Λ Ε Ο Σ).

 

Οπότε μια χαρά γίνονται debug και τα win32api apps με τον gdb ... OEO !!!!

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

Τελικά είναι φοβερό τι μπορεί να πάθει κανείς από μια απροσεξία. Σε ΟΛΑ μου τα win32api buld-scripts είχα ορισμένο το -s στον linker του gcc, με αποτέλεσμα να γίνονται stripped-off τα symbol-tables από το εκτελέσιμο (Ε Λ Ε Ο Σ).

 

Οπότε μια χαρά γίνονται debug και τα win32api apps με τον gdb ... OEO !!!!

Όταν είχα εγκατεστημένο το QT Creator (IDE) για ανάπτυξη SYMBIAN QT C++ εφαρμογών, θυμάμαι ότι ο Debugger του πρέπει να ήταν κάποια έκδοση του GDB (ο Compiler [πρέπει να] ήταν ο MinGW), αλλά η απόκριση του ήταν πολύ αργή, τόσο που δεν μπορούσες ουσιαστικά να εργασθείς μαζί του παρόλο που τα προγράμματα μεταφραζόντουσαν σε 80x86 (Native) εφαρμογές (στο Release mode έκανε cross-compile σε ARM) και λογικά ΔΕΝ έπρεπε να υπάρχει πέναλτι ταχύτητας.

 

Έκτοτε σχημάτισα πολύ κακιά εντύπωση για τον GDB σε Windows (λόγο ταχύτητας απόκρισης) - τώρα πως πάει το πράμα; Έχει βελτιωθεί η κατάσταση ή έπεσα στην περίπτωση (κακιά υλοποίηση στις πρώτες εκδόσεις του QT Creator);

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

Όταν είχα εγκατεστημένο το QT Creator (IDE) για ανάπτυξη SYMBIAN QT C++ εφαρμογών, θυμάμαι ότι ο Debugger του πρέπει να ήταν κάποια έκδοση του GDB (ο Compiler [πρέπει να] ήταν ο MinGW), αλλά η απόκριση του ήταν πολύ αργή, τόσο που δεν μπορούσες ουσιαστικά να εργασθείς μαζί του παρόλο που τα προγράμματα μεταφραζόντουσαν σε 80x86 (Native) εφαρμογές (στο Release mode έκανε cross-compile σε ARM) και λογικά ΔΕΝ έπρεπε να υπάρχει πέναλτι ταχύτητας.

 

Έκτοτε σχημάτισα πολύ κακιά εντύπωση για τον GDB σε Windows (λόγο ταχύτητας απόκρισης) - τώρα πως πάει το πράμα; Έχει βελτιωθεί η κατάσταση ή έπεσα στην περίπτωση (κακιά υλοποίηση στις πρώτες εκδόσεις του QT Creator);

Σε text-mode πάει σφαίρα! Στον Dev-C++ σέρνεται το σύμπαν !!!!!!!!! Μιλάω πάντα για win32api apps. Πρέπει να παίζει πολύ μεγάλο ρόλο το GUI front-end.

Σε GTK+ δεν αντιμετώπισα πρόβλημα πάντως, αν κι εκεί δούλευα σε text-mode.

 

Θα πρέπει να ψαχτώ λιγάκι με τις ρυθμίσεις του gcc και του gdb, καθώς και με τα διάφορα front-ends/IDEs για Windows και να επανέλθω.

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

[..]Στον Dev-C++ σέρνεται το σύμπαν !!!!!!!!! Μιλάω πάντα για win32api apps. Πρέπει να παίζει πολύ μεγάλο ρόλο το GUI front-end.[..][..]

Thx για την διευκρίνηση! Άρα ήταν (είναι) θέμα GDB και διεπαφής (τουλάχιστον σε Windows), κρίμα.

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

Thx για την διευκρίνηση! Άρα ήταν (είναι) θέμα GDB και διεπαφής (τουλάχιστον σε Windows), κρίμα.

Μόλις έστησα (ξανά) το Code::Blocks, κι έκανα μια δοκιμή. Εδώ πάει σφαίρα!

 

Πάντως φίλε xdir (:)), νομίζω δεν υπάρχει λόγος να αλλάξεις τον debugger του VS. Πρέπει να είναι με διαφορά το καλύτερο εργαλείο debugging που υπάρχει για native Win32/64 εφαρμογές.

 

Όχι ότι ο gdb υστερεί σε κάτι τεχνικά, αλλά ειδικά για Windows δεν έχω βρει ακόμα front-end αντάξιο των δυνατοτήτων του. Υπάρχουν βέβαια πολλά IDEs με ενσωματωμένο front-end για τον gdb τα οποία δεν τα έχω δουλέψει. (ή τους έχω ρίξει απλώς μια ματιά κι αυτό πολύ παλαιότερα)... όπως π.χ. τα CodeLite, NetBeans, Eclipse για να αναφέρω 3 δυνατά ονόματα.

 

Ενδεχομένως να παρέχουν πολύ καλύτερη υποστήριξη, αλλά ποιος κάθεται να ψάχνει τόσες πολλές και διαφορετικές επιλογές, και κυρίως ποιος κάθεται να μάθει νέο IDE μόνο και μόνο για το debugging.

 

Παρεμπιπτόντως, όντως "τα σπάει" το Code::Blocks και η GUI υποστήριξη που παρέχει για τον gdb δεν δείχνει μόνο ταχύτατη αλλά και πλήρης ...

 

post-38307-0-05846700-1339426712_thumb.jpg

 

Δεν το θυμόμουν! Επίσης δεν θυμάμαι για ποιους λόγους το είχα απορρίψει παλιότερα ως βασικό μου IDE... μάλλον πρέπει να το ξανακοιτάξω :)

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

Μόλις έστησα (ξανά) το Code::Blocks, κι έκανα μια δοκιμή. Εδώ πάει σφαίρα!

 

Πάντως φίλε xdir (:)), νομίζω δεν υπάρχει λόγος να αλλάξεις τον debugger του VS. Πρέπει να είναι με διαφορά το καλύτερο εργαλείο debugging που υπάρχει για native Win32/64 εφαρμογές.

 

Όχι ότι ο gdb υστερεί σε κάτι τεχνικά, αλλά ειδικά για Windows δεν έχω βρει ακόμα front-end αντάξιο των δυνατοτήτων του. Υπάρχουν βέβαια πολλά IDEs με ενσωματωμένο front-end για τον gdb τα οποία δεν τα έχω δουλέψει. (ή τους έχω ρίξει απλώς μια ματιά κι αυτό πολύ παλαιότερα)... όπως π.χ. τα CodeLite, NetBeans, Eclipse για να αναφέρω 3 δυνατά ονόματα.

 

Ενδεχομένως να παρέχουν πολύ καλύτερη υποστήριξη, αλλά ποιος κάθεται να ψάχνει τόσες πολλές και διαφορετικές επιλογές, και κυρίως ποιος κάθεται να μάθει νέο IDE μόνο και μόνο για το debugging.

 

Παρεμπιπτόντως, όντως "τα σπάει" το Code::Blocks και η GUI υποστήριξη που παρέχει για τον gdb δεν δείχνει μόνο ταχύτατη αλλά και πλήρης ...

 

post-38307-0-05846700-1339426712_thumb.jpg[..]

Άρα είναι θέμα υλοποίησης λοιπόν έκαστου IDE!

 

Χμ.. Σχετικά με τους Debuggers, προτιμώ τον προσφερόμενο από τον C++ Builder IDE καθώς πέραν όλων των τυπικών δυνατοτήτων του (είναι μια μετεξέλιξη ας πούμε του παλιού κλασσικού "Borland Turbo Debugger"), παρέχει και ένα ισχυρό ατού, έναν πανίσχυρο "Memory Checker" (λέγε με Code Guard) ο οποίος μπορεί να ανιχνεύσει αρκετά τυπικά (αλλά πολύ εκνευριστικά) σφάλμα διαχείρισης μνήμης σε κώδικα C & C++ (σκέψου τον σαν ένα αρκετά φιλικό και πλήρως οπτικό & ενσωματωμένο στο IDE του CΒ "Valgrind") πράγμα που λύνει τα χέρια όταν γράφεις πολύπλοκο κώδικα.

 

Σχετικά με το Code::Blocks έχω ακούσει καλά λόγια από φίλο μου που το χρησιμοποιεί σε LINUX.

 

Νομίζω ότι είναι βελτιστοποιημένο για ένα UI framework (WxWidgets ή κάπως έτσι).

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

Άρα είναι θέμα υλοποίησης λοιπόν έκαστου IDE!

Ναι, το επιβεβαιώσαμε (myth busted :lol:)

 

Χμ.. Σχετικά με τους Debuggers, προτιμώ τον προσφερόμενο από τον C++ Builder καθώς πέραν όλων των τυπικών δυνατοτήτων του, παρέχει και ένα ισχυρό ατού, έναν πανίσχυρο "Memory Checker" (λέγε με Code Guard) ο οποίος μπορεί να ανιχνεύσει αρκετά τυπικά (αλλά πολύ εκνευριστικά) σφάλμα διαχείρισης μνήμης σε κώδικα C & C++ (σκέψου τον σαν ένα αρκετά φιλικό και πλήρως οπτικό & ενσωματωμένο στο IDE του CB++ "Valgrind") πράγμα που λύνει τα χέρια όταν γράφεις πολύπλοκο κώδικα.

Συμπτωματικά μόλις έγραφα στο άλλο νήμα για memory-leaks και ειδικά εργαλεία που χρειάζονται για τον εντοπισμό τους, και όντως είχα το Valgrind στο μυαλό μου όταν το έγραφα. Το έχει ενσωματωμένο το Code::Blocks? Είχα την εντύπωση πως είναι μόνο για posix περιβάλλοντα. Το έχουν κάνει port κι αυτό τα θηρία;;; Θα το τσεκάρω ευθύς αμέσως!

 

ΥΓ. Btw, ο lead developer του Code::Blocks είναι Έλληνας :)

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

Ναι, το επιβεβαιώσαμε (myth busted :lol:)

 

 

Συμπτωματικά μόλις έγραφα στο άλλο νήμα για memory-leaks και ειδικά εργαλεία που χρειάζονται για τον εντοπισμό τους, και όντως είχα το Valgrind στο μυαλό μου όταν το έγραφα. Το έχει ενσωματωμένο το Code::Blocks? Είχα την εντύπωση πως είναι μόνο για posix περιβάλλοντα. Το έχουν κάνει port κι αυτό τα θηρία;;; Θα το τσεκάρω ευθύς αμέσως!

 

ΥΓ. Btw, ο lead developer του Code::Blocks είναι Έλληνας :)

Για τον Code::Blocks δεν ξέρω αν το ενσωματώνει (νομίζω ότι Valgrind δεν υπάρχει καν για Windows) - μιλούσα όμως για ένα ανάλογο εργαλείο (ονόματι Code Guard) που προσφέρει ο Debugger του C++ Builder (απλά ανέφερα το Valgrind κατ' αναλογία για να γίνει πιο κατανοητό το τι είναι ο Code Guard που προσφέρει το C++ Builder IDE -για όσους δεν έχουν ασχοληθεί με C++ Builder ή Delphi ;)).

 

ΥΓ. Btw, ο lead developer του Code::Blocks είναι Έλληνας:)

Δεν το γνώριζα! Nice! :)

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

Για τον Code::Blocks δεν ξέρω αν το ενσωματώνει (νομίζω ότι Valgrind δεν υπάρχει καν για Windows) - μιλούσα όμως για ένα ανάλογο εργαλείο (ονόματι Code Guard) που προσφέρει ο Debugger του C++ Builder (απλά ανέφερα το Valgrind κατ' αναλογία για να γίνει πιο κατανοητό το τι είναι ο Code Guard που προσφέρει το C++ Builder IDE -για όσους δεν έχουν ασχοληθεί με C++ Builder ή Delphi ;)).

...

Α, οπότε παρερμήνεψα το προηγούμενο ποστ σου (νόμιζα πως έγραψες ότι υπάρχει ενσωματωμένο το Valgrind στο Code::Blocks). Έτσι ήξερα κι εγώ, ότι είναι μόνο για posix (και όντως έτσι είναι, το ξανα-τσεκάρισα)...πάντως νομίζω διάβασα πως υπάρχει valgrind plugin για την posix έκδοση του Code::Blocks.

 

Λοιπόν, με την ευκαιρία, επειδή το στάνταρ mtrace inteface του gcc δεν είναι υλοποιημένο στο port του mingw, εγώ χρησιμοποιώ ένα πανάρχαιο αλλά αρκούντως αποτελεσματικό εναλλακτικό, που ονομάζεται MSS (follow the links).

 

Διατίθεται σε μορφή κώδικα, που είναι γραμμένος σε ANSI C. Χρειάζεται κάτι ψιλο-αλλαγές στα compiler flags του gcc στο makefile του, επειδή είναι από την εποχή του... Νώε. Τίποτα το τρομερό... άλλωστε τα αναγράφει και στο compilation (σταματάει ή βγάζει warnings) οπότε απλά πάτε και τα σβήνετε από το makeifile (1-2 είναι, δεν είναι πολλά).

 

Η ιδέα είναι ίδια με του mtrace(), με την προσθήκη της βιβλιοθήκης libmss.a που βγάζει το make στο κεντρικό φάκελο βιβλιοθηκών του gcc, και το αρχείο mss.h στο κεντρικό φάκελο των includes του gcc (αλλιώς θα πρέπει να ορίζετε χειροκίνητα στη γραμμή εντολών του gcc, με -Ι και -L)

 

Έχει διάφορες ρυθμίσεις, καθώς και ένα μικρό API με συναρτήσεις για να κάνει κανείς on-demand tracing σε συγκεκριμένα σημεία του κώδικά του, αλλά και χωρίς τίποτα από όλα αυτά είναι ιδιαίτερα χρήσιμο.

 

Με τον παρακάτω κώδικα, και περνώντας τα compile flags -DMSS και -lmms στο τέλος της γραμμής εντολών του gcc πέρνεται το log που ακολουθεί μετά τον κώδικα...

 

Κώδικας:

 

 

 

>
#include <stdio.h>
#include <stdlib.h>
#include <mss.h>		// <--- απαραίτητο

int main( void )
{
char *leak = calloc(10, sizeof(char) );

printf("Hello world!\n");

// free( leak );	// αυτό πρέπει να μας το δείξει στο log
return 0;
}

 

 

 

Log:

 

 

 

>
------------------------------------------------------------------------------
MSS -- Memory Supervision System version 1.2
Copyright (C) 1998  Juan Jesus Alcolea Picazo and Peter Palotas

MSS Normal Logfile.

WARNING: Environment variable `MSS_CFG' not set. Unable to use global 
		configuration file.
WARNING: No local configuration file found either, using hard-coded default 
		values only.

Option List:

LogFileName         				mss.log    	(default)
GenerateSpecialLog              	No 			(default)
SpecialLogFileName              	slog.mss   	(default)
LogToSTDOUT         				No 			(default)
LogToSTDERR         				No 			(default)
ShowLogs                        	Yes        	(default)
WatchLimits         				Yes        	(default)
WatchSize           				32 			(default)
WatchValue                      	0xA8   		(default)
CheckOnDealloc                  	Yes        	(default)
CheckAllOnAlloc     				No 			(default)
FillMemOnAlloc                  	Yes        	(default)
FillMemOnAllocValue 				0x98   		(default)
FillMemOnDeAlloc                	Yes        	(default)
FillMemOnDeAllocValue   			0x1000086  	(default)
ExitOnWarning       				No 			(default)
FalseAllocFails     				0          	(default)
ExtraNewline                    	Yes        	(default)
WordWrap                        	Yes        	(default)
WarnOnAllNULLDeallocs   			Yes        	(default)
ZeroLenAllocReturnNULL          	Yes        	(default)

------------------------------------------------------------------------------
Logging started at Tue Jun 12 12:40:58 2012

LOG: main (line 7 of main.c) allocated 10 bytes at 0094e888 using `calloc'.

------------------------------------------------------------------------------
MSG: Listing info about allocated blocks at end(?) of program:
INFO: 1 blocks currently allocated.
INFO: 10 bytes of memory currently used.
INFO: 10 bytes maximum memory used.

Method   	Times Called	Successful Calls
---------------------------------------------
new 				0            	0 
new[]   			0            	0 
delete          	0            	0 
delete[]        	0            	0 
malloc          	0            	0 
xmalloc 			0            	0 
realloc 			0            	0 
xrealloc        	0            	0 
strdup          	0            	0 
calloc          	1            	1 
free            	0            	0 
cfree   			0            	0 
xfree   			0            	0 
------------------------------------------------------------------------------

 

 

Το ζουμί είναι στον πίνακα στο τέλος, που δείχνει πόσα allocs και de-allocs έχει κάνει το πρόγραμμά σας. Αν δεν ταιριάζουν, προφανώς έχει πρόβλημα (it leaks).

Διορθώνοντας τον κώδικα (προσθέτοντας δηλαδή και το free() ) το παραγόμενο log γίνεται...

 

 

 

>
------------------------------------------------------------------------------
MSS -- Memory Supervision System version 1.2
Copyright (C) 1998  Juan Jesus Alcolea Picazo and Peter Palotas

MSS Normal Logfile.

WARNING: Environment variable `MSS_CFG' not set. Unable to use global 
		configuration file.
WARNING: No local configuration file found either, using hard-coded default 
		values only.

Option List:

LogFileName         				mss.log    	(default)
GenerateSpecialLog              	No 			(default)
SpecialLogFileName              	slog.mss   	(default)
LogToSTDOUT         				No 			(default)
LogToSTDERR         				No 			(default)
ShowLogs                        	Yes        	(default)
WatchLimits         				Yes        	(default)
WatchSize           				32 			(default)
WatchValue                      	0xA8   		(default)
CheckOnDealloc                  	Yes        	(default)
CheckAllOnAlloc     				No 			(default)
FillMemOnAlloc                  	Yes        	(default)
FillMemOnAllocValue 				0x98   		(default)
FillMemOnDeAlloc                	Yes        	(default)
FillMemOnDeAllocValue   			0x1000086  	(default)
ExitOnWarning       				No 			(default)
FalseAllocFails     				0          	(default)
ExtraNewline                    	Yes        	(default)
WordWrap                        	Yes        	(default)
WarnOnAllNULLDeallocs   			Yes        	(default)
ZeroLenAllocReturnNULL          	Yes        	(default)

------------------------------------------------------------------------------
Logging started at Tue Jun 12 14:57:01 2012

LOG: main (line 7 of main.c) allocated 10 bytes at 0063e888 using `calloc'.

LOG: main (line 12 of main.c) deallocated a block sized 10 bytes at 0063e888 
	(no label) using `free' previously allocated by `calloc' in main (line 
	7 of main.c).

------------------------------------------------------------------------------
MSG: Listing info about allocated blocks at end(?) of program:
INFO: NO blocks currently allocated.
INFO: 10 bytes maximum memory used.

Method   	Times Called	Successful Calls
---------------------------------------------
new 				0            	0 
new[]   			0            	0 
delete          	0            	0 
delete[]        	0            	0 
malloc          	0            	0 
xmalloc 			0            	0 
realloc 			0            	0 
xrealloc        	0            	0 
strdup          	0            	0 
calloc          	1            	1 
free            	1            	1 
cfree   			0            	0 
xfree   			0            	0 
------------------------------------------------------------------------------

 

 

Την αλλοπρόσαλλη στοίχιση την κάνει το φόρουμ, όχι το log :)

 

Βλέπουμε λοιπόν πως τώρα τα calloc() ταιριάζουν με τα free() οπότε από αυτή την πλευρά είμαστε καλυμμένοι. Επιπρόσθετα, πάνω από τον πίνακα έχει μια λίστα με τις συναρτήσεις και τις γραμμές που κάνουν calloc() και free().

 

Γενικώς μπορείτε να το ρυθμίσετε να σας δείχνει πολύτιμες πληροφορίες, π.χ. πότε κάνετε free() σε δείκτες που είναι NULL, πότε κάνετε allocate 0 bytes μνήμης, και διάφορα άλλα.

 

Κυκλοφορούν πολλά τέτοια memory checkers, ειδικά για C/C++... απλώς το παραπάνω το χρησιμοποιώ με επιτυχία πολλά χρόνια, για αυτό και το ανάφερα.

 

EDIT:

 

Έχει κανείς άλλος πρόβλημα με την τελευταία έκδοση του AMD CodeAnalyst & Profiler?

Κατέβασα προχτές την πρόσφατη 32-μπιτ έκδοση και την πέρασα στα XP και μόλις πήγα να το τρέξω κράσαρε (δεν το ψαξα γιατί ήταν αργά, αλλά μάλλον τους έχουν ξεφύγει κάποια 64-μπιτα dll νομίζω στην 32-bit έκδοση)... ξέρει κανείς τίποτα για να μη με φάει το ψάξιμο πάλι;

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

 

Α, οπότε παρερμήνεψα το προηγούμενο ποστ σου (νόμιζα πως έγραψες ότι υπάρχει ενσωματωμένο το Valgrind στο Code::Blocks). Έτσι ήξερα κι εγώ, ότι είναι μόνο για posix (και όντως έτσι είναι, το ξανα-τσεκάρισα)...πάντως νομίζω διάβασα πως υπάρχει valgrind plugin για την posix έκδοση του Code::Blocks.

 

Λοιπόν, με την ευκαιρία, επειδή το στάνταρ mtrace inteface του gcc δεν είναι υλοποιημένο στο port του mingw, εγώ χρησιμοποιώ ένα πανάρχαιο αλλά αρκούντως αποτελεσματικό εναλλακτικό, που ονομάζεται MSS (follow the links).

 

Διατίθεται σε μορφή κώδικα, που είναι γραμμένος σε ANSI C. Χρειάζεται κάτι ψιλο-αλλαγές στα compiler flags του gcc στο makefile του, επειδή είναι από την εποχή του... Νώε. Τίποτα το τρομερό... άλλωστε τα αναγράφει και στο compilation (σταματάει ή βγάζει warnings) οπότε απλά πάτε και τα σβήνετε από το makeifile (1-2 είναι, δεν είναι πολλά).

 

Η ιδέα είναι ίδια με του mtrace(), με την προσθήκη της βιβλιοθήκης libmss.a που βγάζει το make στο κεντρικό φάκελο βιβλιοθηκών του gcc, και το αρχείο mss.h στο κεντρικό φάκελο των includes του gcc (αλλιώς θα πρέπει να ορίζετε χειροκίνητα στη γραμμή εντολών του gcc, με -Ι και -L)

 

Έχει διάφορες ρυθμίσεις, καθώς και ένα μικρό API με συναρτήσεις για να κάνει κανείς on-demand tracing σε συγκεκριμένα σημεία του κώδικά του, αλλά και χωρίς τίποτα από όλα αυτά είναι ιδιαίτερα χρήσιμο.

 

Με τον παρακάτω κώδικα, και περνώντας τα compile flags -DMSS και -lmms στο τέλος της γραμμής εντολών του gcc πέρνεται το log που ακολουθεί μετά τον κώδικα...

 

Κώδικας:

 

 

 

>
#include <stdio.h>
#include <stdlib.h>
#include <mss.h>		// <--- απαραίτητο

int main( void )
{
char *leak = calloc(10, sizeof(char) );

printf("Hello world!\n");

// free( leak );	// αυτό πρέπει να μας το δείξει στο log
return 0;
}

 

 

 

Log:

 

 

 

>
------------------------------------------------------------------------------
MSS -- Memory Supervision System version 1.2
Copyright (C) 1998  Juan Jesus Alcolea Picazo and Peter Palotas

MSS Normal Logfile.

WARNING: Environment variable `MSS_CFG' not set. Unable to use global 
		configuration file.
WARNING: No local configuration file found either, using hard-coded default 
		values only.

Option List:

LogFileName         				mss.log    	(default)
GenerateSpecialLog              	No 			(default)
SpecialLogFileName              	slog.mss   	(default)
LogToSTDOUT         				No 			(default)
LogToSTDERR         				No 			(default)
ShowLogs                        	Yes        	(default)
WatchLimits         				Yes        	(default)
WatchSize           				32 			(default)
WatchValue                      	0xA8   		(default)
CheckOnDealloc                  	Yes        	(default)
CheckAllOnAlloc     				No 			(default)
FillMemOnAlloc                  	Yes        	(default)
FillMemOnAllocValue 				0x98   		(default)
FillMemOnDeAlloc                	Yes        	(default)
FillMemOnDeAllocValue   			0x1000086  	(default)
ExitOnWarning       				No 			(default)
FalseAllocFails     				0          	(default)
ExtraNewline                    	Yes        	(default)
WordWrap                        	Yes        	(default)
WarnOnAllNULLDeallocs   			Yes        	(default)
ZeroLenAllocReturnNULL          	Yes        	(default)

------------------------------------------------------------------------------
Logging started at Tue Jun 12 12:40:58 2012

LOG: main (line 7 of main.c) allocated 10 bytes at 0094e888 using `calloc'.

------------------------------------------------------------------------------
MSG: Listing info about allocated blocks at end(?) of program:
INFO: 1 blocks currently allocated.
INFO: 10 bytes of memory currently used.
INFO: 10 bytes maximum memory used.

Method   	Times Called	Successful Calls
---------------------------------------------
new 				0            	0 
new[]   			0            	0 
delete          	0            	0 
delete[]        	0            	0 
malloc          	0            	0 
xmalloc 			0            	0 
realloc 			0            	0 
xrealloc        	0            	0 
strdup          	0            	0 
calloc          	1            	1 
free            	0            	0 
cfree   			0            	0 
xfree   			0            	0 
------------------------------------------------------------------------------

 

 

Το ζουμί είναι στον πίνακα στο τέλος, που δείχνει πόσα allocs και de-allocs έχει κάνει το πρόγραμμά σας. Αν δεν ταιριάζουν, προφανώς έχει πρόβλημα (it leaks).

Διορθώνοντας τον κώδικα (προσθέτοντας δηλαδή και το free() ) το παραγόμενο log γίνεται...

 

 

 

>
------------------------------------------------------------------------------
MSS -- Memory Supervision System version 1.2
Copyright (C) 1998  Juan Jesus Alcolea Picazo and Peter Palotas

MSS Normal Logfile.

WARNING: Environment variable `MSS_CFG' not set. Unable to use global 
		configuration file.
WARNING: No local configuration file found either, using hard-coded default 
		values only.

Option List:

LogFileName         				mss.log    	(default)
GenerateSpecialLog              	No 			(default)
SpecialLogFileName              	slog.mss   	(default)
LogToSTDOUT         				No 			(default)
LogToSTDERR         				No 			(default)
ShowLogs                        	Yes        	(default)
WatchLimits         				Yes        	(default)
WatchSize           				32 			(default)
WatchValue                      	0xA8   		(default)
CheckOnDealloc                  	Yes        	(default)
CheckAllOnAlloc     				No 			(default)
FillMemOnAlloc                  	Yes        	(default)
FillMemOnAllocValue 				0x98   		(default)
FillMemOnDeAlloc                	Yes        	(default)
FillMemOnDeAllocValue   			0x1000086  	(default)
ExitOnWarning       				No 			(default)
FalseAllocFails     				0          	(default)
ExtraNewline                    	Yes        	(default)
WordWrap                        	Yes        	(default)
WarnOnAllNULLDeallocs   			Yes        	(default)
ZeroLenAllocReturnNULL          	Yes        	(default)

------------------------------------------------------------------------------
Logging started at Tue Jun 12 14:57:01 2012

LOG: main (line 7 of main.c) allocated 10 bytes at 0063e888 using `calloc'.

LOG: main (line 12 of main.c) deallocated a block sized 10 bytes at 0063e888 
	(no label) using `free' previously allocated by `calloc' in main (line 
	7 of main.c).

------------------------------------------------------------------------------
MSG: Listing info about allocated blocks at end(?) of program:
INFO: NO blocks currently allocated.
INFO: 10 bytes maximum memory used.

Method   	Times Called	Successful Calls
---------------------------------------------
new 				0            	0 
new[]   			0            	0 
delete          	0            	0 
delete[]        	0            	0 
malloc          	0            	0 
xmalloc 			0            	0 
realloc 			0            	0 
xrealloc        	0            	0 
strdup          	0            	0 
calloc          	1            	1 
free            	1            	1 
cfree   			0            	0 
xfree   			0            	0 
------------------------------------------------------------------------------

 

 

Την αλλοπρόσαλλη στοίχιση την κάνει το φόρουμ, όχι το log :)

 

Βλέπουμε λοιπόν πως τώρα τα calloc() ταιριάζουν με τα free() οπότε από αυτή την πλευρά είμαστε καλυμμένοι. Επιπρόσθετα, πάνω από τον πίνακα έχει μια λίστα με τις συναρτήσεις και τις γραμμές που κάνουν calloc() και free().

 

Γενικώς μπορείτε να το ρυθμίσετε να σας δείχνει πολύτιμες πληροφορίες, π.χ. πότε κάνετε free() σε δείκτες που είναι NULL, πότε κάνετε allocate 0 bytes μνήμης, και διάφορα άλλα.

 

Κυκλοφορούν πολλά τέτοια memory checkers, ειδικά για C/C++... απλώς το παραπάνω το χρησιμοποιώ με επιτυχία πολλά χρόνια, για αυτό και το ανάφερα.

 

EDIT:

 

Έχει κανείς άλλος πρόβλημα με την τελευταία έκδοση του AMD CodeAnalyst & Profiler?

Κατέβασα προχτές την πρόσφατη 32-μπιτ έκδοση και την πέρασα στα XP και μόλις πήγα να το τρέξω κράσαρε (δεν το ψαξα γιατί ήταν αργά, αλλά μάλλον τους έχουν ξεφύγει κάποια 64-μπιτα dll νομίζω στην 32-bit έκδοση)... ξέρει κανείς τίποτα για να μη με φάει το ψάξιμο πάλι;

 

Τον καιρό που είχα το QT Creator for SYMBIAN είχα δοκιμάσει μια ανάλογη βιβλιοθήκη (για C++ όμως) με αυτή που περιγράφεις, ονομασία δεν θυμάμαι πια αλλά η φιλοσοφία λειτουργίας της ήταν παρόμοια.

 

Τώρα έχω γυρίσει σε Android και έτσι η (τυπική τουλάχιστον) διαχείριση μνήμης γίνεται από την πλατφόρμα (η οποία επίσης στο Debugging πάει αργά λόγο ARM emulation - αλλά έχει ένα πανίσχυρο Monitor ονόματι LogCat που "ξελασπώνει").

 

Τώρα επ' ευκαιρίας, το παραπάνω παράδειγμα στον Code Guard του C++ Builder φαίνεται ως:

 

 

post-41640-0-42946300-1339515473_thumb.png

 

 

 

Υ.Γ.

Νομίζω ότι και το Apple X-Code παρέχει ένα ανάλογο εργαλείο παρακολούθησης της μνήμης που βοηθά πολύ στην ανάπτυξη εφαρμογών Objective-C.

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

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...