ΠΡΠ»Π°Π΄ΡΠΈΠΊ gdb ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΠ»Π°Π΄ΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ GDB. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GDB
Π¦Π΅Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ - ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π΅Ρ ΠΊΠΎΠ΄Π΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ , ΡΠ°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ). Π’ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ - Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π² Π‘ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π±Π΅Π· Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΠΎΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎprintf(3) Π΄ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Π²Π΅Π΄Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΈ syslog . Π Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ, Π½ΠΎ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΎΠ±ΡΠ°Π· ( dump ) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅. Π ΠΎΠ±ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΡΠΎ Π±Π΅Π· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π²Ρ Π²ΡΡΠ΄ Π»ΠΈ ΠΎΠ±ΠΎΠΉΠ΄ΡΡΠ΅ΡΡ.
ΠΠ°ΡΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ( breakpoint ), Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ. ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ: ΡΡΠ°Π²ΠΈΠΌ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, Π·Π°ΠΏΡΡΠΊΠ°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌ Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ, ΠΏΠΎΠΏΡΡΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°Ρ Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ΠΈ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈΠ·-Π·Π° segmentation fault, - ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π΅ΡΡ ΡΠ°Π·, ΠΏΡΠΎΠΉΡΠΈ Π΅Π³ΠΎ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ, ΠΏΠΎΡΡΠ°Π²ΠΈΠ² ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ±ΠΎΡ.
ΠΠ°ΡΠ½ΡΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ. ΠΠΎΠ·ΡΠΌΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Hello world ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π΅Ρ Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ»ΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° -g :
$ gcc -g hello.s -o hello $
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ gdb:
$ gdb ./hello GNU gdb 6.4.90-debian Copyright (C) 2006 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 "i486-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb)
GDB Π·Π°ΠΏΡΡΡΠΈΠ»ΡΡ, Π·Π°Π³ΡΡΠ·ΠΈΠ» ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠ²Π΅Π» Π½Π° ΡΠΊΡΠ°Π½ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ (gdb) ΠΈ ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "ΠΏΠΎ ΡΠ°Π³Π°ΠΌ" ( single-step mode ). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ - ΡΠΎΠ³Π΄Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΡΡΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ.
(gdb) b main Breakpoint 1 at 0x8048324: file hello.s, line 17. (gdb)
b - ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ break . ΠΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² GDB ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΎΠΊ. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ run . ΠΡΠ° ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°Π½Π΅Π΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
(gdb) r Starting program: /tmp/hello Breakpoint 1, main () at hello.s:17 17 movl $4, %eax /* ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° write = 4 Current language: auto; currently asm (gdb)
GDB ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ, ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ , ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ. ΠΠ»Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: step (ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ s ) ΠΈ next (ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ n ). ΠΠΎΠΌΠ°Π½Π΄Π° step ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ Π·Π°Ρ ΠΎΠ΄ΠΎΠΌ Π² ΡΠ΅Π»Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΎΠΌΠ°Π½Π΄Π° next Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
(gdb) n 20 movl $1, %ebx /* ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - Π² ΡΠ΅Π³ΠΈΡΡΡ %ebx */ (gdb)
ΠΡΠ°ΠΊ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π° ΡΡΡΠΎΠΊΠ΅ 17 Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΈ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ %eax Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΡΠ»ΠΎ 4. ΠΠ»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΊΡΠ°Π½ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° print (ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ p ). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, GDB Π² Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π·Π½Π°ΠΊ $ Π²ΠΌΠ΅ΡΡΠΎ % . ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ %eax :
(gdb) p $eax $1 = 4 (gdb)
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ 4! GDB Π½ΡΠΌΠ΅ΡΡΠ΅Ρ Π²ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ($1 ), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π²Π½ΠΎ 4. Π’Π΅ΠΏΠ΅ΡΡ ΠΊ ΡΡΠΎΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ:
(gdb) p $1 $2 = 4 (gdb) p $1 + 10 $3 = 14 (gdb) p 0x10 + 0x1f $4 = 47 (gdb)
ΠΠΎΠΊΠ° ΠΌΡ ΠΈΠ³ΡΠ°Π»ΠΈ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ print , ΠΌΡ ΡΠΆΠ΅ Π·Π°Π±ΡΠ»ΠΈ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ. ΠΠΎΠΌΠ°Π½Π΄Π° info line Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π°. ΠΠ΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
(gdb) info line
Line 20 of "hello.s" starts at address 0x8048329
ΠΠΎΠΌΠ°Π½Π΄Π° list (ΡΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ l ) Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ:
- Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ - Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π΅;
- ΡΠ°ΠΉΠ»:Π½ΠΎΠΌΠ΅Ρ_ΡΡΡΠΎΠΊΠΈ - Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅;
- ΠΈΠΌΡ_ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ;
- ΡΠ°ΠΉΠ»:ΠΈΠΌΡ_ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅;
- *Π°Π΄ΡΠ΅Ρ - Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ , ΠΊΠΎΠΌΠ°Π½Π΄Π° list Π²ΡΠ²Π΅Π΄Π΅Ρ 10 ΡΡΡΠΎΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΠΎΠΊΡΡΠ³ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°. ΠΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π²Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅ ΡΡΡΠΎΠΊΡ Π½Π°ΡΠ°Π»Π° ΠΈ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ½ΡΠ° Π»ΠΈΡΡΠΈΠ½Π³Π°.
(gdb) l main 12 Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° */ 13 .type main, @function /* main - ΡΡΠ½ΠΊΡΠΈΡ (Π° Π½Π΅ Π΄Π°Π½Π½ΡΠ΅) */ 14 15 16 main: 17 movl $4, %eax /* ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° 18 write = 4 Π² ΡΠ΅Π³ΠΈΡΡΡ %eax */ 19 20 movl $1, %ebx /* ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ 21 %ebx; Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° 22 stdout = 1 */ (gdb) l *$eip 0x8048329 is at hello.s:20. 15 16 main: 17 movl $4, %eax /* ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° 18 write = 4 Π² ΡΠ΅Π³ΠΈΡΡΡ %eax */ 19 20 movl $1, %ebx /* ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ 21 %ebx; Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° 22 stdout = 1 */ 23 movl $hello_str, %ecx /* Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² 24 ΡΠ΅Π³ΠΈΡΡΡ %ecx; ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ */ (gdb) l 20, 25 20 movl $1, %ebx /* ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ 21 %ebx; Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° 22 stdout = 1 */ 23 movl $hello_str, %ecx /* Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² 24 ΡΠ΅Π³ΠΈΡΡΡ %ecx; ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ */ 25 (gdb)
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: list *$eip . Π‘ Π΅Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉΡΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π°Π»ΡΡΠ΅:
(gdb) n 23 movl $hello_str, %ecx /* Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ %ecx (gdb) n 26 movl $hello_str_length, %edx /* ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ %edx (gdb)
ΠΠ΅ ΠΏΡΠ°Π²Π΄Π° Π»ΠΈ, ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π°ΠΆΠΈΠΌΠ°ΡΡ n ? ΠΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΆΠ°ΡΡ Enter , GDB ΠΏΠΎΠ²ΡΠΎΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
(gdb) 29 int $0x80 /* Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ 0x80 */ (gdb) Hello, world! 31 movl $1, %eax /* Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° exit = 1 */ (gdb)
ΠΡΡ ΠΎΠ΄Π½Π° ΡΠ΄ΠΎΠ±Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° , ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΠΈΡ Π·Π½Π°ΡΡ - info registers . ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π΄ΠΎ i r . ΠΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ - ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π°ΠΌ Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
(gdb) info registers
eax 0xe 14
ecx 0x804955c 134518108
edx 0xe 14
ebx 0x1 1
esp 0xbfabb55c 0xbfabb55c
ebp 0xbfabb5a8 0xbfabb5a8
esi 0x0 0
edi 0xb7f6bcc0 -1208566592
eip 0x804833a 0x804833a
Π’Π°ΠΊ, Π° ΠΊΡΠΎΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Ρ Π½Π°Ρ Π²Π΅Π΄Ρ Π΅ΡΡΡ Π΅ΡΡ ΠΈ
GNU Debugger β ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° GNU, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈ ΡΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π‘ΠΈ, C++, Ada ΠΈ Π€ΠΎΡΡΡΠ°Π½. GNU Debugger β ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ GNU General Public License.
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ GNU Debugger Π½Π°ΠΏΠΈΡΠ°Π½ Π ΠΈΡΠ°ΡΠ΄ΠΎΠΌ Π‘ΡΠΎΠ»Π»ΠΌΠ°Π½ΠΎΠΌ Π² 1988 Π³ΠΎΠ΄Ρ. ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Π±ΡΠ» Π²Π·ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ DBX, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ²ΡΠΈΠΉΡΡ Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠΌ BSD. Π‘ 1990 Π΄ΠΎ 1993 Π³Π³. ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΡΡ ΠΠΆΠΎΠ½ΠΎΠΌ ΠΠΆΠΈΠ»ΠΌΠΎΡΠΎΠΌ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Cygnus Solutions. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΡΠ΅ΡΡΡ Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΠΊΠΎΠΌΠΈΡΠ΅ΡΠΎΠΌ GDB (GDB Steering Committee), Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΌ Free Software Foundation.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ GNU Debugger
- ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ
GNU Debugger ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. GNU Debugger ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ a.out, COFF (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Windows), ECOFF, XCOFF, ELF, SOM, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ stabs, COFF, ECOFF, DWARF, DWARF2. ΠΠ°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡΠΌΠ°Ρ DWARF2.
GNU Debugger Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π²Π΅ΡΡΠΈΠΈ 7.0 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Β«ΠΎΠ±ΡΠ°ΡΠΈΠΌΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΠΎΡΠΌΠΎΡΠ°ΡΡ Π½Π°Π·Π°Π΄ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 7.0 Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΊΡΠΈΠΏΡΠΈΠ½Π³Π° Π½Π° .
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ GNU Debugger Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π°ΡΡΠΈΠΊΠΈ ΡΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
- ΠΡΠ»ΡΡΠΈΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ
GNU Debugger ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ. ΠΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ GNU Debugger (2003): Alpha, ARM, H8/300, System/370, System/390, x86 ΠΈ x86-64, IA-64 (Itanium), Motorola 68000, MIPS, PA-RISC, PowerPC, SuperH, SPARC, VAX, A29K, ARC, AVR, CRIS, D10V, D30V, FR-30, FR-V, Intel i960, M32R, 68HC11, Motorola 88000, MCORE, MN10200, MN10300, NS32K, Stormy16, V850 ΠΈ Z8000. (ΠΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ Π²ΡΠΏΡΡΠΊΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· Π½ΠΈΡ .) Π¦Π΅Π»Π΅Π²ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ GNU Debugger Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° (ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ARM, AVR), Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΌΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ GNU Debugger, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΌ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΡ ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΠΈΠ²Π°Π΅ΠΌΡΠΉ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π° ΡΠ°ΠΉΠ» Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ELF, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ.
- Π£Π΄Π°Π»ΡΠ½Π½Π°Ρ ΠΎΡΠ»Π°Π΄ΠΊΠ°
ΠΡΠΈ ΡΠ΄Π°Π»ΡΠ½Π½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ GNU Debugger Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π° ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ. Π‘Π²ΡΠ·Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ ΠΈΠ»ΠΈ TCP/IP. ΠΡΠΎΡΠΎΠΊΠΎΠ» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅Π½ Π΄Π»Ρ GNU Debugger, Π½ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π°ΡΡ ΠΈΠ² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°. ΠΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°, Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° gdbserver ΠΈΠ· ΡΠΎΡΡΠ°Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ° GNU Debugger, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠΎΠ΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ ΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΠΆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ΡΠ΄ΡΠ° Linux KGDB. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΡΠ΄ΡΠΎ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΡ Π΄Π²ΡΡ ΠΌΠ°ΡΠΈΠ½, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· Ethernet ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ°Π±Π΅Π»Ρ, Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ GNU Debugger, Π½Π° Π΄ΡΡΠ³ΠΎΠΌ β ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΡΠ΄ΡΠΎ.
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π²Π΅Π΄ΡΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Free Software Foundation, GNU Debugger Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π²Π½Π΅ΡΠ½ΠΈΠΌ IDE, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°ΠΌ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ»Ρ ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΈΡ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ·ΡΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΠ΅ΡΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ DDD), ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ·ΡΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ gdb/mi, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ·ΡΠΊΠ° .
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΊΠ°ΠΊ DDD, cgdb, GDBtk/Insight ΠΈ Β«GUD modeΒ» Π² . Π‘ GNU Debugger ΠΌΠΎΠ³ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ IDE, ΠΊΠ°ΠΊ
ΠΠ»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΡΠ° ΠΎΡΠ»Π°Π΄ΠΎΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅; ΠΎΠ½Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ Π² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅.
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΊΠ»ΡΡ `-g" ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Π‘ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ `-g" ΠΈ `-O" Π²ΠΌΠ΅ΡΡΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
GCC, GNU ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π‘ΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ `-g" Ρ ΠΈΠ»ΠΈ Π±Π΅Π· `-O" , Π΄Π΅Π»Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ `-g" ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ, Π½ΠΎ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π° ΠΈΡΠΏΡΡΡΠ²Π°ΡΡ ΡΠ΄Π°ΡΡ.
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅ΡΡΡ, run ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. (Π ΡΡΠ΅Π΄Π°Ρ , Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, run Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.)
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡ ΠΏΠΎΡΠΎΠ΄ΠΈΠ²ΡΠ΅Π³ΠΎ Π΅Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°. GDB ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. (ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠ°ΡΡΠ°, Π½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π½Π° Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅.) ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΡΠ΅ΡΡΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠ°Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ run . ΠΡΠ»ΠΈ Π½Π° Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°, ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΈ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ°ΡΠΊΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ). Π ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Unix, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ SHELL . Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.3 ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ . Π‘ΡΠ΅Π΄Π°. ΠΠ±ΡΡΠ½ΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΡΠ΅Π΄Ρ ΠΎΡ GDB, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ GDB set environment ΠΈ unset environment , ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΡΡΠ΅Π΄Ρ, Π²Π»ΠΈΡΡΡΠΈΡ Π½Π° Π½Π΅Π΅. Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.4 Π Π°Π±ΠΎΡΠ°Ρ ΡΡΠ΅Π΄Π° Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ . Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΎΡ GDB. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ GDB ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ cd . Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.5 Π Π°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ . Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄. ΠΠ±ΡΡΠ½ΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ ΠΆΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π°, ΡΡΠΎ ΠΈ GDB. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π²Π²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π² ΡΡΡΠΎΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ run , ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ tty , ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.6 ΠΠ²ΠΎΠ΄ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ . ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π₯ΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°Π½Π°Π»Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅; Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ GDB ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ΄Π°Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ run , Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 5. ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ , Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ print ΠΈΠ»ΠΈ call . Π‘ΠΌ. ΡΠ°Π·Π΄Π΅Π» 8. ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ .
ΠΡΠ»ΠΈ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Ρ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° GDB ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π· ΡΡΠΈΡΡΠ²Π°Π» ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΎΠ½ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΅Π΅ Π·Π°Π½ΠΎΠ²ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ GDB ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²Π°ΡΠΈ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°.
4.3 ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ GDB Π΄Π΅Π»Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°--ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠ΅ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ GDB, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ run . ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°; Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΅Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΌΡ GDB, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ continue . detach ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π΄Π»Ρ Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ· ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ GDB Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ detach . ΠΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ detach , ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ GDB ΡΠ½ΠΎΠ²Π° ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ, ΠΈ Π²Ρ Π³ΠΎΡΠΎΠ²Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ run Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. detach Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ RET Π΅ΡΠ΅ ΡΠ°Π· ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠΉΠ΄Π΅ΡΠ΅ ΠΈΠ· GDB ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ run , ΠΏΠΎΠΊΠ° Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π²Ρ ΡΠ±ΡΠ΅ΡΠ΅ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, GDB Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠΈΡ Π²Π΅ΡΠ΅ΠΉ; Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Π½ΡΠΆΠ½ΠΎ Π²Π°ΠΌ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ set confirm (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 15.6 ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ).
4.8 Π£Π½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°
kill Π£Π½ΠΈΡΡΠΎΠΆΠΈΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ GDB.ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½Π°, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΈΡΡ Π΄Π°ΠΌΠΏ ΠΏΠ°ΠΌΡΡΠΈ, Π° Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉΡΡ ΠΏΡΠΎΡΠ΅ΡΡ. GDB ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ Π»ΡΠ±ΡΠ΅ Π΄Π°ΠΌΠΏΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΠΊΠ° Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π²Π½Π΅ GDB, ΠΏΠΎΠΊΠ° Ρ Π²Π°Ρ Π΅ΡΡΡ Π² Π½Π΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ. Π ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ kill , ΡΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Π½Π΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°.
ΠΠΎΠΌΠ°Π½Π΄Π° kill ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°ΡΡ Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· Π²Π²Π΅Π΄Π΅ΡΠ΅ run , GDB Π·Π°ΠΌΠ΅ΡΠΈΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ (ΡΡΠ°ΡΠ°ΡΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²Π°ΡΠΈ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°).
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ ΠΠ»Π»Π°Π½Π° ΠβΠΠΎΠ½Π½Π΅Π»Π»Π° Learning C with GDB .
ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΡ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΠ·ΡΠΊΠΎΠ², ΠΊΠ°ΠΊ Ruby, Scheme ΠΈΠ»ΠΈ Haskell, ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ C ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. Π ΠΏΡΠΈΠ΄Π°ΡΡ ΠΊ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ C, ΠΊΠ°ΠΊ ΡΡΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, Π²Ρ Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π±Π΅Π· REPL . ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΡ ΠΏΡΠΈΠ²ΡΠΊΠ½Π΅ΡΠ΅ ΠΊ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² REPL, ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ ΡΠΈΠΊΠ»ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π»-ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»-Π·Π°ΠΏΡΡΡΠΈΠ» Π±ΡΠ΄Π΅Ρ Π΄Π»Ρ ΠΠ°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρ, ΡΡΠΎ Ρ ΠΌΠΎΠ³ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GDB ΠΊΠ°ΠΊ ΠΏΡΠ΅Π²Π΄ΠΎ-REPL Π΄Π»Ρ C. Π― ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ GDB ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΈ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π΅ΡΠ΅Π»ΠΎ.
Π¦Π΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° β ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΠ°ΠΌ, ΡΡΠΎ GDB ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π‘. Π― ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Ρ ΠΠ°Ρ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠΎΠΈΠΌΠΈ ΡΠ°ΠΌΡΠΌΠΈ Π»ΡΠ±ΠΈΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈΠ· GDB, ΠΈ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GDB, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ° Π‘: ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GDB
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π‘ β minimal.c :Int main()
{
int i = 1337;
return 0;
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ printf
. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΊΡΠ½Π΅ΠΌΡΡ Π² Π½ΠΎΠ²ΡΠΉ ΠΌΠΈΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ GBD.
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠ»Π°Π³ΠΎΠΌ -g Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ GDB, ΠΈ ΠΏΠΎΠ΄ΠΊΠΈΠ½Π΅ΠΌ Π΅ΠΌΡ ΡΡΡ ΡΠ°ΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
$ gcc -g minimal.c -o minimal
$ gdb minimal
Π’Π΅ΠΏΠ΅ΡΡ ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΌΠΎΠ»Π½ΠΈΠ΅Π½ΠΎΡΠ½ΠΎ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ GDB. Π― ΠΎΠ±Π΅ΡΠ°Π» Π²Π°ΠΌ REPL, ΡΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅:
(gdb) print 1 + 2
$1 = 3
Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ! print
β ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° GDB, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π‘-Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΡ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° GDB, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠΌΠΎΡΡΡ β Π½Π°Π±Π΅ΡΠΈΡΠ΅ help name-of-the-command
Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ GDB.
ΠΠΎΡ ΠΠ°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
(gbd) print (int) 2147483648
$2 = -2147483648
Π― ΡΠΏΡΡΡ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ 2147483648 == -2147483648
. ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΡ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ²Π°ΡΠ½Π°Ρ Π² Π‘, Π° GDB ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΡ Π‘.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π² ΡΡΠ½ΠΊΡΠΈΠΈ main ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
(gdb) break main
(gdb) run
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡ Π½Π° ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΡΡΠΎΡΠΊΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ i
. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠΎ, ΡΡΠΎ Ρ
ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠΊΠ° ΠΈ Π½Π΅ ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, Π½ΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ print
:
(gdb) print i
$3 = 32767
Π Π‘ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΠ°ΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ next :
(gdb) next (gdb) print i $4 = 1337
ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ X
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π‘ β ΡΡΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΡΠΎΠΌ Π±Π»ΠΎΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΡΠ»Π°ΠΌΠΈ:1. Π§ΠΈΡΠ»ΠΎΠ²ΠΎΠΉ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° Π² Π±Π»ΠΎΠΊΠ΅.
2. Π Π°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° Π² Π±Π°ΠΉΡΠ°Ρ
. ΠΡΠΎΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ΄Π½Π° ΠΈΠ· ΠΎΡΠ»ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ·ΡΠΊΠ° Π‘ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΠΠ°Ρ Π΅ΡΡΡ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π»ΠΎΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ & Π΄Π°Π΅Ρ Π½Π°ΠΌ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π° sizeof Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Ρ ΠΎΠ±Π΅ΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π² GDB:
(gdb) print &i
$5 = (int *) 0x7fff5fbff584
(gdb) print sizeof(i)
$6 = 4
ΠΠΎΠ²ΠΎΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ i
ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x7fff5fbff5b4
ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ 4 Π±Π°ΠΉΡΠ°.
Π― ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π²ΡΡΠ΅, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΠΌΡΡΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΅Π΅ ΡΠΈΠΏΠ°, Π΄Π° ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ sizeof ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΠΌΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ :
(gdb) print sizeof(int)
$7 = 4
(gdb) print sizeof(double)
$8 = 8
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅ Π½Π° ΠΌΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° int
Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΡΡΠ΅ Π±Π°ΠΉΡΠ°, Π° ΡΠΈΠΏΠ° double
β Π²ΠΎΡΠ΅ΠΌΡ Π±Π°ΠΉΡ.
Π GDB Π΅ΡΡΡ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ β ΠΊΠΎΠΌΠ°Π½Π΄Π° x . ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π±Π°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΡ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΈ Π½Π°Π΄ ΡΠ΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΡ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½. Π ΡΠ»ΡΡΠ°Π΅ ΠΊΠ°ΠΊΠΈΡ Π»ΠΈΠ±ΠΎ ΡΡΡΠ΄Π½ΠΎΡΡΠ΅ΠΉ, Π½Π°Π±Π΅ΡΠΈΡΠ΅ help x Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ GDB.
ΠΠ°ΠΊ ΠΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ & Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ x Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ &i ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±Π°ΠΉΡΡ, ΡΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ Π·Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i :
(gdb) x/4xb &i
0x7fff5fbff584: 0x39 0x05 0x00 0x00
Π€Π»Π°Π³ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Ρ Ρ
ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΡΡΠ΅ (4
) Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΌ (hex
) Π²ΠΈΠ΄Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π±Π°ΠΉΡΡ (b
yte). Π― ΡΠΊΠ°Π·Π°Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΡΡΠ΅Ρ
Π±Π°ΠΉΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ i
. ΠΡΠ²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎ Ρ ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠΌ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠ²ΡΠ·Π°Π½Π° ΠΎΠ΄Π½Π° ΡΠΎΠ½ΠΊΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ β Π½Π° ΠΌΠ°ΡΠΈΠ½Π°Ρ Intel Π±Π°ΠΉΡΡ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ βΠΎΡ ΠΌΠ»Π°Π΄ΡΠ΅Π³ΠΎ ΠΊ ΡΡΠ°ΡΡΠ΅ΠΌΡ β (ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ), Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ, Π³Π΄Π΅ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ (ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ).
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ β ΡΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎΡ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ:
(gdb) set var i = 0x12345678 (gdb) x/4xb &i 0x7fff5fbff584: 0x78 0x56 0x34 0x12
ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ptype
ΠΠΎΠΌΠ°Π½Π΄Π° ptype Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΌΠΎΠΈΡ ΡΠ°ΠΌΡΡ Π»ΡΠ±ΠΈΠΌΡΡ . ΠΠ½Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΠΏ Π‘-Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ: (gdb) ptype i
type = int
(gdb) ptype &i
type = int *
(gdb) ptype main
type = int (void)
Π’ΠΈΠΏΡ Π² Π‘ ΠΌΠΎΠ³ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ , Π½ΠΎ ptype
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΡ
Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ
ΠΠ°ΡΡΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ Π½Π° ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ½ΠΊΠΈΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ΠΌ Π² Π‘. Π‘ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ½ΠΊΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΠΎΠ½ΡΡΡ Π΅Π΅ ΡΠ΅ΡΠ΅Π· GDB, ΠΏΠΎΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Ρ Π½Π΅ ΠΎΠ±ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΌΡΡΠ».ΠΡΠ°ΠΊ, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ array.c :
Int main()
{
int a = {1, 2, 3};
return 0;
}
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ Π΅Π΅ Ρ ΡΠ»Π°Π³ΠΎΠΌ -g
, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π² GDB, ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡ next
ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΡΡΡΠΎΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
$ gcc -g arrays.c -o arrays
$ gdb arrays
(gdb) break main
(gdb) run
(gdb) next
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΡ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π²ΡΡΡΠ½ΠΈΡΡ Π΅Π΅ ΡΠΈΠΏ:
(gdb) print a
$1 = {1, 2, 3}
(gdb) ptype a
type = int
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π° Π² GDB, ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΡΡΠΎΠΈΡ ΡΠ΄Π΅Π»Π°ΡΡ β ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ x
Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ a
βΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌβ:
(gdb) x/12xb &a
0x7fff5fbff56c: 0x01 0x00 0x00 0x00 0x02 0x00 0x00 0x00
0x7fff5fbff574: 0x03 0x00 0x00 0x00
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° a
Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x7fff5fbff56c
. ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ Π±Π°ΠΉΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ a
, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΡΠ΅ β a
, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΠ΅ Ρ
ΡΠ°Π½ΡΡ a
. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡ, ΡΡΠΎ sizeof
Π·Π½Π°Π΅Ρ, ΡΡΠΎ a
Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎΠ²Π½ΠΎ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΡ Π±Π°ΠΉΡ:
(gdb) print sizeof(a)
$2 = 12
ΠΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ. Π£ Π½ΠΈΡ
Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌ ΡΠΈΠΏΡ ΠΈ ΠΎΠ½ΠΈ Ρ
ΡΠ°Π½ΡΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΌΠ΅ΠΆΠ½ΡΡ
ΡΡΠ°ΡΡΠΊΠ°Ρ
ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΡΠΈΡΡΠ°ΡΠΈΡΡ
, ΠΌΠ°ΡΡΠΈΠ²Ρ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΎΡΠ΅Π½Ρ ΡΡ
ΠΎΠΆΠ΅ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ! Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊ a
:
(gdb) print a + 1
$3 = (int *) 0x7fff5fbff570
ΠΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ a + 1
β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° int
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π°Π΄ΡΠ΅Ρ 0x7fff5fbff570
. Π ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΆΠ΅ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ x
, ΠΈΡΠ°ΠΊ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
(gdb) x/4xb a + 1 0x7fff5fbff570: 0x02 0x00 0x00 0x00
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π°Π΄ΡΠ΅Ρ 0x7fff5fbff570 ΡΠΎΠ²Π½ΠΎ Π½Π° ΡΠ΅ΡΡΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ 0x7fff5fbff56c , ΡΠΎ Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° a . Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΡΠΈΠΏ int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠ΅ΡΡΡΠ΅ Π±Π°ΠΉΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ a + 1 ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° a .
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π² Π‘ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°Ρ Π°ΡΠΎΠΌ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ: a[i] ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ *(a + i) . ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ Π² GDB:
(gdb) print a
$4 = 1
(gdb) print *(a + 0)
$5 = 1
(gdb) print a
$6 = 2
(gdb) print *(a + 1)
$7 = 2
(gdb) print a
$8 = 3
(gdb) print *(a + 2)
$9 = 3
ΠΡΠ°ΠΊ, ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠΈΡΡΠ°ΡΠΈΡΡ
a
Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ², Π° Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
β ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π§ΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ?
ΠΡΠ²Π΅Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π² Π‘, ΡΠΎ ΠΎΠ½ΠΎ βΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ (decay)β Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. ΠΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°: ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² sizeof ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Π²Π·ΡΡΠΈΡ Π°Π΄ΡΠ΅ΡΠ° & .
Π’ΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΈΠΌΡ a Π½Π΅ ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° & , ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ: Π² ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ a ΠΈ &a ?
Π§ΠΈΡΠ»Π΅Π½Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π°Π΄ΡΠ΅Ρ:
(gdb) x/4xb a
0x7fff5fbff56c: 0x01 0x00 0x00 0x00
(gdb) x/4xb &a
0x7fff5fbff56c: 0x01 0x00 0x00 0x00
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠΈΠΏΡ ΠΈΡ
ΡΠ°Π·Π»ΠΈΡΠ½Ρ. ΠΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΈΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ Π·Π½Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ int *
. Π§ΡΠΎ ΠΆΠ΅ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΏΠ° &a
, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΏΡΠΎΡΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ GDB:
(gdb) ptype &a
type = int (*)
ΠΠΎΠ²ΠΎΡΡ ΠΏΡΠΎΡΠ΅, &a
β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΡΡΠ΅Ρ
ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π». ΠΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»: a
Π½Π΅ ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ &
ΠΈ a ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ int
.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ a ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ &a Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ:
(gdb) print a + 1
$10 = (int *) 0x7fff5fbff570
(gdb) print &a + 1
$11 = (int (*)) 0x7fff5fbff578
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 1 ΠΊ a
ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π°Π΄ΡΠ΅Ρ Π½Π° ΡΠ΅ΡΡΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 1 ΠΊ &a
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ Π°Π΄ΡΠ΅ΡΡ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΡ.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΡΠΏΠ°Π΄Π°Π΅ΡΡΡ a ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ &a :
(gdb) print &a $11 = (int *) 0x7fff5fbff56c
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ°Π΄Π΅ΡΡΡ, Ρ ΡΠ±Π΅Π΄ΠΈΠ» ΠΠ°Ρ, ΡΡΠΎ GDB β ΡΡΠΎ ΠΈΠ·ΡΡΠ½Π°Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΡΡΠ΅Π΄Π° Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π‘. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ print , ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ x ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ptype .1. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ GDB Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ The Ksplice Pointer Challenge .
2. Π Π°Π·Π±Π΅ΡΠΈΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΡ Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΠΎΡΠ½ΠΎΡΡΡΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ?
3. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ GDB, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π΅ΡΠ΅Π»ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ.
4. ΠΠ°ΡΠ΅Π½ΠΈΡΠ΅ βTUIβ ΡΠ΅ΠΆΠΈΠΌ GDB, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ncurses Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΡ Π½Π°Π΄ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΌ GDB. ΠΠ° OS X, ΠΠ°ΠΌ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ±ΡΠ°ΡΡ GDB ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ².
ΠΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΠ‘. ΠΡΠ΄Ρ ΡΠ°Π΄ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΊΡΠΈΡΠΈΠΊΠ΅.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΡΡ ΡΠ΄Π΅Π»Π°Π΅ΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π² Π΄Π΅Π»Π΅
ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Linux ΡΠΈΡΡΠ΅ΠΌ. Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΏΡΠΈΠ΅ΠΌΠ°Ρ
ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ gdb. ΠΠ²Π»Π°Π΄Π΅Π² ΠΈΠΌΠΈ ΡΡ ΡΠΌΠΎΠΆΠ΅ΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΡΠ±Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΊΡΠΏΠ»ΠΎΠΈΡΡ.
ΠΡ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π²ΡΠ΅ ΡΠ»ΡΡΠ°Π»ΠΈ ΠΏΡΠΎ ΡΠ°ΠΊΡΡ Π²Π΅ΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, gdb β ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ. GDB β GNU
Debugger. ΠΡΠΎ Π½Π΅ΠΊΠΎΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ SoftICE Π΄Π»Ρ Windows (Π΄Π»Ρ ΡΠ΅Ρ
ΠΊΡΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ β ΡΠ°ΠΌΡΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΈ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π²ΠΎΠΎΠ±ΡΠ΅ Π»ΡΡΡΠΈΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ), ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄
Linux ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠ΅ΡΠΈ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠΉ Π²Π΅ΡΠΈ ΠΈ Π² ΡΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Ρ Π΅Π³ΠΎ ΠΎΡΠ²Π°ΠΈΠ²Π°Π» ΡΠ°ΠΌ. ΠΡΠ°ΠΊ,
Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ gdb. ΠΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅. Π Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΡΠ΅ΡΠΈΠ» Π²Π·ΡΡΡ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΠΏΡΠΎΠ³Ρ yes. ΠΠ»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ» βyβ Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Ρ ΡΠ΅ΡΠΈΠ» Π½Π°ΡΡΠΈΡΡ Π΅Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π½Π΅ ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ», Π° ΡΡΡΠΎΠΊΡ βXAKEPβ, Ρ
ΠΎΡΡ Π²Π΅ΡΠ΅Π»Π΅Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. Π‘Π°ΠΌ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°ΠΊ:
ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Ρ Π½Π°Ρ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΡ ΠΊ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅:
# gdb /usr/bin/yes
ΠΠΎΠΆΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ core ΡΠ°ΠΉΠ»Ρ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²Π²Π΅ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
# gdb /usr/bin/yes core
ΠΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²:
(gdb) info registers
Π»ΠΈΠ±ΠΎ ΡΠ°ΠΊ (ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ)
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ
ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ° ΠΈ ΡΠΎΡΠΊΠΈ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Ρ Π±Ρ Ρ
ΠΎΡΠ΅Π» ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π° ΡΠΎΡΠΊΠ°Ρ
ΠΎΡΡΠ°Π½ΠΎΠ²Π°. ΠΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π½Π°:
(gdb) break function - ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²Ρ
ΠΎΠ΄ΠΎΠΌ Π² ΡΡΠ½ΠΊΡΠΈΡ
(gdb) break *adress - ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
(gdb) info break
Π ΠΏΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠΈ ΡΠΎΡΠΊΠΈ:
(gdb) clear breakpoint - Π³Π΄Π΅ break ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅Ρ)
ΠΡΠ΅Π½Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π²Π΅ΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° display:
(gdb) display/format value , Π³Π΄Π΅ format β ΡΡΠΎ ΡΠΎΡΠΌΠ°Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° value β ΡΠ°ΠΌΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ²Π΅Π΄Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
(gdb) info display - Π²ΡΠ΄Π°Π΅Ρ ΠΈΠ½ΡΡ ΠΎΠ± ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
(gdb) delete num - Π³Π΄Π΅ num β ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ
num
ΠΡΠΎ Π±ΡΠ» Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ΄Π΅Ρ.
ΠΠ°Π»Π΅Π΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ ΠΈ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Π ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ β Π·Π΄Π΅ΡΡ Ρ Π΄Π°Π» Π»ΠΈΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅Ρ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ gdb, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ Π½Π΅Π³ΠΎ ΠΈΡ
Π² ΡΠΎΡΠ½ΠΈ ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΡΡΠΈΡΠ΅.
ΠΠ°ΠΊ Ρ ΠΈ ΠΎΠ±Π΅ΡΠ°Π», Π±Π΅ΡΠ΅ΠΌ Π½Π΅Π½ΡΠΆΠ½ΡΡ ΠΏΡΠΎΠ³Ρ yes. ΠΡΡΡ Π½Π° Π²Π°ΡΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΌΠΎΠΈΠΌ, Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½ΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠΌ (ΠΊΠΎΠΌΠ°Π½Π΄Π°
find).
# gdb /usr/bin/yes
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
GNU gdb 19991004
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(no debugging symbols found)...
Π’Π°ΠΊ ΠΊΠ°ΠΊ yes Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ Π»ΡΡΡΠ΅ Π±Ρ ΠΈΡ
Π½Π°ΠΌ Π½Π΅ Π²ΠΈΠ΄Π΅ΡΡ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅, Π° Π²ΡΠ²ΠΎΠ΄
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ. ΠΡΠΊΡΠΎΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π½Π°Π±Π΅ΡΠΈΡΠ΅ who is i ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ»Π΅Π·ΡΠΈ
ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
ΠΠΎΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΊ Π½Π΅ΠΉ.
(gdb) tty /dev/pts/1
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ°Π²ΠΈΠΌ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ puts(), Π° ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅ΠΉ Π²ΠΎΡ Π²Π°ΠΌ man-ΡΠΏΡΠ°Π²ΠΊΠ° ΠΎΠ± ΡΡΠ½ΠΊΡΠΈΠΈ(ΠΊΠΎΠΌΠ°Π½Π΄Π° man
puts)
#include
int puts(const char *s);
puts() writes the string s and a trailing newline to stdΒ
out.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌ ΡΡΡΠΎΠΊΡ s Π½Π° ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°. ΠΠΎΡ ΠΎΠ½Π° ΡΠΎ Π½Π°ΠΌ ΠΈ Π½ΡΠΆΠ½Π°. ΠΠ° Π½Π΅ΠΉ ΡΠΎ ΠΌΡ ΠΏΠΎΠΊΠ° ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ.
(gdb) break puts
Breakpoint 1 at 0x8048698
Π Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ°ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΏΠΎΠΊΠ° gdb Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
(gdb) r
Starting program: /usr/bin/yes
Breakpoint 1 at 0x4006d585: file ioputs.c, line 32.
Breakpoint 1, 0x4006d585 in _IO_puts (str=0x8048e59 "y") at ioputs.c:32
32 ioputs.c: No such file or directory.
1: x/i $eip 0x4006d585 <_IO_puts+21>: mov 0x8(%ebp),%esi
Π, Π²ΠΎΡ ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΡΠ΄ΠΎ, ΡΡΠ°Π±ΠΎΡΠ°Π» breakpoint. Π§ΡΠΎ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ β Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΌΡ Π½ΠΈ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΡΠ½Π΅Π΅ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ Π»Π΅ΠΆΠΈΡ. Π§ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ
ΡΠ΄Π΅Π»Π°ΡΡ? ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠΎΠ΄ΠΏΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΡ Π·Π°ΡΡΠ΅ΠΌ Π΅ΡΠ΅ ΠΏΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΠ²ΠΎΠΈΠΌΠΈ.
(gdb) set {char}0x8048e59="X"
(gdb) set {char}0x8048e5a="A"
(gdb) set {char}0x8048e5b="K"
(gdb) set {char}0x8048e5c="E"
(gdb) set {char}0x8048e5d="P"
ΠΡ Π° ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π½Π°ΡΠ΅ ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅. Π§ΡΠΎ ΡΠ°ΠΌ Π»Π΅ΠΆΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ:
(gdb) x/3sw 0x8048e59
0x8048e59 <_IO_stdin_used+437>: "XAKEP\004\b"
0x8048e61 <_IO_stdin_used+445>: ""
0x8048e62 <_IO_stdin_used+446>: ""
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΄Π°Π»ΠΈΠΌ Π½Π°Ρ Π±ΡΡΠΊΠΏΠΎΠΈΠ½Ρ:
(gdb) info break
Num Type Disp Enb Address What
1 breakpoint keep y 0x4006d585 in _IO_puts at ioputs.c:32
breakpoint already hit 1 time
(gdb) clear puts
Deleted breakpoint 1
Π ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ±Ρ Π½Π°ΡΠ»Π°Π΄ΠΈΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ:
ΠΠΎΡ ΠΈ Π²ΡΠ΅. ΠΡΡ ΠΎΠ΄ΠΈΠΌ.
(gdb) q
The program is running. Exit anyway? (y or n) y
ΠΠ° ΡΡΠΎΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΡΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΡΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ Π² ΡΡΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ β ΡΡΠΎ Π£Π§ΠΠΠ¬Π.
ΠΠΎΡ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ:
ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ:
// launch gdb
hack@exploit:~ > gdb
GNU gdb 4.18
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-suse-linux".
(gdb) attach "pid"
(gdb) attach 1127 // example
ΠΠΎΠΈΡΠΊ Π² ΠΏΠ°ΠΌΡΡΠΈ:
(gdb) x/d or x "address" show decimal
(gdb) x/100s "address" show next 100 decimals
(gdb) x 0x0804846c show decimal at 0x0804846c
(gdb) x/s "address" show strings at address
(gdb) x/105 0x0804846c show 105 strings at 0x0804846c
(gdb) x/x "address" show hexadecimal address
(gdb) x/10x 0x0804846c show 10 addresses at 0x0804846c
(gdb) x/b 0x0804846c show byte at 0x0804846c
(gdb) x/10b 0x0804846c-10 show byte at 0x0804846c-10
(gdb) x/10b 0x0804846c+20 show byte at 0x0804846c+20
(gdb) x/20i 0x0804846c show 20 assembler instructions at address
Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠ΅ΠΊΡΠΈΠΉ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅:
(gdb) maintenance info sections // or
(gdb) mai i s
Executable file:
`/home/hack/homepage/challenge/buf/basic", file type
elf32-i386.
0x080480f4->0x08048107 at 0x000000f4: .interp ALLOC
0x08048108->0x08048128 at 0x00000108: .note.ABI-tag
ALLOC LOAD READONLY DATA HAS_CONTENTS
0x08048128->0x08048158 at 0x00000128: .hash ALLOC
LOAD READONLY DATA HAS_CONTENTS
0x08048158->0x080481c8 at 0x00000158: .dynsym ALLOC
LOAD READONLY DATA HAS_CONTENTS
0x080481c8->0x08048242 at 0x000001c8: .dynstr ALLOC
LOAD READONLY DATA HAS_CONTENTS
0x08048242->0x08048250 at 0x00000242: .gnu.version
ALLOC LOAD READONLY DATA
HAS_CONTENTS
ΠΡΡΠΊ Π½Π° Π°Π΄ΡΠ΅Ρ:
(gdb) disassemble main
Dump of assembler code for function main:
0x8048400
0x8048401
0x8048403
0x8048409
0x804840c
0x804840f
0x8048412
0x8048414
0x8048415
...
(gdb) break *0x8048414 // example
Breakpoint 1 at 0x8048414
(gdb) break main // example
Breakpoint 2 at 0x8048409
(gdb)