GNU gdb 5.3...(gdb) <b>break do_print</b> /* ΠΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Π² do_print */Breakpoint 1 at 0x805a36a: file builtin.c, line 1504.(gdb) <b>run 'BEGIN { print "hello, world" }'</b> /* ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */Starting program: /home/arnold/Gnu/gawk/gawk-3.1.3/gawk 'BEGIN { print "hello, world" }'Breakpoint 1, do_print (tree=0x8095290) at builtin.c:15041504 struct redirect *rp = NULL; /* ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ */(gdb) <b>list</b> /* ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ */14991500 void1501 do_print(register NODE *tree)1502 {1503 Β register NODE **t;1504Β struct redirect *rp = NULL;1505 Β register FILE *fp;1506Β int numnodes, i;1507 Β NODE *save;1508Β NODE *tval;ΠΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ GDB ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ Π»ΠΈΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π·Π° ΡΠ°Π·. GDB Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅. Π§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°
next(gdb) <b>next</b> /* ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ (ΡΡΡΠΎΠΊΠ° 1504 Π²ΡΡΠ΅) */1510 fp = redirect_to_fp(tree->rnode, &rp); /* GDB Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ */(gdb) /* ΠΠ°ΠΆΠΌΠΈΡΠ΅ ENTER Π΄Π»Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ */1511 if (fp == NULL)(gdb) /* ΡΠ½ΠΎΠ²Π° ENTER */1519 save = tree = tree->lnode; (gdb) /* Π ΡΠ½ΠΎΠ²Π° */1520 for (numnodes = 0; tree != NULL; tree = tree->rnode)ΠΠΎΠΌΠ°Π½Π΄Π°
stepnextstepnextΠ‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ
stepstepnextΠΠΠΠΠ§ΠΠΠΠ. ΠΠ΅Π³ΠΊΠΎ Π·Π°Π±ΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π°, ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π½Π°ΠΆΠΈΠΌΠ°ΡΡ ENTER Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅
stepstrlen()printf()finishΠΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
print(gdb) <b>print *save</b> /* ΠΡΠ²Π΅ΡΡΠΈ ΡΡΡΡΠΊΡΡΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ save */$1 = {sub = {nodep = {l = {lptr = 0x8095250, param_name = 0x8095250 "pR\t\b",Β l1 = 134828624}, r = {rptr = 0x0, pptr = 0, preg = 0x0,Β hd = 0x0, av = 0x0, r_ent =0}, x = {extra = 0x0, x1 = 0,Β param_list = 0x0},Β name = 0x0, number = 1, reflags = 0}, val = {Β fltnum = 6.6614191194446594e-316, sp = 0x0, slen = 0, sref = 1,Β idx = 0}, hash = {next = 0x8095250, name = 0x0, length = 0, value = 0x0,Β ref = 1}}, type = Node_expression_list, flags = 1}Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π°
cont1520 for (numnodes = 0; tree != NULL; tree = tree->rnode)(gdb) <b>cont</b> /* ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ *!Continuing.hello, worldProgram exited normally. /* Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ GDB */(gdb) <b>quit</b> /* ΠΡΠΉΡΠΈ ΠΈΠ· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° */ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΠΎΡΠΊΠ° (watchpoint) ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ , Π° Π½Π΅ Π΄Π»Ρ ΠΊΠΎΠ΄Π°. ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΈΠ»ΠΈ ΠΏΠΎΠ»Ρ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°), ΠΏΡΠΈ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ GDB ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ. GDB ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
do_lint_oldgawk--lint_oldgetopt_long()getopt_long()main.cgawkint do_lint_old = FALSE;Β /* ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΡ ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅, Π½Π΅ ΠΈΠΌΠ΅Π²ΡΠ΅ΠΉΡΡ Π² V7 awk */...static const struct option optab[] = {Β ...Β { "lint-old", no_argument, &do_lint_old, 1 },Β ...};ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π½ΡΠ°, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎΡΠΊΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
$ <b>gdb gawk</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ GDB Ρ gawk */GNU gdb 5.3