GDB je program za ispravljanje pogrešaka za C, C++, Objective-C, Pascal, Fortran, Go, D, OpenCL C, Ada i Modula-2.
CentOS se temelji na RHEL-u (Red Hat Enterprise Linux). Jedan od glavnih ciljeva RHEL-a je biti stabilan poslužiteljski operativni sustav, što znači da novije verzije softverskih paketa nisu uvijek dostupne.
U trenutku pisanja, CentOS 6 nudi GDB v7.2. Međutim, GDB tim je nedavno objavio kod za v7.91.
Službeno se predlaže da se pokrene drugačija distribucija Linuxa kako bi se koristila novija verzija GDB-a. Ovo nije uvijek idealno. Na sreću, moguće je instalirati novije verzije GDB-a na CentOS 6. Budući da je GDB program za ispravljanje pogrešaka, a ne jezgra sustava, prilično je sigurno koristiti noviju verziju.
Ovaj članak objašnjava kako instalirati podržane i nepodržane verzije GDB-a na CentOS 6.
Također ću objasniti kako postaviti GDB kako bi vam pružio lakše čitljive informacije o otklanjanju pogrešaka kada koristite C++ standardnu knjižnicu (poput niza) i standardnu knjižnicu predložaka (poput vektora). Ova se značajka naziva lijepi ispis.
Prijavite se na svoj VPS i postavite svoj korisnički račun
-
Prijavite se na svoj VPS. To se može učiniti klikom na "View Console" na Vultr upravljačkoj ploči ili pomoću SSH klijenta.
(a) Prijavite se kao root.
(b) Izradite vlastiti korisnički račun. Postavite lozinku.
adduser <username>
passwd <username>
(c) Omogućite korisniku sudo pristup.
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.
(d) Odjavite se kao root, a zatim se ponovno prijavite sa svojim korisničkim računom. Mnogo je sigurnije nikada se zapravo ne prijaviti kao root. Korištenje sudo je bolja praksa.
Ako želite instalirati službeno podržanu (stariju) verziju GDB-a
-
Instalirajte GDB.
sudo yum install gdb
-
Provjerite instaliranu verziju i pogledajte njezino mjesto.
gdb --version
May say: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
which gdb
/usr/bin/gdb
Ako želite instalirati noviju verziju GDB-a iz izvora
-
Instalirajte C prevodilac, kao što je GCC. C++ prevodilac nije potreban za izgradnju GDB-a iz izvora, ali je potreban za demonstriranje GDB-ove lijepe značajke ispisa. Možete izraditi noviju verziju GCC-a iz izvora tako da izvršite korake u članku Kako instalirati GCC na CentOS 6 . Ili možete instalirati službeno podržanu verziju GCC-a za CentOS 6 tako da pokrenete:
sudo yum install gcc gcc-c++
-
Instalirajte dodatno potrebne pakete.
sudo yum install wget tar gzip ncurses-devel texinfo svn python-devel
-
Odlučite koju verziju GDB-a želite izgraditi iz izvora. Posjetite GDB FTP stranicu da vidite verzije koje su dostupne za preuzimanje.
-
Nabavite izvor verzije GDB-a koju želite. Ostatak ovog članka napisan je za v7.9.1 i preuzima izvore u ~/sourceInstallations/gdb-7.9.1/- morat ćete zamijeniti odgovarajući broj verzije za novije verzije.
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
-
Izgradite GDB. Ako se ovo završi ispravno, zadnji redak koji ćete vidjeti će pisati "uspjeh". Normalno je vidjeti neke poruke koje izgledaju kao pogreške kako se brzo pomiču. Ovo je sigurno zanemariti.
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
-
Instalirajte C++ lijep ispis.
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.
-
Provjerite instaliranu verziju i njezino mjesto.
gdb --version
May say: GNU gdb (GDB) 7.9.1
which gdb
/usr/local/bin/gdb
-
Po želji pokrenite GDB i vidite lijep ispis.
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.
-
Po želji povratite prostor na tvrdom disku. Vaš ~/sourceInstallationsće imenik zauzimati oko 386 MB. Vjerojatno je pametno zadržati direktorije, budući da postoje izborne opcije konfiguracije koje ćete možda morati koristiti u nekom trenutku u budućnosti, a bilo bi brže da već imate puno toga. Također, proces izgradnje stvara zapisnike koje kasnije možete provjeriti i raditi ako nešto pođe po zlu. Ali, nakon što se pokrene sudo make installranije, vaš instalirani GDB ne ovisi ni o čemu u ovom direktoriju, a prostor može biti premium, tako da možete učiniti ovaj korak i povratiti 386 MB ili tako nešto. VAŽNO: nemojte brisati ~/gdb_printers/imenik! Sadržaj ovog direktorija se učitava svaki put kada pokrenete GDB. NISU sastavljeni u sam GDB.
cd ~/
rm -rf sourceInstallations
--- Again, if you can spare the space, you may someday be happy to have left it there.