Tải bản đầy đủ (.ppt) (51 trang)

Công cụ gỡ lỗi (gdb) doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (143.02 KB, 51 trang )

1
Chủ đề tuần này

Làm thế nào để sử dụng công cụ gỡ lỗi (gdb)

Cấu trúc dữ liệu cây
-
Cây nhị fân
-
Cây nhị fân tìm kiếm

Đệ quy tiến trình trên cây.
2
Gdb để gỡ lỗi (1)

gdb: the Gnu DeBugger (công cụ gỡ lỗi của Gnu).

/>misc/gdb.html

Sử dụng khi lõi chương trình hỏng.

Hoặc khi ta muốn đi xuyên suốt sự thi hành của chương
trình theo từng dòng 1.
3
Gdb for Debugging (2)

Trước khi sử dụng gdb :
-
Phải biên dịch mã nguồn C với cờ phụ là
-g .
-


Điều này sẽ giúp đặt tất cả mã nguồn vào dạng nhị fân
có thể thực thi được.
-
Sau đó ta có thể thực thi chương trình như sau: gdb
chuongtrinh
-
Nuôi dưỡng 1 môi trường dịch.
4
Gdb for Debugging (3)
Gdb> run

Chương trình chạy.

Nếu tất cả đều tốt, chương trình sẽ thoát thành công, trả
bạn về dấu nhắc.

Nếu có lỗi thì gdb sẽ báo cho bạn biết và huỷ bỏ chương
trình.
5
Gdb – Các câu lệnh cơ bản (1)

Dò ngược ngăn xếp (“where”)
-
Chương trình bị lỗi
-
Đâu là dòng lệnh cuối cùng trong chương trình được
thực thi trước khi gặp lỗi?
-
Đó là điều lệnh where sẽ chỉ ra cho bạn.
6

Gdb – Các câu lệnh cơ bản (2)

Xem hình minh hoạ lệnh “where” trong slide tiếng anh
tr7.
Last call: lần gọi cuối.
7
Gdb – Các câu lệnh cơ bản (3)

Tìm kiếm vùng trên cùng của stack dò ngược tương ứng
với lỗi của bạn.

Đề fòng với:
-
Free vùng nhớ mà bạn không cấp phát trước đó.
-
Truy nhập mảng sau phần tử cuối cùng của nó.
-
Con trỏ quy chiếu ngược không trỏ tới phần của khối đã
được malloc().
8
Gdb – Các câu lệnh cơ bản (4)

Các câu lệnh break,continue,next, step
-
break: dừng sự thi hành ở dòng được chỉ ra.
gdb> break foo.c: 100(đặt điểm break).
- continue: tiếp tục lại sự thi hành từ điểm đó.
-
next: thực thi dòng lệnh tiếp theo, sau đó dừng
lại.

-
step: thực thi câu lệnh tiếp theo.

Đi vào trong hàm nếu cần thiết (next thì
không).
9
Gdb – Các câu lệnh cơ bản (5)

Lệnh print và display

print: in ra giá trị của bất cứ biểu thức nào trong chương
trình.
gdb> print i
$1 = 100

display: in ra 1 gia trị cụ thể mỗi lần mà thi hành dừng
lại.
gdb> display i
10
Gdb – in mảng (1)

print cũng có thể dùng để in ra mảng
int arr[] = {1,2,3};

gdb> print arr
$1 = {1,2,3}

($1 chỉ là tên của kết quả)
print $1
$2 = {1,2,3}

11
Gdb – in mảng (2)

gdb xảy ra vấn đề với các mảng được cấp phát động.
int*arr;
arr= (int*)malloc(3 * sizeof(int));
arr[0] = 1; arr[1] = 2; arr[2] = 3;
gdb> print arr
$1 = (int*) 0x8094610

Nó không thực sự hữu dụng.
12
Gdb – in mảng (3)

Có thể in mảng này sử dụng @ (cú pháp gdb
đặc biệt).
int*arr;
arr = (int*)malloc(3 * sizeof(int));
arr[0] = 1; arr[1] = 2; arr[2] = 3;
gdb> print *arr@3
$2 = {1, 2, 3}
13
Gdb – các kí tự viết tắt

Các câu lệnh gdb thông thường có các viết tắt sau:
-
p (giống print)
-
c (giống continue)
-

n (giống next)
-
s (giống step)

Thuận tiện hơn để sử dụng khi gỡ lỗi.
14
Cây,cây nhị fân,cây tìm kiếm nhị fân

Danh sách liên kết là 1 cấu trúc tuyến tính, và rất
khó sử dụng nó để tổ chức biểu diễn các đối
tượng phân cấp.

Mặc dù stack và queue cũng fản ánh đôi chút về
cấp bậc, nhưng nó bị giới hạn chỉ 1 chiều duy
nhất.

Để thoát khỏi giới hạn này, ta tạo 1 kiểu dữ liệu
mới gọi là tree bao gồm các node và các arc
(cạnh,cung). Không giống với cây tự nhiên,
những cây này được vẽ từ trên xuống với root ở
trên cùng và các lá (leaf) ở dưới cùng.
15
Cây gia đình (family tree)

Xem hình minh hoạ trong slide tiếng anh tr17.
16
Định nghĩa của tree

1 cây là 1 tập hợp xác định của 1 hay nhiều node mà:
- Có 1 node đắc biệt gọi là root.

- Các node còn lại chúng lại phân hoạch thành n>=0 tập
T1,T2,…Tn, mà mỗi tập này lại là 1 cây.
- Ta gọi T1,T2,…Tn là các subtree(cây con) của root.
17
Định nghĩa đệ quy (recursive definition)

Xem hình minh hoạ slide tiếng anh tr19.
18
Binary tree(cây nhị fân)

Cây nhị fân là 1 cây mà không node nào của nó có quá
2 con.

Mỗi node có 0,1 hoặc 2 con.
19
Biểu diễn liên kết

Mỗi node của cây được biểu diễn như là 1 đối tượng
có cùng kiểu dữ liệu.

Không gian yêu cầu bởi n node cây nhị fân = n *
(không gian yêu cầu của 1 node)
typedef elmType;
//bất cứ kiểu phần tử nào
typedef struct nodeType {
elmType element;
struct nodeType *left, *right;
};
typedef struct nodeType *treetype;
Element (data)

Con trái
Con fải
20
1 cây nhị fân liên kết

Xem hình minh hoạ slide tiếng anh tr22
21
Binary Tree ADT (kiểu dữ liệu trừu
tượng cây nhị fân)

makenullTree(treetype *t)

creatnewNode()

isEmpty()
22
Khởi tạo và đặc tả cây

typedef …elmType;

typedef struct nodeType {
elmType element;
struct nodeType *left, *right;
} node_Type;

typedef struct nodeType *treetype;

void MakeNullTree(treetype *T){
(*T)=NULL;
}


int EmptyTree(treetype T){
return T==NULL;
}
23
Truy nhập con trái và con fải

treetype LeftChild(treetype n)
{
if (n!=NULL) return n->left;
else return NULL;
}

treetype RightChild(treetype n)
{
if (n!=NULL) return n->right;
else return NULL;
}
24
Tạo 1 node mới
node_type *create_node(elmtype NewData)
{
N=(node_type*)malloc(sizeof(node_type));
if (N != NULL)
{
N->left = NULL;
N->right = NULL;
N->element = NewData;
}
return N;

}
25
Kiểm tra 1 node có fải lá không
int IsLeaf(treetype n){
if(n!=NULL)
return(LeftChild(n)==NULL)&&
(RightChild(n)==NULL);
else return -1;
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×