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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 192

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

(gdb) <b>run</b>

Starting program: /home/neil/BLP4e/chapter10/debug4

Breakpoint 2, sortΒ (a=0x804a040, n=5) at debug4.c:30

30 /* 30 */Β Β  n--;

Breakpoint 2, sortΒ (a=0x804a040, n=5)Β at debug4.c:30

30 /* 30 */Β Β  n--;

Breakpoint 2,Β sortΒ (a=0x804a040, n=5) at debug4.c:30

30 /* 30 */Β Β  n--;

Breakpoint 2,Β sortΒ (a=0x804a040, n=5) at debug4.c:30

30 /* 30 */Β Β  n--;

Breakpoint 2, sort (a=0x804a040, n=5) at debug4.c:30

30 /* 30 */Β Β  n--;

array[0] = {alex,Β 1}

array[1] = {john,Β 2}

array[2] = {bill,Β 3}

array[3] = {neil,Β 4}

array[4] = {rick,Β 5}

Program exited with code 025.

(gdb)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ внСсти измСнСния ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π΅Π΅ с большим объСмом Π΄Π°Π½Π½Ρ‹Ρ….

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ gdb

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU β€” ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, способный ΡΠ½Π°Π±ΠΆΠ°Ρ‚ΡŒ мноТСством свСдСний ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ состоянии Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’ систСмах, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… срСдство Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ устанавливаСмых ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ gdb для наблюдСния Π·Π° измСнСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Аппаратно устанавливаСмыС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ β€” это функция Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ЦПУ; Ρ‚Π°ΠΊΠΈΠ΅ процСссоры способны автоматичСски ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ доступС ΠΊ памяти Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ области. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, gdb ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ (watch) Π·Π° выраТСниями. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ gdb ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ вычислСниС.

Π’ΠΎΡ‡ΠΊΠΈ останова ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ со счСтчиками ΠΈ условиями, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС фиксированного числа ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb Ρ‚Π°ΠΊΠΆΠ΅ способСн ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных систСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ смоТСтС ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ сСбя сСрвСрный процСсс Π²ΠΎ врСмя выполнСния Π±Π΅Π· нСобходимости ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ. МоТно ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ строки

gcc -O -g
, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСства ΠΎΡ‚ примСнСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НСдостаток Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ оптимизация ΠΌΠΎΠΆΠ΅Ρ‚ слСгка ΠΏΠ΅Ρ€Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, поэтому, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² пошаговом Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ "скачСтС Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π½Π°Π·Π°Π΄" ΠΏΠΎ строкам, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ³ΠΎ эффСкта, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. БистСмы Linux ΠΈ UNIX ΠΏΡ€ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ часто ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄Π°ΠΌΠΏ ядра Π² Ρ„Π°ΠΉΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ core. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит значСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ возникновСния сбоя. Π’Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ gdb для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсто Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π΅ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ см. Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ справочном руководствС ΠΊ gdb.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb доступСн Π² соотвСтствии с трСбованиями ΠžΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΠΉ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GNU ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм UNIX. ΠœΡ‹ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

Помимо ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ gdb, Linux-систСмы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ срСдства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ процСсса ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ статичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ динамичСский Π°Π½Π°Π»ΠΈΠ·.

БтатичСский Π°Π½Π°Π»ΠΈΠ· прСдоставляСт свСдСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ctags, cxref ΠΈ cflow Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡ… мСстС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ДинамичСский Π°Π½Π°Π»ΠΈΠ· прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π΅Π΄Ρ‘Ρ‚ сСбя Π²ΠΎ врСмя выполнСния. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ prof ΠΈ gprof ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ свСдСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΠΈ сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ заняло ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅,

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих срСдств ΠΈ ΠΈΡ… Π²Ρ‹Π²ΠΎΠ΄. НС всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доступны Π²ΠΎ всСх систСмах, хотя Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ· этих срСдств Π΅ΡΡ‚ΡŒ свободно распространяСмыС вСрсии.

Lint ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ошибок ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ систСмы UNIX прСдоставляли ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ

lint
. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ сущСству β€” прСпроцСссор компилятора Π‘ со вставлСнными тСстами, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π΄Ρ€Π°Π²ΠΎΠ³ΠΎ смысла ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ. Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ ΠΎΠ½Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ случаи примСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌ Π±Ρ‹Π»ΠΎ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ случаи нСиспользования Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π‘ΠΎΠ»Π΅Π΅ соврСмСнныС компиляторы C ΠΌΠΎΠ³ΡƒΡ‚ Ρ†Π΅Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ прСдупрСТдСния. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρƒ

lint
, ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΡƒΡŽ, ΠΎΠ±ΠΎΠ³Π½Π°Π»Π° стандартизация языка Π‘. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ срСдство ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Π»ΠΎΡΡŒ Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ компиляторС Π‘, ΠΎΠ½ΠΎ совсСм Π½Π΅ справляСтся с синтаксисом ANSI. Π•ΡΡ‚ΡŒ нСсколько коммСрчСских вСрсий
lint
для UNIX ΠΈ ΠΎΠ΄Π½Π° вСрсия Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ для Linux, названная
splint
. Она извСстна ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ LClint, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° MIT (Massachusetts Institute of Technology, ΠœΠ°ΡΡΠ°Ρ‡ΡƒΡΠ΅Ρ‚ΡΠΊΠΈΠΉ тСхнологичСский институт), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ срСдств Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания.
splint
, срСдство ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅
lint
, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠ±Π·ΠΎΡ€Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Найти
splint
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ адрСсу http://www.splint.org.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ вСрсия (debug0.c) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚Π»Π°Π΄ΠΈΠ»ΠΈ.

/*Β  1 */ typedef struct {

/*Β  2 */Β  char *data;

/*Β  3 */Β  int key;

/*Β  4 */ } item;

/*Β  5 */

/*Β  6 */ item array[j] = {

/*Β  7 */Β  {&quot;bill&quot;, 3},

/*Β  8 */Β  {&quot;neil&quot;, 4},

/*Β  9 */Β  {&quot;john&quot;, 2},

/* 10 */Β  {&quot;rick&quot;, 5},

/* 11 */Β  {&quot;alex&quot;, 1},

/* 12 */ };

/* 13 */

/* 14 */ sort(a, n)

/* 15 */Β item *a;

/* 16 */ {