GDB là trình gỡ lỗi cho C, C ++, Objective-C, Pascal, Fortran, Go, D, OpenCL C, Ada và Modula-2.
CentOS dựa trên RHEL (Red Hat Enterprise Linux). Một trong những mục tiêu chính của RHEL là trở thành một hệ điều hành máy chủ ổn định, nghĩa là các phiên bản mới hơn của các gói phần mềm không phải lúc nào cũng có sẵn.
Tại thời điểm viết bài, CentOS 6 cung cấp GDB v7.2. Nhóm GDB, tuy nhiên, gần đây đã phát hành mã cho v7.91.
Chính thức đề xuất chạy một bản phân phối Linux khác để sử dụng phiên bản GDB mới hơn. Điều này không phải lúc nào cũng lý tưởng. May mắn thay, có thể cài đặt các phiên bản GDB mới hơn trên CentOS 6. Vì GDB là trình gỡ lỗi chứ không phải là thành phần cốt lõi của hệ thống, nên bạn khá an toàn khi sử dụng phiên bản mới hơn.
Bài viết này giải thích cách cài đặt cả phiên bản GDB được hỗ trợ và không được hỗ trợ trên CentOS 6.
Tôi cũng sẽ giải thích cách thiết lập GDB để cung cấp cho bạn thông tin gỡ lỗi dễ đọc hơn khi sử dụng Thư viện chuẩn C ++ (như chuỗi) và Thư viện mẫu chuẩn (như vectơ). Tính năng này được gọi là in ấn đẹp.
Đăng nhập vào VPS của bạn và thiết lập tài khoản người dùng của bạn
-
Đăng nhập vào VPS của bạn. Điều này có thể được thực hiện bằng cách nhấp vào "Xem Bảng điều khiển" trong bảng điều khiển Vultr hoặc với ứng dụng khách SSH.
(a) Đăng nhập bằng root.
(b) Tạo tài khoản người dùng của riêng bạn. Đặt mật khẩu.
adduser <username>
passwd <username>
(c) Cấp quyền truy cập sudo cho người dùng.
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) Đăng xuất bằng root, sau đó đăng nhập lại bằng tài khoản người dùng của bạn. An toàn hơn nhiều khi không bao giờ thực sự đăng nhập bằng root. Sử dụng sudo là một thực hành tốt hơn.
Nếu bạn muốn cài đặt phiên bản GDB được hỗ trợ chính thức (cũ hơn)
-
Cài đặt GDB.
sudo yum install gdb
-
Kiểm tra phiên bản đã cài đặt và xem vị trí của nó.
gdb --version
May say: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
which gdb
/usr/bin/gdb
Nếu bạn muốn cài đặt phiên bản GDB mới hơn từ nguồn
-
Cài đặt trình biên dịch C, chẳng hạn như GCC. Trình biên dịch C ++ không cần thiết để xây dựng GDB từ nguồn, nhưng cần thiết để thể hiện tính năng in đẹp của GDB. Bạn có thể xây dựng một phiên bản GCC mới hơn từ nguồn bằng cách thực hiện các bước trong bài viết Cách cài đặt GCC trên CentOS 6 . Hoặc, bạn có thể cài đặt phiên bản GCC được hỗ trợ chính thức của CentOS 6 bằng cách chạy:
sudo yum install gcc gcc-c++
-
Cài đặt thêm các gói yêu cầu.
sudo yum install wget tar gzip ncurses-devel texinfo svn python-devel
-
Quyết định phiên bản GDB nào bạn muốn xây dựng từ nguồn. Truy cập trang web GDB FTP để xem các phiên bản có sẵn để tải xuống.
-
Lấy nguồn của phiên bản GDB mà bạn muốn. Phần còn lại của bài viết này được viết cho v7.9.1 và sẽ tải xuống các nguồn vào ~/sourceInstallations/gdb-7.9.1/
- bạn sẽ phải thay thế số phiên bản phù hợp cho các phiên bản mới hơn.
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
-
Xây dựng GDB. Nếu điều này hoàn thành chính xác, dòng cuối cùng bạn sẽ thấy sẽ nói "thành công". Việc nhìn thấy một số thông báo tìm lỗi nhanh chóng là điều bình thường. Đây là an toàn để bỏ qua.
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
-
Cài đặt C ++ in ấn đẹp.
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.
-
Kiểm tra phiên bản đã cài đặt và vị trí của nó.
gdb --version
May say: GNU gdb (GDB) 7.9.1
which gdb
/usr/local/bin/gdb
-
Tùy chọn chạy GDB và thấy in ấn đẹp.
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.
-
Tùy chọn lấy lại dung lượng ổ cứng. Thư mục của bạn ~/sourceInstallations
sẽ chiếm khoảng 386MB. Có thể là khôn ngoan để giữ các thư mục, vì có một số tùy chọn cấu hình tùy chọn mà bạn có thể cần sử dụng tại một thời điểm nào đó trong tương lai, và sẽ nhanh hơn nếu có nhiều việc đã được thực hiện. Ngoài ra, quá trình xây dựng tạo ra các bản ghi mà sau này bạn có thể kiểm tra và làm việc nếu có sự cố. Nhưng, sau khi chạy sudo make install
trước đó, GDB đã cài đặt của bạn không phụ thuộc vào bất cứ thứ gì trong thư mục này và không gian có thể ở mức cao hơn, vì vậy bạn có thể thực hiện bước này và lấy lại 386MB hoặc hơn. QUAN TRỌNG: không xóa ~/gdb_printers/
thư mục! Nội dung của thư mục này được tải mỗi khi bạn chạy GDB. Chúng KHÔNG được biên dịch vào chính GDB.
cd ~/
rm -rf sourceInstallations
--- Again, if you can spare the space, you may someday be happy to have left it there.