CSC448: Code Generation: GNU Debugger (GDB) Walk Through [12/14] Previous pageContentsNext page

To use the GNU Debugger, we must tell the assembler to include debugging information:

$ gcc -Wa,--gstabs -o loop simplified-loop.s
$ ./loop 
3
2
1
0

A sample session with the debugger:

$ gdb ./loop
GNU gdb 5.0rh-5 Red Hat Linux 7.1
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux".


(gdb) help
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.

(gdb) run
Starting program: /home/cpitcher/csc448/examples/src/runtime/./loop 
3
2
1
0

Program exited normally.

(gdb) quit


$ gdb ./loop
GNU gdb 5.0rh-5 Red Hat Linux 7.1
Copyright 2001 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) list
1	.global main
2	
3	.text
4	        .align 4
5	
6	main:
7	        pushl   %ebp
8	        movl    %esp, %ebp
9	        subl    $8, %esp
10	
(gdb) list
11	        movl    $3, -4(%ebp)
12	        jmp     lab2
13	lab1:
14	        pushl   -4(%ebp)
15	        pushl   $somenameforthestring
16	        call    printf
17	        addl    $8, %esp
18	        leal    -4(%ebp), %eax
19	        decl    (%eax)
20	lab2:
(gdb) list
21	        cmpl    $0, -4(%ebp)
22	        jns     lab1
23	
24	        movl    $0, %eax
25	        leave
26	        ret
27	
28	
29	.section .rodata
30	
(gdb) break 7
Breakpoint 1 at 0x8048460: file simplified-loop.s, line 7.
(gdb) run
Starting program: /home/cpitcher/csc448/examples/src/runtime/./loop 

Breakpoint 1, main () at simplified-loop.s:7
7	        pushl   %ebp
Current language:  auto; currently asm
(gdb) run
Starting program: /home/cpitcher/csc448/examples/src/runtime/./loop 

Breakpoint 1, main () at simplified-loop.s:7
7	        pushl   %ebp
Current language:  auto; currently asm
(gdb) step
8	        movl    %esp, %ebp
(gdb) step
main () at simplified-loop.s:9
9	        subl    $8, %esp
(gdb) step
11	        movl    $3, -4(%ebp)
(gdb) step
12	        jmp     lab2
(gdb) step
21	        cmpl    $0, -4(%ebp)
(gdb) step
22	        jns     lab1
(gdb) step
14	        pushl   -4(%ebp)
(gdb) step
15	        pushl   $somenameforthestring
(gdb) step
16	        call    printf
(gdb) step
printf (format=0x8048508 "%d\n") at printf.c:32
32	printf.c: No such file or directory.
	in printf.c
Current language:  auto; currently c
(gdb) bt  
#0  printf (format=0x8048508 "%d\n") at printf.c:32
#1  0x0804847c in lab1 () at simplified-loop.s:16
#2  0x40043177 in __libc_start_main (main=0x8048460 <main>, argc=1, 
    ubp_av=0xbffff8a4, init=0x80482e4 <_init>, fini=0x80484e0 <_fini>, 
    rtld_fini=0x4000e184 <_dl_fini>, stack_end=0xbffff89c)
    at ../sysdeps/generic/libc-start.c:129
(gdb) up
#1  0x0804847c in lab1 () at simplified-loop.s:16
16	        call    printf
Current language:  auto; currently asm
(gdb) list
11	        movl    $3, -4(%ebp)
12	        jmp     lab2
13	lab1:
14	        pushl   -4(%ebp)
15	        pushl   $somenameforthestring
16	        call    printf
17	        addl    $8, %esp
18	        leal    -4(%ebp), %eax
19	        decl    (%eax)
20	lab2:
(gdb) break 17
Breakpoint 2 at 0x804847c: file simplified-loop.s, line 17.
(gdb) continue
Continuing.
3

Breakpoint 2, lab1 () at simplified-loop.s:17
17	        addl    $8, %esp
(gdb) clear 17
Deleted breakpoint 2 
(gdb) continue
Continuing.
2
1
0

Program exited normally.
(gdb) quit

Previous pageContentsNext page