Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 155

Автор ΠΡ€Π½ΠΎΠ»ΡŒΠ΄ Роббинс

Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ваш ΠΊΠΎΠ΄ исправил ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Или это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·-Π·Π° измСнСния тСста, ΠΈΠ»ΠΈ Ρ‚ΡƒΠ΄Π° Π±Ρ‹Π» внСсСн ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ΄? Когда Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ вашС исправлСниС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΡƒΠ±Π΅Ρ€ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈ Π·Π°ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ снова. Π—Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ исправлСниС Π½Π° мСсто ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ошибки Π½Π΅Ρ‚. Π­Ρ‚ΠΎΡ‚ шаг Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ вашС исправлСниС Ρ€Π΅ΡˆΠΈΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ ΠΊΠ½ΠΈΠ³Π΅ Debugging ΠΈ ΠΏΠ»Π°ΠΊΠ°Ρ‚ с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ для свободной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎ адрСсу http://www.debuggingrules.com.

15.8. РСкомСндуСмая Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅, с мноТСством свСдСний ΠΊΠ°ΠΊ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ тСстирования, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. ВсС, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ, относятся ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π˜Ρ… всС стоит ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ.

1. Debugging, David J. Agans. AMACOM, New York, New York. USA 2003. ISBN: 0-8144-7168-4.

ΠΠ°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ эту ΠΊΠ½ΠΈΠ³Ρƒ. Π£ Π½Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ, ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π²ΡƒΡ‡Π°Π½ΠΈΠ΅, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ β€” ΠΎΠ΄Π½ΠΎ ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅!

2. Programming Pearls, 2nd edition, by Jon Louis Bentley. Addison-Wesley, Reading, Massachusetts, USA, 2000, ISBN: 0-201-63788-0. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Π±-сайт этой ΠΊΠ½ΠΈΠ³ΠΈ.[189]

Π’ Π³Π»Π°Π²Π΅ 5 этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ обсуТдСниС тСстирования элСмСнтов ΠΈ построСния тСстовой срСды.

3. Literate Programming, by Donald E. Knuth. Center for the Study of Language and Information (CSLI), Stanford University, USA, 1992. ISBN: 0-9370-7380-6.

Π­Ρ‚Π° Π²ΠΎΡΡ…ΠΈΡ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΈΠ³Π° содСрТит ряд статСй Π”ΠΎΠ½Π°Π»ΡŒΠ΄Π° ΠšΠ½ΡƒΡ‚Π° ΠΏΠΎ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ (literate programming) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ΅ программирования, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΈΠ·ΠΎΠ±Ρ€Π΅Π» ΠΈ использовал для создания Π’Π΅Π₯ ΠΈ Metafont. ΠžΡΠΎΠ±Ρ‹ΠΉ интСрСс прСдставляСт ΡΡ‚Π°Ρ‚ΡŒΡ, озаглавлСнная «Ошибки Π’Π΅Π₯Β», которая описываСт, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π» Π’Π΅Π₯, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π³ΠΎ ΠΆΡƒΡ€Π½Π°Π» всСх Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… ΠΈ исправлСнных ошибок.

4. Writing Solid Code, by Steve Maguire. Microsoft Press, Redmond, Washington, USA, 1993. ISBN 1-55615-551-4.

5. Code Complete: A Practical Handbook of Software Construction, by Steve McConnell Microsoft Press, Redmond, Washington, USA, 1994. ISBN: 1-55615-484-4.

6. The Practice of Programming, by Brian W. Kernighan and Rob Pike. Addison-Wesley, Reading. Massachusetts, USA, 1999. ISBN: 0-201-61585-X.

15.9. РСзюмС

β€’ ΠžΡ‚Π»Π°Π΄ΠΊΠ° являСтся Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ошибок Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° всСгда Π±ΡƒΠ΄Π΅Ρ‚ с Π½Π°ΠΌΠΈ.

β€’ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΏΠΎΠ΄ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ. На ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах компиляция с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ компиляция с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ нСсовмСстимы. Π­Ρ‚ΠΎ Π½Π΅ относится ΠΊ GCC, Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ GNU/Linux Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

β€’ ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ GNU GDB являСтся стандартом Π½Π° систСмах GNU/Linux ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° любой коммСрчСской систСмС Unix. (Π’Π°ΠΊΠΆΠ΅ доступны ΠΈ Π»Π΅Π³ΠΊΠΎ пСрСносимы графичСскиС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ Π½Π° основС GDB.) ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, отслСТиваСмыС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ пошаговоС исполнСниС с посрСдством next, step ΠΈ cont ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΏΡ€ΠΈ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅. GDB позволяСт Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

 β€’ Π˜ΠΌΠ΅Π΅Ρ‚ся мноТСство Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π΅Π΅ упрощСния, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ придСтся Π΅Π΅ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. ΠœΡ‹ рассмотрСли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

 β€’ ΠžΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ макросы для Π²Ρ‹Π²ΠΎΠ΄Π° состояния.

 β€’ Π˜Π·Π±Π΅Π³Π°Π½ΠΈΠ΅ макросов с выраТСниями.

 β€’ ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ ΠΊΠΎΠ΄Π° для облСгчСния пошагового выполнСния.

 β€’ ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для использования ΠΈΡ… ΠΈΠ· ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

 β€’ Π˜Π·Π±Π΅Π³Π°Π½ΠΈΠ΅ объСдинСний.

 β€’ ΠŸΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ исполнСния Π² Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ обСспСчСниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способов Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π° этого ΠΊΠΎΠ΄Π°.

 β€’ Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для упрощСния установки ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ.

β€’ Π”ля ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΠΎΠΌΠΈΠΌΠΎ простых ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния сущСствуСт ряд инструмСнтов ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° dbug прСдоставляСт элСгантный Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· описанных Π½Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, связанным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

β€’ Π‘ущСствуСт мноТСство ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для динамичСской памяти, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ сходныС свойства. ΠœΡ‹ рассмотрСли Ρ‚Ρ€ΠΈ ΠΈΠ· Π½ΠΈΡ… (mtrace, Electric Fence ΠΈ dmalloc) ΠΈ прСдоставили ссылки Π½Π° нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Valgrind ΠΈΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ дальшС, обнаруТивая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, относящиСся ΠΊ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ динамичСской памяти.

β€’ splint являСтся соврСмСнной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ V7 lint. Она доступна ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° систСмС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· поставщиков GNU/Linux ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ΠΈ построСна ΠΈΠ· исходных ΠΊΠΎΠ΄ΠΎΠ².

β€’ ΠŸΠΎΠΌΠΈΠΌΠΎ инструмСнтов ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния являСтся Ρ‚Π°ΠΊΠΆΠ΅ тСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π•Π΅ слСдуСт ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Сю с самого Π½Π°Ρ‡Π°Π»Π° любого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π΄Π°ΠΆΠ΅ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ.

β€’ ΠžΡ‚Π»Π°Π΄ΠΊΠ° являСтся ΡƒΠΌΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ Debugging Дэвида Π”ΠΆ. Эганса ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

УпраТнСния

1. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GCC, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊ -g, Ρ‚Π°ΠΊ ΠΈ -O. ЗапуститС Π΅Π΅ ΠΏΠΎΠ΄ GDB, установив ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² main(). Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ пошагово ΠΈ посмотритС, насколько Π±Π»ΠΈΠ·ΠΊΠΎ соотвСтствуСт (ΠΈΠ»ΠΈ Π½Π΅ соотвСтствуСт) исполнСниС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ исходному ΠΊΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎ особСнно Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Ρ†ΠΈΠΊΠ»Ρ‹ while ΠΈΠ»ΠΈ for.

2. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΠ± особСнности GDB условной ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Насколько это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ лишь послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ сдСлано ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ число ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ?

3. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ parse_debug() ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° 15.4.2.1 «ДобавляйтС ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ строк ΠΎΠΏΡ†ΠΈΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„Π»Π°Π³ΠΎΠ² ΠΈ Π΄Π»ΠΈΠ½ строк

4. (Π’Ρ€ΡƒΠ΄Π½ΠΎΠ΅.) Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ gawk; Π² частности, структуру NODE Π² awk.h. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ содСрТимоС NODE, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π² ΠΏΠΎΠ»Π΅ type.

5. Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π΅ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ dbug. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅ сначала Π±Π΅Π· -DDBUG, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° компилируСтся ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. (Π•ΡΡ‚ΡŒ Π»ΠΈ Ρƒ вас для Π½Π΅Π΅ Π½Π°Π±ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½Ρ‹Ρ… тСстов? ΠŸΡ€ΠΎΡˆΠ»Π° Π»ΠΈ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° всС тСсты?)

УбСдившись, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ dbug Π½Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π΅ с -DDBUG. По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π»ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° всС свои тСсты? Какова Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅? ЗапуститС ваш тСстовый Π½Π°Π±ΠΎΡ€ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -#t, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ трассировку Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° придСтся ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ? ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄Π° ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚?

6. Π—апуститС ΠΎΠ΄Π½Ρƒ ΠΈΠ· своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, с Electric Fence ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… тСстСров динамичСской памяти. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ.

7. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Valgrind с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Π΅ Π²Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ.

8. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ Π½Π°Π±ΠΎΡ€ тСстов для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ mv. (ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ mv(1): ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ…Π²Π°Ρ‚ΠΈΠ»ΠΈ всС Π΅Π΅ ΠΎΠΏΡ†ΠΈΠΈ.)

9. ΠŸΠΎΠΈΡ‰ΠΈΡ‚Π΅ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ рСсурсы ΠΏΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. КакиС интСрСсныС Π²Π΅Ρ‰ΠΈ Π²Ρ‹ нашли?

Π“Π»Π°Π²Π° 16

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ всС Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ довольно Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ связали всС, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ прСдставлСно, рассмотрСв V7 ls.c. Однако, Π½Π΅Ρ‚ достаточно нСбольшой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, насколько Π±Ρ‹ это Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ всС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ API, прСдставлСнныС начиная с Π³Π»Π°Π²Ρ‹ 8 Β«Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ²Β».

16.1. ОписаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’ повсСднСвном использовании СдинствСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, которая Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π² этой ΠΊΠ½ΠΈΠ³Π΅, являСтся ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°. И Π½Π° самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Unix, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ нСбольшая, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ².

НастоящиС ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ большими ΠΈ бСспорядочными творСниями. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ пСрСносимости, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обрисовывали ΠΏΠΎ всСй ΠΊΠ½ΠΈΠ³Π΅, Π° ΠΏΠΎΠΌΠΈΠΌΠΎ этого, ΠΎΠ½ΠΈ часто Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ошибки Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… вСрсиях Unix Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ, ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ мноТСство Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ API систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ сохранСнных ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Ρ‚.Π΄. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π° ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Bash, ksh93 ΠΈΠ»ΠΈ zsh, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.

ВмСсто этого ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ список шагов ΠΏΠΎ написанию своСй собствСнной ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π»ΠΈΠ±ΠΎ Π² качСствС (большого) упраТнСния для закрСплСния вашСго понимания, Π»ΠΈΠ±ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² качСствС совмСстного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ссли Π²Ρ‹ ΠΎΠ±ΡƒΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ Π² ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ.