ГДБ је програм за отклањање грешака за Ц, Ц++, Објецтиве-Ц, Пасцал, Фортран, Го, Д, ОпенЦЛ Ц, Ада и Модула-2.
ЦентОС је заснован на РХЕЛ (Ред Хат Ентерприсе Линук). Један од главних циљева РХЕЛ-а је да буде стабилан серверски оперативни систем, што значи да новије верзије софтверских пакета нису увек доступне.
У време писања, ЦентОС 6 нуди ГДБ в7.2. Међутим, ГДБ тим је недавно објавио код за в7.91.
Званично се предлаже да се покрене другачија Линук дистрибуција како би се користила новија верзија ГДБ-а. Ово није увек идеално. На срећу, могуће је инсталирати новије верзије ГДБ-а на ЦентОС 6. Пошто је ГДБ програм за отклањање грешака, а не језгра система, прилично је безбедно да користите новију верзију.
Овај чланак објашњава како да инсталирате подржане и неподржане верзије ГДБ-а на ЦентОС 6.
Такође ћу објаснити како да подесите ГДБ да вам пружи лакше читљиве информације о отклањању грешака када користите Ц++ стандардну библиотеку (попут стринга) и стандардну библиотеку шаблона (попут вектора). Ова карактеристика се зове прилично штампање.
Пријавите се на свој ВПС и подесите свој кориснички налог
-
Пријавите се на свој ВПС. Ово се може урадити кликом на „Виев Цонсоле“ на Вултр контролној табли или помоћу ССХ клијента.
(а) Пријавите се као роот.
(б) Креирајте сопствени кориснички налог. Поставите лозинку.
adduser <username>
passwd <username>
(ц) Одобрите кориснику судо приступ.
visudo
After the line "root ALL=(ALL) ALL"
Add the line "<username> ALL=(ALL) ALL"
--- If you aren't familiar with vi, go to the line "root ALL=(ALL) ALL".
--- Hit "o" to create a new line after that line and enter insert mode.
--- Type "<username> ALL=(ALL) ALL".
--- Hit ESC.
--- Type "ZZ" to save.
(д) Одјавите се као роот, а затим се поново пријавите са својим корисничким налогом. Много је сигурније да се никада не пријавите као роот. Коришћење судоа је боља пракса.
Ако желите да инсталирате званично подржану (старију) верзију ГДБ-а
-
Инсталирајте ГДБ.
sudo yum install gdb
-
Проверите инсталирану верзију и погледајте њену локацију.
gdb --version
May say: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
which gdb
/usr/bin/gdb
Ако желите да инсталирате новију верзију ГДБ-а из извора
-
Инсталирајте Ц компајлер, као што је ГЦЦ. Ц++ компајлер није потребан за прављење ГДБ-а из извора, али је потребан да би се демонстрирала ГДБ-ова лепа карактеристика штампања. Можете да направите новију верзију ГЦЦ-а из извора тако што ћете извршити кораке у чланку Како инсталирати ГЦЦ на ЦентОС 6 . Или можете да инсталирате званично подржану верзију ГЦЦ-а за ЦентОС 6 тако што ћете покренути:
sudo yum install gcc gcc-c++
-
Инсталирајте додатно потребне пакете.
sudo yum install wget tar gzip ncurses-devel texinfo svn python-devel
-
Одлучите коју верзију ГДБ-а желите да направите из извора. Посетите ГДБ ФТП локацију да видите верзије које су доступне за преузимање.
-
Набавите извор верзије ГДБ-а коју желите. Остатак овог чланка је написан за в7.9.1 и преузима изворе у ~/sourceInstallations/gdb-7.9.1/- мораћете да замените одговарајући број верзије за новије верзије.
mkdir ~/sourceInstallations
cd ~/sourceInstallations
wget ftp://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz .
tar -zxvf gdb-7.9.1.tar.gz
-
Изградите ГДБ. Ако се ово заврши исправно, последњи ред који ћете видети ће рећи „успех“. Нормално је да се неке поруке које изгледају као грешке брзо померају. Ово је сигурно игнорисати.
mkdir gdb-7.9.1.build
cd gdb-7.9.1.build
../gdb-7.9.1/configure --with-python=yes && make && sudo make install && echo success
--- If your VPS has multiple cores, you can speed up the build by changing the middle part
--- of this line from "&& make &&" to "&& make -j <number of cores> &&".
--- You can see the number of cores your VPS has by running "nproc"
--- The parameter "--with-python=yes" is necessary for the pretty printing feature
-
Инсталирајте Ц++ прилично штампање.
cd ~/
svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python gdb_printers
Create a file ~/.gdbinit of:
python
import sys
sys.path.insert(0, '/home/<yourUserName>/gdb_printers/')
from libstdcxx.v6.printers import register_libstdcxx_printers
end
--- One way to create this file is to run "vi ~/.gdbinit", hitting "i" to enter insert mode,
--- typing the above file, hitting ESC, and hitting "ZZ" to save.
-
Проверите инсталирану верзију и њену локацију.
gdb --version
May say: GNU gdb (GDB) 7.9.1
which gdb
/usr/local/bin/gdb
-
Опционо покрените ГДБ и видите лепо штампање.
mkdir ~/gdbExample
cd ~/gdbExample
Create a file gdbExample.cpp of:
#include <string>
#include <vector>
using namespace std;
int main() {
string foo = "bar";
vector<string> vec;
vec.push_back("foo");
vec.push_back("bar");
vec.push_back("foobar");
}
--- One way to create this file is to run "vi gdbExample.cpp", hitting "i" to enter insert mode,
--- typing the above file, hitting ESC, and hitting "ZZ" to save.
g++ -ggdb gdbExample.cpp -o gdbExample
Start GDB traditionally, by running "gdb ./gdbExample". Or, start GDB by using its terminal user interface (basically a text mode GUI), by running "gdb --tui ./gdbExample".
Enter "break main" to set a breakpoint at the beginning of function main() -- and it will say:
Breakpoint 1 at 0x<someAddress>: file gdbExample.cpp, line 6.
Enter "run" to start the program, which will immediately hit the breakpoint you just set -- and it will say:
Starting program: /home/<yourUserName>/gdbExample/gdbExample
Breakpoint 1, main () at gdbExample.cpp:6
6 string foo = "bar";
Enter "next" and hit enter four times, and gdb will move up to just before executing:
10 vec.push_back("foobar");
Enter "print foo" and gdb will show:
$1 = "bar"
Enter "print vec" and gdb will show:
$2 = std::vector of length 2, capacity 2 = {"foo", "bar"}
--- Remember, line 10 hasn't executed yet to add "foobar" to the vector
Enter "quit" and "y" to quit anyway.
-
Опционо повратите простор на чврстом диску. Ваш ~/sourceInstallationsименик ће заузимати око 386 МБ. Вероватно је паметно задржати директоријуме, јер постоје опционе опције конфигурације које ћете можда морати да користите у неком тренутку у будућности, а било би брже да сте већ много тога урадили. Такође, процес изградње прави евиденције које касније можете да проверите и да радите са њима ако нешто крене наопако. Али, након покретања sudo make installраније, ваш инсталирани ГДБ не зависи ни од чега у овом директоријуму, а простор може бити премиум, тако да можете да урадите овај корак и повратите 386 МБ или тако нешто. ВАЖНО: немојте брисати ~/gdb_printers/именик! Садржај овог директоријума се учитава сваки пут када покренете ГДБ. НИСУ састављени у сам ГДБ.
cd ~/
rm -rf sourceInstallations
--- Again, if you can spare the space, you may someday be happy to have left it there.