Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

Σχετικά έγγραφα
EPL475:Εργαστήριο 5, GDB

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

CS255 - Programming Lab

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

MIPS functions and procedures

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

Μεταφραστής (Compiler)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

ΑΣΚΗΣΗ. Ορίζονται μόνο καθολικές ακέραιες μεταβλητές με τη σύνταξη: int varname;

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Διάλεξη 22η: Επιπλέον στοιχεία της C

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Συστημάτων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

make Προγραμματισμός II 1

Writing kernels for fun and profit

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ & ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΕΡΙΒΑΛΛΟΝΤΟΣ ΑΝΑΠΤΥΞΗΣ BloodShed Dev-C++

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

Ενσωματωμένα Συστήματα

Εργαλεία του JDK. Β.1 Εργαλεία του JDK. Β.2 Μεταγλωττιστής javac. Τα πιο βασικά εργαλεία του JDK είναι τα παρακάτω.

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

C: Από τη Θεωρία στην Εφαρμογή

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Data-Level Parallelism Linking & Loading

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Eternal War in Memory. Dimitris Mitropoulos

Μικρή Εισαγωγή στο wxdev-c++

Μετάφραση ενός Προγράμματος Εξαιρέσεις

Διάλεξη 5: Δείκτες και Συναρτήσεις

Λειτουργικά Συστήματα (Λ/Σ)

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Λειτουργικά Συστήματα. Εισαγωγή

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Ενσωματωμένα Συστήματα

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Συναρτήσεις-Διαδικασίες

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Ι. Προεπεξεργαστής. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

ΠΛΕ-006 ΠΑΡΑΛΛΗΛΗ ΕΠΕΞΕΡΓΑΣΙΑ Project

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Προηγμένοι Μικροεπεξεργαστές. Paging & Segmentation

Συναρτήσεις. Εισαγωγή

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Εισαγωγικό εργαστήριο C

Ο πίνακας συμβόλων (symbol table) είναι μία δομή, όπου αποθηκεύεται πληροφορία σχετικά με τα σύμβολα του προγράμματος

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Εργαστήριο ΕΙΣΑΓΩΓΗ ΣΤΗΝ INTEL ASSEMBLY 32BIT

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

UNIX System Programming

Διαδικαστικός Προγραμματισμός

Οργάνωση και Σχεδίαση Υπολογιστών Η Διασύνδεση Υλικού και Λογισμικού, 4 η έκδοση. Σύντομη Εισαγωγή στη χρήση του προσομοιωτή και συμβολομεταφραστή

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΣ13 ΕΑΡΙΝΟ 2014

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Προγραμματισμός Υπολογιστών με C++

Περιγραφή και Έλεγχος ιεργασιών

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κεφάλαιο 1 Buffer Overflow & Buffer Overflow Exploit Overview

Προεπεξεργαστής της C. C Preprocessor. Προγραμματισμός II 1

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό με C++

Transcript:

Νίκος Ντάρµος <ntarmos@cs.uoi.gr> Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων Ιωάννινα, Μάιος 2010

Βασικές λειτουργίες ενός debugger: Εκτέλεση προγράµµατος ϐήµα-ϐήµα. Παρακολούθηση τιµών µεταβλητών. Εξέταση stack κλήσεων συναρτήσεων. «Κουτάκια» στον υπολογιστή... Απαιτείται µεταγλώττιση µε σύµβολα αποσφαλµάτωσης: Για GCC/GDB: user@host:...$ gcc test.c -g

user@host:...$ gcc test.c -S -o test.s test.s test.c int func(int arg) { return arg+1; } int main() { int i = 10; i = func(i); return i; } func: pushl movl movl addl popl ret main: pushl movl subl movl movl movl call movl movl leave ret %ebp %esp, %ebp 8(%ebp), %eax $1, %eax %ebp %ebp %esp, %ebp $20, %esp $10, -4(%ebp) -4(%ebp), %eax %eax, (%esp) func %eax, -4(%ebp) -4(%ebp), %eax

user@host:...$ gcc test.c -g -S -o test.s test.s func:.lfb0:.file 1 "test.c".loc 1 1 0.cfi_startproc.LVL0: pushl %ebp.lcfi0:.cfi_def_cfa_offset 8 movl %esp, %ebp.cfi_offset 5, -8.LCFI1:.cfi_def_cfa_register 5.loc 1 1 0 movl 8(%ebp), %eax addl $1, %eax.loc 1 3 0 popl %ebp ret.cfi_endproc main:.lfb1:.loc 1 4 0.cfi_startproc pushl %ebp.lcfi2:.cfi_def_cfa_offset 8 movl %esp, %ebp.cfi_offset 5, -8.LCFI3:.cfi_def_cfa_register 5 subl $4, %esp.loc 1 6 0 movl $10, (%esp) call func.loc 1 8 0 leave ret.cfi_endproc.llst0:.long.lfb0-.ltext0.long.lcfi0-.ltext0.value 0x2

Εκτέλεση Τερµατισµός/Επανεκκίνηση/ Εξοδος Απλή εκτέλεση προγράµµατος: user@host:...$ gdb a.out run Starting program: a.out Program exited with code 013. Εκτέλεση προγράµµατος µε παραµέτρους γραµµής εντολών: user@host:...$ gdb a.out set args arg1 "arg2" arg3 run user@host:...$ gdb a.out run arg1 "arg2" arg3

Εκτέλεση Τερµατισµός/Επανεκκίνηση/ Εξοδος Τερµατισµός/επανεκκίνηση εκτέλεσης: kill Kill the program being debugged? (y or n) y run ιακοπή/συνέχιση εκτέλεσης: <Ctrl+C> Program received signal SIGINT, Interrupt. main () at test.c:5 cont Εξοδος από τον gdb: quit The program is running. user@host:...$ Exit anyway? (y or n) y

Breakpoints Watchpoints Stepping Εισαγωγή breakpoints: break main Breakpoint 1 at 0x80483a5: file test.c, line 5. b test.c:6 Breakpoint 2 at 0x80483ac: file test.c, line 6. b func Breakpoint 3 at 0x8048397: file test.c, line 2. info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x080483a5 in main at test.c:5 2 breakpoint keep y 0x080483ac in main at test.c:6 3 breakpoint keep y 0x08048397 in func at test.c:2 Αφαίρεση/απενεργοποίηση breakpoints: del 1 disable 2 info breakpoints Num Type Disp Enb Address What 2 breakpoint keep n 0x080483ac in main at test.c:6 3 breakpoint keep y 0x08048397 in func at test.c:2

Breakpoints Watchpoints Stepping Watchpoints b main Breakpoint 1 at 0x80483a5: file test.c, line 5. watch i No symbol "i" in current context. r Starting program: /home/ntarmos/tmp/tests/a.out Breakpoint 1, main () at test.c:5 5 int i = 10; watch i Hardware watchpoint 2: i rwatch i Hardware read watchpoint 3: i awatch i Hardware access (read/write) watchpoint 4: i Οι µεταβλητές πρέπει να είναι στο scope!

Breakpoints Watchpoints Stepping Βηµατική εκτέλεση b main Breakpoint 1 at 0x80483a5: file test.c, line 5. r Starting program: a.out Breakpoint 1, main () at test.c:5 5 int i = 10; Γραµµή-γραµµή next 6 i = func(i); next 7 return i; Εντολή-εντολή step 6 i = func(i); step func (arg=10) at test.c:2 2 return arg+1;

Breakpoints Watchpoints Stepping Βηµατική εκτέλεση Ως το τέλος της συνάρτησης b func Breakpoint 1 at 0x8048397: file test.c, line 2. r Starting program: /home/ntarmos/tmp/tests/a.out Breakpoint 1, func (arg=10) at test.c:2 2 return arg+1; finish Run till exit from #0 func (arg=10) at test.c:2 0x080483b7 in main () at test.c:6 6 i = func(i); Value returned is $1 = 11 Κλήση συνάρτησης call printf("%d\n", i) 10 $2 = 3

Κώδικας Μεταβλητές Stack Core files Εξέταση Κώδικα list 1 int func(int arg) { 2 return arg+1; 3 } 4 int main() { 5 int i = 10; 6 i = func(i); 7 return i; 8 } 9

Κώδικας Μεταβλητές Stack Core files Εξέταση Μεταβλητών print i $1 = 10 disp i 1: i = 10 next 7 return i; 1: i = 11 Ανάθεση Μεταβλητών print i $1 = 10 set var i=20 p i $2 = 20

Κώδικας Μεταβλητές Stack Core files Εξέταση call stack b func Breakpoint 1 at 0x8048397: file test.c, line 2. r Starting program: /home/ntarmos/tmp/tests/a.out Breakpoint 1, func (arg=10) at test.c:2 2 return arg+1; bt #0 func (arg=10) at test.c:2 #1 0x080483b7 in main () at test.c:6

Κώδικας Μεταβλητές Stack Core files Μετακίνηση στο call stack frame #0 func (arg=10) at test.c:2 2 return arg+1; frame 1 #1 0x080483b7 in main () at test.c:6 6 i = func(i); down #0 func (arg=10) at test.c:2 2 return arg+1; up #1 0x080483b7 in main () at test.c:6 6 i = func(i);

Κώδικας Μεταβλητές Stack Core files Εξέταση τρέχοντος frame info frame Stack level 1, frame at 0xbfa8e360: eip = 0x80483b7 in main (test.c:6); saved eip 0xb7730b55 caller of frame at 0xbfa8e344 source language c. Arglist at 0xbfa8e358, args: Locals at 0xbfa8e358, Previous frame s sp is 0xbfa8e360 Saved registers: ebp at 0xbfa8e358, eip at 0xbfa8e35c info locals i = 10 info args No arguments. frame 0 #0 func (arg=10) at test-s.c:2 2 return arg+1; info args arg = 10

Κώδικας Μεταβλητές Stack Core files Ενεργοποίηση core files user:host:...$ ls a.out test.c user@host:...$./a.out Segmentation fault user:host:...$ ls a.out test.c user@host:...$ ulimit -c 0 user@host:...$ ulimit -c unlimited user@host:...$./a.out Segmentation fault (core dumped) user@host:...$ ls a.out core test.c

Κώδικας Μεταβλητές Stack Core files Χρησιµοποίηση core files user@host:...$ gdb a.out core user@host:...$ gdb a.out core core

Κώδικας Μεταβλητές Stack Core files segfault.c #include <stdlib.h> void func(int *ptr) { *ptr = 1; } void main() { int *p = NULL; func(p); }

Κώδικας Μεταβλητές Stack Core files user@host:...$ gcc segfault.c -g user@host:...$ ulimit -c unlimited user@host:...$./a.out Segmentation fault (core dumped) user@host:...$ gdb./a.out core Core was generated by./a.out. Program terminated with signal 11, Segmentation fault. [New process 2082] #0 0x0804839a in func (ptr=0x0) at segfault.c:4 4 *ptr = 1; bt #0 0x0804839a in func (ptr=0x0) at segfault.c:4 #1 0x080483ba in main () at segfault.c:9 p ptr $1 = (int *) 0x0

Κώδικας Μεταβλητές Stack Core files Βασικά ϐήµατα για γενικό debugging 1 Κάνω compile µε -g: user@host:...$ gcc myfile.c -g 2 Φορτώνω το πρόγραµµά µου στον gdb: user@host:...$ gdb a.out 3 Θέτω command-line arguments: set args arg1 arg2 arg3... 4 Θέτω breakpoints: b main b func... 5 Ξεκινώ την εκτέλεση: r 6 Συνεχίζω µε ϐηµατική εκτέλεση και έλεγχο µεταβλητών ενδιαφέροντος: p ptr n s...