Linux gdb tutorial 1 - debug chương trình trên linux sử dụng gdb

0

 GDB là một chương trình debug, gỡ rối chương trình rất phổ biến đối với công việc lập trình trong linux.


1/ Tạo chương trình C

Tạo file test.c và build thành file test
cú pháp :       gcc -g -o file_output  file_c    
gcc: cài đặt trên linux  tại đây
-g : tham số trình biên dịch sẽ gắn thông tin debug vào trong code nhị phân khi xuất ra.
-o : output tên của chương trình muốn dịch ra :vd trên là test
file_output  : đặt tên cho file xuất ra
file_c : file viết bằng C


Nội dung file
khởi chạy chương trình c vừa build xong 
chương trình tính tổng và in ra hello
2/Sử dụng gdb để load chương trình

cài đặt gdb:    yum -y install gdb    
cài thêm peda   https://github.com/longld/peda     

Reading symbols form ... done (thông báo mở chương trình thành công)

Câu lệnh:     gdb <program_file>    

program_filefile chương trình c vừa build

-Xem source code file test
sử dung :            list main           
do lúc chạy lệnh gcc -g có tham số -g trước khi build nên sẽ xem được code C
xem hàm main
xem hàm func 

- Xem code bằng hợp ngữ - Assembly 
sử dụng cú pháp :     disas <tên hàm>  
disas main

disas func
-Lệnh : run hoặc r
chạy chương trình trong gdb

-Lệnh : start
lệnh này sẽ chạy chương trình theo từng lệnh 1. 


Lệnh mã máy tương ứng 
tương ứng với dòng lệnh trong file C

gõ tiếp : n 
sẽ chạy đến dòng lệnh kế tiếp

-Lệnh: info break  
hoặc i b
xem thông tin có set break point cho chương trình hay không, hiện tại chưa đặt nên sẽ có thông báo 
No breakpoints or watchpoints.
vd : đặt breakpoints tại line 11 của hàm main
chỉ cần set lệnh: b 11
thông tin breakpoints được hiển thị và chương trình sẽ dừng tại line 11


-Lệnh xem thanh ghi: i r


chú ý: trong thanh ghi vi xử lý 32bit. chúng ta có thể dùng phần thấp của nó là 16bit, trong phần 16bit đó cũng có thể xem như 2 thanh ghi 8bit độc lập

-Lệnh : set $thanh_ghi = value
vd: set thanh ghi rax = 0

vd sửa phần thấp 

Chú ý: số thập lục phân cần có 0x vào phía trước


Post a Comment

0Comments
Post a Comment (0)