NR == 1198 { stopme() } # ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ == 1198
/* ...ΠΎΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΡΠ°Π½Π΅Π΅... */
ΠΠ°ΡΠ΅ΠΌ ΠΈΠ· GDB ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π‘ stopme() ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ awk. ΠΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΈ gawk, Π³Π΄Π΅, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ-Π»ΠΎΠ²ΡΡΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π΅Π΅ Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΌΠ½ΠΎΠΆΠ°Π΅Ρ Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ, ΠΈ ΠΎΠ½Π° ΡΠΎΡ ΡΠ°Π½ΠΈΠ»Π° Π½Π°ΠΌ Π±Π΅ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°ΡΠΎΠ² ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠΈ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
15.5. ΠΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
ΠΠΎΠΌΠΈΠΌΠΎ GDB ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π»ΠΎΠ²ΡΡΠ΅ΠΊ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ΄ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΊΡΡΠΏΠ½ΠΎΠΌΠ°ΡΡΡΠ°Π±Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠΎΠΊΡΡΠΈΡΡΡΡΡΡ Π½Π° ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΠ°ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΡΠΈΡ malloc() ΠΈ free() ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
ΠΠΌΠ΅ΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (ΠΈΠ»ΠΈ Π²ΡΠ΅) ΠΈΠ· ΡΠ΅Ρ Π²Π΅ΡΠ΅ΠΉ, ΡΡΠΎ ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π½Π°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ GNU/Linux, Π° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈ. ΠΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΠΈΠ΅ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΡΠ²Π»ΡΡΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ.
15.5.1. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° dbug β ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠΉ printf()
ΠΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° dbug. ΠΠ½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΈΠ΄Π΅Π΅ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Π½ΠΎ ΠΈΠ΄Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π»ΡΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΠ½Π° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π°ΠΌΠΈ ΡΠΎΠ²Π΅ΡΠΎΠ², ΠΈΠ·Π±Π°Π²Π»ΡΡ Π²Π°Ρ ΠΎΡ Ρ Π»ΠΎΠΏΠΎΡ ΠΏΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° dbug, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π€ΡΠ΅Π΄ΠΎΠΌ Π€ΠΈΡΠ΅ΠΌ (Fred Fish) Π² Π½Π°ΡΠ°Π»Π΅ 1980-Ρ , Π±ΡΠ»Π° Ρ ΡΠ΅Ρ ΠΏΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π°. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠ½Π° ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· Π²ΡΡΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠ°ΠΊ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ ΡΠ°ΡΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ. ΠΠ½Π° Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ΅ΡΠ΅Π· Π°ΡΡ ΠΈΠ² FTP Π€ΡΠ΅Π΄Π° Π€ΠΈΡΠ°[175] ΠΊΠ°ΠΊ Π² Π²ΠΈΠ΄Π΅ ΡΠΆΠ°ΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° tar, ΡΠ°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ Π°ΡΡ ΠΈΠ²Π° ZIP. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠ΅Π·ΡΠΌΠΈΡΡΠ΅Ρ dbug:
dbug ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ°ΠΊΠΈΡ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ ΠΎΡΠΎΠ±ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΎΠ½Π° Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. ΠΠ΄ΠΎΠ±Π°Π²ΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΎΡΠΎΠ±ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π²ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ, Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠΎ ΡΠ΅Π·ΠΊΠΎ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠΈΡΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΎΡΠΌΠ°ΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, Π³Π΄Π΅ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ, ΡΠΎΡΠΌΠ° Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°...
ΠΠ°ΠΊΠ΅Ρ dbug Π»ΠΈΡΡ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ 10%, ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡ 10 Π΄ΠΎ 20%. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΠΎΡΠΎΠ±ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π‘, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΎΠ±Π° ΡΡΠΈΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄ΠΎ Π½ΡΠ»Ρ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΡΠ°ΡΠΊΠΈΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠ°ΠΊΠ΅ΡΠ° dbug. ΠΠ°ΠΆΠ΄ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΊΠ°Π·Π°Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
β’ Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠ°Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡΡΡΡΠΏΠΎΠ², ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΡ Π³Π»ΡΠ±ΠΈΠ½Ρ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ
β’ ΠΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΊΠ»ΡΡΠ΅Π²ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
β’ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
β’ ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΡ.
β’ ΠΠΎΠΌΠ΅ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ.
β’ ΠΠΎΠΌΠ΅ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
β’ Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅ ΠΈΠ»ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
β’ ΠΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ (stdout) ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ». ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ (stderr). ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ°ΠΊΠ΅Ρ dbug ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ Π²Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ setjmp() ΠΈ longjmp(). ΠΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈΠ· main(). ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΠΎΠΏΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎ -#, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. Π ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π²ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΎΡΠ΅ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°. ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅:
1 #include <stdio.h>
2 #include "dbug.h"
3
4 int
5 main(argc, argv)
6 int argc;
7 char *argv[];
8 {
9 register int result, ix;
10 extern int factorial(), atoi();
11
12 DBUG_ENTER("main");
13 DBUG_PROCESS(argv[0]);
14 DBUG_PUSH_ENV("DBUG");
15 for (ix = 1; ix < argc && argv[ix][0] == '-'; ix++) {
16 switch (argv[ix][1]) {
17 case '#':
18 DBUG_PUSH(&(argv[ix][2]));
19 break;
20 }
21 }
22 for (; ix < argc; ix++) {
23 DBUG_PRINT("args", ("argv[%d] = %s", ix, argv[ix]));
24 result = factorial(atoi(argv(ixj));
25 printf("%d\n", result);
26 fflush(stdout);
27 }
28 DBUG_RETURN(0);
29 }
ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π°ΠΆΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΊΡΠΎΡ DBUG_ENTER() (ΡΡΡΠΎΠΊΠ° 12) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π»ΡΠ±ΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. (ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ ΡΠ°ΠΌ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .[176])
ΠΠ°ΠΊΡΠΎΡ DBUG_PROCESS() (ΡΡΡΠΎΠΊΠ° 13) ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ . ΠΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, ΠΈΠ· main().
ΠΠ°ΠΊΡΠΎΡ DBUG_PUSH_ENV() (ΡΡΡΠΎΠΊΠ° 14) Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ DBUG) Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ (Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ dbug Π²ΡΠΊΠΎΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ.) ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ, ΡΠΎΡ ΡΠ°Π½ΠΈΠ² ΡΠ²ΠΎΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π² Π½ΠΎΠ²ΠΎΠ΅, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΡΠ΅ΠΊ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΡΠ΅ΠΊ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅Ρ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. (Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ, DBUG ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, GAWK_DBUG Π±ΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅ [Π΄Π»Ρ gawk].)
ΠΠ°ΠΊΡΠΎΡ DBUG_PUSH (ΡΡΡΠΎΠΊΠ° 18) ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ -#. (ΠΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ getopt() ΠΈΠ»ΠΈ getopt_long() Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ.
ΠΠ°ΠΊΡΠΎΡ DBUG_PRINT() (ΡΡΡΠΎΠΊΠ° 23) ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄. ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°Π½Π΅Π΅ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 15.4.1.1 Β«ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡΒ»), ΠΏΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΠΊΠΎΠ±ΠΊΠΈ Π²ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² printf(), Π΄Π΅Π»Π°Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π‘. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ; Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° dbug Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π·Π° Π²Π°Ρ.
ΠΡΠΈ ΠΏΠ΅ΡΠ°ΡΠΈ dbug ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ DBUG_PRINT(). ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° Π»ΠΈΡΡ ΡΠ΅ΠΌΠΈ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ DBUG_PRINT(), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΠ°ΠΊΡΠΎΡ DBUG_RETURN() (ΡΡΡΠΎΠΊΠ° 28) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° return Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ void ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΎΡ DBUG_VOID_RETURN.
ΠΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ factorial():
1 #include <stdio.h>
2 #include "dbug.h"
3
4 int factorial (value)
5 register int value;
6 {
7 DBUG_ENTER("factorial");
8 DBUG_PRINT("find", ("find %d factorial", value));
9 if (value > 1) {
10 value *= factorial(value β 1);
11 }
12 DBUG_PRINT("result", ("result is %d", value));