A GDB a C, C++, Objective-C, Pascal, Fortran, Go, D, OpenCL C, Ada és Modula-2 hibakeresője.
A CentOS az RHEL-en (Red Hat Enterprise Linux) alapul. Az RHEL egyik fő célja, hogy stabil szerver operációs rendszer legyen, ami azt jelenti, hogy a szoftvercsomagok újabb verziói nem mindig állnak rendelkezésre.
A cikk írásakor a CentOS 6 GDB v7.2-t kínál. A GDB csapata azonban nemrégiben kiadta a v7.91-es kódot.
Hivatalosan javasolt egy másik Linux disztró futtatása a GDB újabb verziójának használatához. Ez nem mindig ideális. Szerencsére lehetőség van a GDB újabb verzióinak telepítésére a CentOS 6 rendszerre. Mivel a GDB egy hibakereső, nem pedig a rendszer alapvető összetevője, meglehetősen biztonságos az újabb verzió használata.
Ez a cikk elmagyarázza, hogyan telepítheti a GDB támogatott és nem támogatott verzióit is CentOS 6 rendszeren.
Azt is elmagyarázom, hogyan kell beállítani a GDB-t, hogy könnyebben olvasható hibakeresési információkat nyújtson a C++ Standard Library (például karakterlánc) és a Standard Template Library (például vektor) használatakor. Ezt a funkciót szép nyomtatásnak nevezik.
Jelentkezzen be a VPS-be, és állítsa be felhasználói fiókját
-
Jelentkezzen be a VPS-be. Ezt megteheti a Vultr vezérlőpultján a „View Console” (Konzol megtekintése) lehetőségre kattintva vagy egy SSH-kliens segítségével.
(a) Jelentkezzen be rootként.
(b) Hozzon létre saját felhasználói fiókot. Állítsa be a jelszót.
adduser <username>
passwd <username>
(c) Adjon a felhasználónak sudo hozzáférést.
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) Jelentkezzen ki rootként, majd jelentkezzen be újra felhasználói fiókjával. Sokkal biztonságosabb, ha soha nem jelentkezik be rootként. A sudo használata jobb gyakorlat.
Ha a GDB hivatalosan támogatott (régebbi) verzióját szeretné telepíteni
-
Telepítse a GDB-t.
sudo yum install gdb
-
Ellenőrizze a telepített verziót, és nézze meg a helyét.
gdb --version
May say: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
which gdb
/usr/bin/gdb
Ha a GDB újabb verzióját szeretné telepíteni a forrásból
-
Telepítsen egy C fordítót, például a GCC-t. A C++ fordító nem szükséges a GDB forrásból való felépítéséhez, de szükséges a GDB szép nyomtatási funkciójának bemutatásához. A GCC újabb verzióját a forrásból készítheti el a GCC telepítése CentOS 6 rendszeren című cikk lépéseinek végrehajtásával . Vagy telepítheti a GCC hivatalosan támogatott CentOS 6 verzióját a következő futtatással:
sudo yum install gcc gcc-c++
-
Telepítse a további szükséges csomagokat.
sudo yum install wget tar gzip ncurses-devel texinfo svn python-devel
-
Döntse el, hogy a GDB melyik verzióját szeretné forrásból felépíteni. Látogassa meg a GDB FTP webhelyét a letölthető verziók megtekintéséhez.
-
Szerezze be a GDB kívánt verziójának forrását. A cikk további része a 7.9.1-es verzióhoz készült, és a forrásokat ide fogja letölteni ~/sourceInstallations/gdb-7.9.1/– az újabb verziókra a megfelelő verziószámot kell behelyettesítenie.
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
-
Építsd meg a GDB-t. Ha ez helyesen fejeződik be, az utolsó sorban a „siker” lesz látható. Normális, ha néhány hibásnak tűnő üzenet gyorsan elgurul. Ezeket nyugodtan figyelmen kívül hagyhatjuk.
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
-
Telepítse a C++ szép nyomtatást.
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.
-
Ellenőrizze a telepített verziót és annak helyét.
gdb --version
May say: GNU gdb (GDB) 7.9.1
which gdb
/usr/local/bin/gdb
-
Opcionálisan futtassa a GDB-t, és nézze meg a szép nyomtatást.
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.
-
Opcionálisan igényeljen helyet a merevlemezen. A ~/sourceInstallationskönyvtára körülbelül 386 MB-ot foglal majd el. Valószínűleg bölcs dolog megtartani a könyvtárakat, mivel vannak opcionális konfigurációs lehetőségek, amelyeket a jövőben esetleg használni kell, és gyorsabb lenne, ha sok mindent már elvégezne. Az építési folyamat emellett naplókat is készít, amelyeket később ellenőrizhet, és ha valami nem sikerül, akkor dolgozhat belőle. De a sudo make installkorábbi futás után a telepített GDB nem függ semmitől ebben a könyvtárban, és a hely prémium kategóriájú lehet, így ezt a lépést megteheti, és visszaszerezheti a 386 MB-ot. FONTOS: ne törölje a ~/gdb_printers/könyvtárat! Ennek a könyvtárnak a tartalma a GDB minden egyes futtatásakor betöltődik. NEM magába a GDB-be lettek összeállítva.
cd ~/
rm -rf sourceInstallations
--- Again, if you can spare the space, you may someday be happy to have left it there.