# Дебъгване

Преди да се запознаем съв възможностите за дебъгване да напишем кратка програма за намиране на сума на числа: **suma.c**

## Сумиране на числа

Инициализираме променливa **sum=0**. Отпечатваме стойността на **argc**. Отпечатваме стойностите в **argv**. Броят на числата **num\_count** е втората стойност в **argv**. **num\_count** на брой пъти четем число от клавиатурата и го добавяме към сумата. Отпечатваме стойността на получената сума.

Създайте файл **suma.c** използвайки командата:

```
nano suma.c
```

## suma.c

```c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) 
{
  int numbers_count = 0, sum = 0;
  char temp_str[50];
  printf("The value of argc: %d\n", argc);
  printf("The value(s) in argv:\n");
  for(int i = 0; i < argc; i++) {
    printf("> argv[%d]=%s\n", i, argv[i]);
  }
  numbers_count = atoi(argv[1]);
  printf("Enter %d numbers:\n", numbers_count);
  for(int i = 0; i < numbers_count; i++) {
    scanf("%s", temp_str);
    sum += atoi(temp_str);
  }
  printf("Total sum is %d\n", sum);
}
```

![12\_suma.png](/files/-M50WS5V_nPNpv_j035w)

## Отстраняване на грешки

За да компилирате изходния код на програмата с включена възможност за дебъгване:

```
gcc suma.c -о suma
```

За да стартирате дебъгера:

```
gdb suma
```

За да поставите точка на прекъсване, където програмата ще спре изпълнението:

```
b [function name, line number]
```

За да стартирате програмата:

```
r [command line arguments]
```

В таблицата са дадени съкратените клавишни комбинации полезни при работа с дебъгера:

| Клавиш        | Информация                                                                    |
| ------------- | ----------------------------------------------------------------------------- |
| h             | Помощ                                                                         |
| n             | Стъпка напред един блок код                                                   |
| s             | Стъпка напред един ред код                                                    |
| p \[variable] | Отпечатва стойността на променливата variable                                 |
| info locals   | Отпечатва стойностите на всички локални променливи                            |
| bt            | Показва последователността на функциите, наречени до тази точка на изпълнение |
| q             | Изход                                                                         |

Повече информация: [Introduction to GDB](https://www.youtube.com/watch?v=sCtY--xRUyI) и [Harvard University CS50](https://www.youtube.com/watch?v=y5JmQItfFck)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dimitar-minchev.gitbook.io/linux-system-programming/02_programming/13_debugging.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
