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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux: ПолноС руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 124

Автор ДСнис ΠšΠΎΠ»ΠΈΡΠ½ΠΈΡ‡Π΅Π½ΠΊΠΎ

21.3.4. flex

flex [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] Ρ„Π°ΠΉΠ»

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠΎΠ΄ Π·Π° нас. Flex ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° языкС Π‘, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Π½Ρ‹ тСкста Π² тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ программистом. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‚ΠΎΠ³Π΄Π° самоС врСмя ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ страницы руководства man flex.

21.3.5. gprof

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ€ΠΎΠ΄Π΅ gprof Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π°ΠΌΠΈ. Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для опрСдСлСния быстродСйствия вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ врСмя Π΅Π΅ выполнСния. Π’Ρ‹ ΠΊΠ°ΠΊ программист Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ, Ссли Π½ΡƒΠΆΠ½ΠΎ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ исходный ΠΊΠΎΠ΄ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

21.3.6. strip

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° strip удаляСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

21.4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘

Π’ ΠΏ. 9.2.3 я сказал ΠΎ состояниях процСсса ΠΈ пСрСчислил срСди Π½ΠΈΡ… состояниС Β«Π·ΠΎΠΌΠ±ΠΈΒ». Π—ΠΎΠΌΠ±ΠΈ β€” это процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ, Π½ΠΎ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» сигнала ΠΎ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΈ Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΠ» Π΅Π³ΠΎ структуру ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ процСссов. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° процСсс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Π»ΠΈΠ±ΠΎ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. БСйчас ΠΌΡ‹ искусствСнно создадим Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·ΠΎΠΌΠ±ΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΈ уснСт Π½Π° 10 сСкунд. ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· 2 сСкунды, Π° Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 8 сСкунд ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² состоянии Π·ΠΎΠΌΠ±ΠΈ. Напоминаю, Ρ‡Ρ‚ΠΎ состояниС процСсса ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ top.

Листинг 21.3. Π€Π°ΠΉΠ» zombie.с

#include <unistd.h>

#include <signal.h>

#include <stdlib.h>

#include <sys/wait.h>

#include <stdio.h>


int main() {

 int pid;

 int status, died;


 pid=fork();

 switch(pid) {

 case -1:

  printf("ошибка fork\n");

  exit(-1);

 case 0:

  printf(" Π― ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ процСсса %d\n", getppid());

  printf(" Мой PID %d\n", getpid());

  // Π–Π΄Π΅ΠΌ 2 сСкунды ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡΡ

  sleep(2);

  exit(0);

 default:

  printf("Π― Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.\n");

  printf("Мой PID %d\n" , getpid());

  // Π–Π΄Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса

  // Ρ‡Π΅Ρ€Π΅Π· 10 сСкунд, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠ±ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ

  sleep(10);

  if (pid & 1)

   kill(pid,SIGKILL);

  died = wait(&status);

 }

}

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» zombie.с ΠΈ запуститС исполняСмый Ρ„Π°ΠΉΠ» zombie:

$ gcc -о zombie zombie.с

$ ./zombie

Π― Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.

Мой PID 1147

Π― ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ процСсса 1147

Мой PID 1148

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ послСдний Π½ΠΎΠΌΠ΅Ρ€ ΠΈ быстро ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ консоль, Π³Π΄Π΅ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ top -p 1148:

16:04:22 up 2 min, 3 users, load average: 0,10, 0,10, 0,04

1 processes: 0 sleeping, 0 running, 1 zombie, 0 stopped

CPU states: 4,5% user, 7,6% system, 0,0% nice, 0,0% iowait, 87,8% idle

Mem: 127560k av, 76992k used, 50568k free, 0k shrd, 3872k buff

24280k active, 19328k inactive

Swap: 152576k av, 0k used, 152576k free 39704k cached


PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

1148 den 17 0 0 0 0 Z 0,0 0,0 0:00 zombie <defunct>

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² спискС процСссов появился ΠΎΠ΄ΠΈΠ½ Π·ΠΎΠΌΠ±ΠΈ (STAT = Z), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«ΠΏΡ€ΠΎΠΆΠΈΠ²Π΅Ρ‚Β» Π² Ρ‚Π°ΠΊΠΎΠΌ состоянии Ρ†Π΅Π»Ρ‹Ρ… 8 сСкунд.

Π“Π»Π°Π²Π° 22

ΠžΡ‚Π»Π°Π΄ΠΊΠ°, трассировка ΠΈ оптимизация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

22.1. Ошибки ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ°

Π‘Π°ΠΌΡ‹ΠΌΠΈ ΡΡ‚Ρ€Π°ΡˆΠ½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ синтаксичСскиС, Π° Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ логичСскиС ошибки. Π’Π°ΡˆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ ΡΠΎΡ‚Π½ΡŽ ΠΌΠ΅Π»ΠΊΠΈΡ… синтаксичСских ошибок β€” Ρ‚Π°ΠΌ Π½Π΅ Ρ‚Π°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ написали, Ρ‚Π°ΠΌ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π° Π³Π΄Π΅-Ρ‚ΠΎ пропустили Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой. ПослС исправлСния всСх этих ошибок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Если ΠΆΠ΅ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΅Π³ΠΎ использовали, β€” Ρ‚ΠΎ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Π½Π΅ Π²Ρ‹Π΄Π°Ρ‚ΡŒ прСдупрСТдСния. Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ошибок Π½Π΅Ρ‚, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€ΡƒΡˆΠΈΡ‚ΡΡ. МнС запомнился ΠΎΠ΄ΠΈΠ½ Π°Ρ„ΠΎΡ€ΠΈΠ·ΠΌ: Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΅ΠΉ сказали, Π½ΠΎ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ хочСтся». Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ самоС ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅, Π½Π° ΠΌΠΎΠΉ взгляд, описаниС логичСской ошибки.

Если Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«ΡƒΠ²ΠΈΠ΄Π΅Π»Π° свСт», Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ. Одно Π΄Π΅Π»ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° бСсплатная, Π΄Ρ€ΡƒΠ³ΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π° Π½Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ дСньги, Π° Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊ Π½Π΅Π΄ΠΎΠ²ΠΎΠ»Π΅Π½... А Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½, Π΄Π²Π° мСсяца ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ваша логичСская ошибка «всплываСт» Π½Π°Ρ€ΡƒΠΆΡƒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ? Π”Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ слоТно, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° видишь ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: всС зависит ΠΎΡ‚ Π΅Π΅ спСцифики.

НапримСр, Ссли ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π‘Π£Π‘Π” для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ поля мСньший, Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° мСсяца ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π° Π² ΠΎΠ΄ΠΈΠ½ прСкрасный ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π²Π΅Π» ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ внСсла эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π±Π°Π·Ρƒ. Но это Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ ошибка, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстро.

А Π²ΠΎΡ‚ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для управлСния устройством ΠΈΠ»ΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΠΉ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ слоТно Π½Π°ΠΉΡ‚ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ Π½Π° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ установил Π½ΠΎΠ²ΠΎΠ΅ устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ с вашим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ. Или Π²Ρ‹ написали ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ» Π΄Π²Π°, ΠΈ ΠΎΠ±Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

КакиС ΠΆΠ΅ ошибки часто ΡΠΎΠ²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) программисты? Бамая Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ β€” Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ выраТСния Π½Π΅ эквивалСнтны:

x = y++ + 10;

x = ++y + 10;

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 15, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” 16.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎ частотС являСтся ошибка Π½Π΅ΡƒΡ‡Ρ‚Π΅Π½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. НапримСр, Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ массив, состоящий ΠΈΠ· 10 элСмСнтов, Π²Ρ‹ Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅:

int Π°[10];

А Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°:

for (i=0;i<=10;i++) a[i] = 0;

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° попытаСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт β€” Π°[10].

Или Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ распространСнный случай: программист Π·Π°Π±Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ нумСрация элСмСнтов массива начинаСтся с 0, ΠΈ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива:

for (i=1;i<10;i++) a[i] = 0;

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

1) ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² * ΠΈ &. Π­Ρ‚ΠΎ самая распространСнная Π³Ρ€ΡƒΠΏΠΏΠ° ошибок Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… программистов. Π’ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ ошибки:

/* Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ */

char *s;

*s = (char *s)malloc(25);

/* ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ */

char *s;

s = (char *s)malloc(25);

2) Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ нСдостаточного для адрСсации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° объСма памяти. НапримСр, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ссли попытаСмся ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² строку s (Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°) строку, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· 30 символов,

3) Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΊΠΈΠ΅ ошибки часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими структурами. НапримСр, с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌΠΈ списками: Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»Π°Π²Π½Ρ‹ΠΉ элСмСнт (head = NULL) ΠΈ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт.

ИспользованиС рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»Π΅Ρ‡ΡŒ Π·Π° собой ΠΎΡˆΠΈΠ±ΠΊΡƒ пСрСполнСния стСка, Ссли Π²Ρ‹ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π΄ΠΈΡ‚Π΅ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ рСкурсии. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, рСкурсивная функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму сСбя с нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ такая функция Π΄ΠΎΠ»ΠΆΠ½Π°, Π² зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΠΏΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ саму сСбя.

Для облСгчСния поиска ошибок Π±Ρ‹Π»ΠΈ созданы ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ. Одним ΠΈΠ· самых ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠ² для Linux являСтся gdb (The GNU Debugger). Π­Ρ‚ΠΎΡ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состав всСх распространСнных дистрибутивов (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… Β«ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹Ρ…Β» вСрсий β€” для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станций), ΠΈ для Π΅Π³ΠΎ установки достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ gdb.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gdb Π²Ρ‹ смоТСтС:

♦ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ;

♦ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² пошаговом Ρ€Π΅ΠΆΠΈΠΌΠ΅;

♦ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ останова (breakpoint);

♦ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ условиС останова ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

♦ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ.

22.2. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° gdb ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-sΠ΅ prog] [-c core] [-x cmds] [-d dir] [prog|core|procID]]

ΠšΠ»ΡŽΡ‡ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° описаны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 22.1.


ΠšΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки gdb Π’Π°Π±Π»ΠΈΡ†Π° 22.1

ΠšΠ»ΡŽΡ‡ НазначСниС -help ΠΈΠ»ΠΈ -h Π’Ρ‹Π²ΠΎΠ΄ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ описания всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -nx ΠΈΠ»ΠΈ -n НС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ„Π°ΠΉΠ»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ .gdbinit -q НС Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ привСтствиС ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± авторских ΠΏΡ€Π°Π²Π°Ρ… -batch ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 0, Ссли Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -x (ΠΈ Ρ„Π°ΠΉΠ»Π΅ .gdbinit, Ссли Π΅Π³ΠΎ использованиС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ). Если ΠΆΠ΅ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, возвращаСтся Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -cd=ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³) -f ΠΈΠ»ΠΈ -fullname Данная опция Π½ΡƒΠΆΠ½Π°, Ссли Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс тСкстового процСссора Emacs для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ gdb. Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ описаний ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ справочной систСмС -b bps (bits per second) Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ интСрфСйсу, Ссли Π²Ρ‹ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ -tty=Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π² качСствС стандартного Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° для ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. -s Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ -symbols=Ρ„Π°ΠΉΠ» Π§ΠΈΡ‚Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° -write Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ запись Π² исполняСмыС ΠΈ core-Ρ„Π°ΠΉΠ»Ρ‹ -e ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² качСствС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π΄Π°ΠΌΠΏΠ° -se=Ρ„Π°ΠΉΠ» Π§ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ символов ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² качСствС исполнимого -core=Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ -с Ρ„Π°ΠΉΠ» Π£ΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π΄Π°ΠΌΠΏΠ° -command=Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ -x Ρ„Π°ΠΉΠ» Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅) -d ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΊ списку поиска исходных тСкстов [prog|core|procID] ПослСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (prog), ΠΈΠ»ΠΈ Π΄Π°ΠΌΠΏ-Ρ„Π°ΠΉΠ» (core), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ создан Π² случаС ошибки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Segmentation fault), ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ процСссу (procID) -p PID ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ процСссу (данная опция стала доступной Π² вСрсии gdb 5.2)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ gdb для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Для этого ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ -g: