.
Для сравнения была написана небольшая программа на языке C (классическая небольшая программа, выводящая строку «Hello World»). Для отладки использовался отладчик GNU (GDB). Код программы представлен ниже:
>#include
>int main ()
>{
>printf (“Hello World\n”);
>return (0);
>}
Программа была скомпилирована с включением отладочной информации (был включен переключатель —g):
>[elliptic@]$ gcc -g hello.c -o hello
>[elliptic@ellipse]$ ./hello
>Hello World
Пример протокола отладки под управлением GDB показан ниже:
>[elliptic@ellipse]$ gdb hello
>GNU gdb 19991004
>Copyright 1998 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) break main
Была установлена точка прерывания при входе в функцию main. При ее достижении выполнение программы было приостановлено для выполнения программистом действий по отладке программы. Контрольная точка была установлена до выдачи команды run.
>Breakpoint 1 at 0x80483d3: file hello.c, line 5.
>(gdb) run
Команда run начинает выполнение программы под управлением отладчика.
>Starting program: /home/ryan/hello
>Breakpoint 1, main () at hello.c:5
>5 printf (“Hello World\n”);
>(gdb) disassemble
После того достижения программой точки прерывания и начала сессии отладки была выдана команда disassemble, позволяющая вывести дополнительную отладочную информацию о программе.
>Dump of assembler code for function main:
>0x80483d0 : push %ebp
>0x80483d1 : mov %esp,%ebp
>0x80483d3 : push $0x8048440
>0x80483d8 : call 0x8048308
>0x80483dd : add $0x4,%esp
>0x80483e0 : xor %eax,%eax
>0x80483e2 : jmp 0x80483e4
>0x80483e4 : leave
>0x80483e5 : ret
>End of assembler dump.
Протокол отображает ассемблерный код программы «hello world», соответствующий ассемблеру x86 Linux. Исследование собственных программ в отладчике – хороший способ изучения листингов ассемблерного кода.
>(gdb) s
>printf (format=0x8048440 “Hello World\n”) at printf.c:30
>printf.c: No such file or directory.
После задания командой