Дебъгерът играе жизненоважна роля във всяка система за разработка на софтуер. Никой не може да напише код без грешки наведнъж. По време на разработката се създават грешки и трябва да бъдат решени за по -нататъшно подобряване. Системата за разработка е непълна без грешка за отстраняване на грешки. Като се има предвид общността на разработчиците с отворен код, GNU Debugger е най -добрият им избор. Използва се и за разработване на търговски софтуер на платформи тип UNIX.
GNU Дебъгер, също известен като gdb, ни позволява да проникнем през кода, докато се изпълнява, или това, което програмата се опитва да направи в момента, преди да се срине. GDB основно ни помага да направим четири основни неща, за да уловим недостатъци в изходния код.
Можем да използваме gdb за отстраняване на грешки в програми, написани на ° С и C ++ без много усилия. Към момента поддръжка на други езици за програмиране като д, Модула-2, Фортран са частични.
GDB се извиква с помощта на gdb команда. При издаване gdb, той показва известна информация за платформата и ви пуска в (gdb), както е показано по -долу.
[[защитен имейл] ~]# gdb
GNU gdb (GDB) Fedora 7.6.50.20130731-19.fc20 Авторско право (C) 2013 Free Software Foundation, Inc. Лиценз GPLv3+: GNU GPL версия 3 или по -нова Това е безплатен софтуер: вие сте свободни да го променяте и разпространявате. НЯМА ГАРАНЦИЯ, доколкото това е позволено от закона. Въведете „показване на копиране“ и „показване на гаранция“ за подробности. Този GDB е конфигуриран като "x86_64-redhat-linux-gnu". Въведете „show configuration“ за подробности за конфигурацията. За инструкции за докладване на грешки, моля, вижте:. Намерете ръководството на GDB и други ресурси за документация онлайн на адрес:. За помощ въведете „помощ“. Въведете „apropos word“, за да търсите команди, свързани с „word“. (gdb)
Тип помогне списък за извеждане на различните класове команди, налични в gdb. Тип помогнепоследвано от име на клас за списък с команди в този клас. Тип помогнете на всички за списъка с всички команди. Съкращенията за имена на команди са разрешени, ако са недвусмислени. Например можете да пишете н вместо да пишете следващия или ° С за продължи и така нататък.
Често употребявани gdb команди са изброени в следната таблица. Тези команди трябва да се използват от командния ред на gdb (gdb).
Команда |
Описание |
бягай |
Стартирайте изпълнение на програма |
напусна |
Излезте от gdb |
печат expr |
Отпечатайте израза където expr може да е и променливо име |
следващия |
Отидете на следващия ред |
стъпка |
Влезте в следващия ред |
продължи |
Продължете от текущия ред до края на програмата или следващата точка на прекъсване |
Обърнете внимание на разликата между двете команди стъпка и следващия. The следващия командата не влиза във функцията, ако следващият ред е извикване на функция. Като има предвид, че стъпка команда може да влезе във вътрешната функция и да види какво се случва там.
Помислете за следния изходен код.
// sum.c. #включваint сума (int a, int b) {int c; c = a + b; връщане c; } int main () {int x, y, z; printf ("\ nВъведете първия номер:"); scanf ("%d", & x); printf ("Въведете втория номер:"); scanf ("%d", & y); z = сума (x, y); printf ("Сумата е %d \ n \ n", z); връщане 0; }
За да отстраним грешките в изходния файл, трябва да го компилираме -g опция за gcc както следва.
$ gcc -g сума.c -o сума
Изходният файл сума може да бъде прикрепен към gdb по един от следните 2 начина:
1. Като посочите изходния файл като аргумент на gdb.
$ gdb сума
2. Изпълнение на изходния файл в gdb с помощта файл команда.
$ gdb. (gdb) сума на файла
The списък командата изброява редовете във файла с изходния код и премества показалеца. Така че първо списъкще покаже първите 10 реда и следващия списък показва следващите 10 и така нататък.
(gdb) списък. 1 #включва2 3 int сума (int a, int b) {4 int c; 5 c = a + b; 6 връщане c; 7} 8 9 int main () {10 int x, y, z;
За да започнете изпълнение, издайте бягайкоманда. Сега програмата се изпълнява нормално. Но забравихме да поставим някои точки на прекъсване в изходния код за отстраняване на грешки, нали? Тези точки на прекъсване могат да бъдат посочени за функции или в определени редове.
(gdb) b основна
Забележка: Използвал съм съкращение б за прекъсване.
След задаване на точка на прекъсване при основната функция, повторното стартиране на програмата ще спре на ред 11. Същото може да се осъществи, ако номерът на реда е известен преди.
(gdb) b сума.c: 11
Сега преминете през редовете на кода, като използвате следващияили н команда. Важно е да се отбележи, че следващия командата не влиза в кода на функцията, освен ако на функцията не е зададена точка на прекъсване. Нека да изпробваме печат командвайте сега. Задайте точка на прекъсване на сумата на функцията, както е показано по -долу.
(gdb) b сума Точка на прекъсване 1 при 0x4005aa: файл sum.c, ред 5. (gdb) r Стартираща програма: /root /sum Въведете първото число: 2 Въведете второто число: 3 Breakpoint 1, сума (a = 2, b = 3) при sum.c: 5 5 c = a + b; (gdb) p a $ 1 = 2 (gdb) p b $ 2 = 3. (gdb) c Продължава. Сумата е 5 [Inferior 1 (процес 3444) излезе нормално]
Ако програмата, която се изпълнява, изисква параметри на командния ред, предоставете същите заедно с бягай команда като.
(gdb) изпълнение.. .
Споделените библиотечни файлове, свързани с текущата работеща програма, могат да бъдат изброени като.
(gdb) споделяне на информация От до Симс Прочетете Споделена библиотека на обекти 0x00000035a6000b10 0x00000035a6019c70 Да /lib64/ld-linux-x86-64.so.2 0x00000035a641f560 0x00000035a6560bb4 Да /lib64/libc.so.6
GDB също е в състояние да променя променливи по време на изпълнението на програмата. Нека изпробваме това. Както бе споменато по -горе, задайте точка на прекъсване на ред 16 и стартирайте програмата.
(gdb) r Стартираща програма: /root /sum Въведете първото число: 1 Въведете второто число: 2 Breakpoint 1, main () в sum.c: 16 16 printf ("Сумата е %d \ n \ n", z); (gdb) набор z = 4 (gdb) c Продължаване. Сумата е 4
Сега а = 1, b = 2 и резултатът трябва да бъде z = 3. Но тук променихме крайния резултат на z = 4 в основната функция. По този начин отстраняването на грешки може да бъде улеснено с помощта на gdb.
За да получите списъка с всички точки на прекъсване информационни точки на прекъсване.
(gdb) информация точки на прекъсване Num Тип Disp Enb адрес Каква 1 точка на прекъсване запазва y 0x00000000004005c2 в основната сума sum.c: 11
Тук има само една точка на прекъсване и тя е To. активирано деактивиране на точките на прекъсване указва номера на точката на прекъсване заедно с деактивирайте команда. За да активирате след това използвайте активирайте команда.
(gdb) деактивирайте 1 (gdb) информационни точки на прекъсване Num Тип Disp Enb Адрес Каква 1 точка на прекъсване запазете n 0x00000000004005c2 в основната на sum.c: 11
Можете също да изтриете точките на прекъсване с Изтрий команда.
Многобройни процеси се изпълняват във фонов режим в GNU/Linux система. За отстраняване на грешки в работещ процес първо трябва да намерим идентификатора на процеса на този конкретен процес. пидофкомандата ви дава pid на процес.
$ pidof
Сега трябва да прикачим този pid към gdb. Има 2 начина.
1. Като посочите pid заедно с gdb.
$ gdb -p
2. Използвайки прикачете команда от gdb.
(gdb) прикачване
Това е всичко за сега. Това са само основите на gdb, за да започнете добре при отстраняване на грешки в изходния код и това е много повече от нещата, обяснени по -горе. Например, можем да отстраняваме грешки, използвайки информация за стека, променливи на средата и много други. Опитайте се да си поиграете с всички тези неща ...