gỡ rối – xử lý lỗi – ngoại lệ

26
Gỡ rối – Xử lý lỗi – Ngoại lệ Nhóm 10 1

Upload: emile

Post on 25-Jan-2016

47 views

Category:

Documents


3 download

DESCRIPTION

Gỡ rối – Xử lý lỗi – Ngoại lệ. Nhóm 10. Nội dung. Tầm quan trọng của gỡ lỗi. Xác nhận (assertions) Xử lý lỗi Xử lý ngoại lệ Xử lý rào chắn Các công cụ sửa lỗi. Tầm quan trọng của gỡ lỗi. BEGIN. Syntax error. Compile. Hiện thực. Bài toán. Code. No Syntax error. Wrong result. Run. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Gỡ rối – Xử lý lỗi – Ngoại lệ

1

Gỡ rối – Xử lý lỗi – Ngoại lệ

Nhóm 10

Page 2: Gỡ rối – Xử lý lỗi – Ngoại lệ

2

Nội dung

• Tầm quan trọng của gỡ lỗi.• Xác nhận (assertions)• Xử lý lỗi• Xử lý ngoại lệ• Xử lý rào chắn• Các công cụ sửa lỗi

Page 3: Gỡ rối – Xử lý lỗi – Ngoại lệ

Slide 3/41

Tầm quan trọng của gỡ lỗi

Bài toán Code

Chương trình

Hiệnthực Compile

Run

Syntax error

NoSyntax error

Correct resultEND

BEGIN

Run-time error( Exception )

Wrong result

?

Page 4: Gỡ rối – Xử lý lỗi – Ngoại lệ

4

Các loại lỗi của chương trình

• Compile-time error = Syntax error• Run-time error = Exception, tình huống bất bình

thường đã xẩy ra trong khi chương trình thực thi.• Khi có Exception:– Có thể là máy bị treo (halt).– Chương trình ngắt đột ngột, điều khiển trả về cho OS, OS

thu hồi bộ nhớ của chương trình ( đuổi ra ngoài ).

• Cần có cơ chế điều khiển tình huống này.

Page 5: Gỡ rối – Xử lý lỗi – Ngoại lệ

5

Tầm quan trọng của gỡ lỗi

• Tránh các lỗi đáng tiếc xảy ra.• Giảm bớt hậu quả thiệt hại về lỗi

Page 6: Gỡ rối – Xử lý lỗi – Ngoại lệ

6

Assertion là gì

• Định nghĩa: Assertion là một đoạn code cho phép 1 chương trình tự kiểm tra chính nó trong quá trình thực thi. Nếu giá trị của assertion là true chương trình hoạt động đúng , nếu false là phát hiện lỗi trong chương trình.

• Lập trình viên sử dụng assertion để mô tả cách thức các đoạn code hoạt động như thế nào, chứng thực các ràng buộc bên trong hệ thống.

Page 7: Gỡ rối – Xử lý lỗi – Ngoại lệ

7

Một assertion thường nhận 2 đối số: 1 biểu thức luận lý kết quả trả về là true hoặc false cho biết chương trình chạy sai hay đúng. Một đối số là 1 messages thông báo cho lập trình viên biết lỗi của chương trình nếu kết quả là false.VD: trong java dùng assertion như sau:

Assert 0 <= index && index < length : “ Out of memory”;• Trong C++ cung cấp macro “ assert” tương tự như hàm nhưng

không có tham số message thông báo lỗi.Vd: assert(0 <= index && index < length);

Page 8: Gỡ rối – Xử lý lỗi – Ngoại lệ

8

Xử lý các assertion bị thất bại

• Khi assertion bị thất bại, đầu tiên là nó sẽ truyền thông báo lỗi đến người dùng bằng nhiều cách (in ra màn hình, message box, file log...). Khi các thông báo chuẩn đoán được hiển thị. Có nhiều cách chọn lựa tiếp theo:– Kết thúc chương trình– Cho phép thực thi tiếp chương trình– Quăng một ngoại lệ quay về đoạn code bị lỗi.– Cho phép kết hợp 1 hay nhiều cách trên.

Page 9: Gỡ rối – Xử lý lỗi – Ngoại lệ

9

Lợi ích của assertions

• Vai trò của các assertion là xác định lỗi trong chương trình.• Một lợi ích lớn nữa là giúp việc kiểm thử ứng dụng được hiệu

quả hơn.• Tuy nhiên assertion chỉ có hiệu quả khi được thực thi trong

đoạn mã nguồn chứa nó.

Page 10: Gỡ rối – Xử lý lỗi – Ngoại lệ

10

Giới hạn của assertions

• Bản thân 1 assertion cũng có thể tồn tại các lỗi và do 1 trong các nguyên nhân sau:– Thông báo lỗi không có thực.– Không thực hiện được 1 báo cáo lỗi tồn tại trong chương trình– Not being side-effect free Assertion có thể tác động đến hiệu năng cùa chương trình:

Chiếm nhiều thời gian thực thi Nắm giữ vùng nhớCác assertion có thể làm cho việc kiểm thử chương trình khó khăn hơn.

Page 11: Gỡ rối – Xử lý lỗi – Ngoại lệ

11

Xử lý lỗi• Neutral value (giá trị trung l p)â• Substitute the next piece of valid data (thay thế phần kế tiếp của dữ li u ê

hợp l )ê• Return the same answer as the previous time (trả về kết quả giống nhau

như thời gian trước)• Substitute the closet legal value (thay thế giá trị hợp l gần đúng nhất)ê• Log a warning message to a file (gửi thông đi p cảnh báo đến 1 file)ê• Return an error code (trả về 1 lỗi code)• Call an error processing routine/object (gọi 1 đối tượng/routine xử lý lỗi)• Display an error message wherever the error is encountered (hiển thị

thông báo lỗi bất cứ khi nào 1 lỗi được g p phải).ă• Handle the error in whatever way works best locally (xử lý các lỗi trong bất

cứ cách nào hoạt đ ng tốt nhất tại n i b )ô ô ô• shutdown

Page 12: Gỡ rối – Xử lý lỗi – Ngoại lệ

12

XỬ LÝ NGOẠI LỆ (Exception Handle)

Định nghĩa:

- Là một lỗi đặc biệt( chia cho 0, vượt kích thước mảng, mở file chưa tồn tại… )

- Xuất hiện lúc thực thi chương trình

- Tạo ra các excception, các trạng thái này không được biết trước khi đang xây dựng chương trình

- Có thể bị kết thúc đột ngột

- Các ngôn ngữ lập trình mạnh về xử lý ngoại lệ: Java, C#,…

Mục đích:

- Chương trình không bị ngắt đột ngột

- Tránh lãng phí tài nguyên

Page 13: Gỡ rối – Xử lý lỗi – Ngoại lệ

13

XỬ LÝ NGOẠI lỆ(Exception Handle)

Mô hình xử lý ngoại lệ trong Java:

- catch & throw. 5 từ khóa để xử lý ngoại lệ:

• Try

• Catch

• Throw

• Throws

• Finally

Page 14: Gỡ rối – Xử lý lỗi – Ngoại lệ

14

XỬ LÝ NGOẠI LỆ(Exception Handle)

Cấu trúc:

try { }

catch(Exception e1) { }

catch(Exception e2) { }

catch(Exception eN) { }

Finally { }

Page 15: Gỡ rối – Xử lý lỗi – Ngoại lệ

15

XỬ LÝ NGOẠI LỆ(Exception Handle)

Ưu điểm:

- Phân phối trạng thái lỗi chỉ vào những nơi cần thiết

- Một thông báo lỗi có thể được xuất ra khi tiến hành xử lý ngoại lệ

Page 16: Gỡ rối – Xử lý lỗi – Ngoại lệ

Slide 16/41

Bẫy lỗi bằng try...catch...finally

• Để chương trình vẫn có thể tiếp tục hoạt động, người lập trình cần phải dự đoán lỗi có thể xẩy ra để bẫy lỗi.

• Bẫy lỗi bằng cú pháp: try...catch ...finally ...

try { < các lệnh thử làm> }catch ( Exception1 e1) { < code xử lý lỗi> }catch ( Exception2 e2) { < code xử lý lỗi> }finally { <các lệnh sẽ làm dù có lỗi hay không> }// Buộc phải có {...} dù chỉ có 1 phát biểu

Page 17: Gỡ rối – Xử lý lỗi – Ngoại lệ

17

XỬ LÝ NGOẠI LỆ(Exception Handle)

Khối ‘try’ và ‘catch’- Thi hành mô hình ‘catch và throw’- Một hay nhiều khối ‘catch’ có thể theo sau khối ‘try’- Các khối ‘catch’ bắt các ngoại lệ bị chặn trong khối ‘try’Ví dụ:try{

doFileProcessing(); //user-defined methoddisplayResults();

}Catch(Exception e) {

System.err.println(“Error:” + e.toString());e.printStackTrace();

}

Page 18: Gỡ rối – Xử lý lỗi – Ngoại lệ

18

XỬ LÝ NGOẠI LỆ(Exception Handle)

Các khối ‘try’ lồng nhau:try{

statement 1;statement 2;try{

statement 1;statement 2;

}catch(Exception e) { } // of the inner try block

}catch(Exception e) { } // of the outer try block

Page 19: Gỡ rối – Xử lý lỗi – Ngoại lệ

19

XỬ LÝ NGOẠI LỆ(Exception Handle)

public class Example{

public void exceptionExample() throws Exexception, LookupException{

try{

//statement}catch(ExException exmp) { }catch(LokkupException lkpex) { }

}}

Page 20: Gỡ rối – Xử lý lỗi – Ngoại lệ

20

XỬ LÝ NGOẠI LỆ(Exception Handle)

Khối finally- Thực hiện thu hồi tài nguyên khi một ngoại lệ xảy ra- Sử dụng kết hợp với khối ‘try’try{

doSomethingThatMightThrowAnException();}finally{

cleanup();}

Page 21: Gỡ rối – Xử lý lỗi – Ngoại lệ

21

Page 22: Gỡ rối – Xử lý lỗi – Ngoại lệ

22

XỬ LÝ NGOẠI LỆ(Exception Handle)

throw & throws• throw- ‘throw’ chỉ ra một ngoại lệ vừa xảy ra, là một đối tượng của

lớp dẫn xuất từ ‘throwable’try{

if(flag < 0){throw new MyException(); // user-defined}

}

Page 23: Gỡ rối – Xử lý lỗi – Ngoại lệ

23

XỬ LÝ NGOẠI LỆ(Exception Handle)

throw & throws(tt)• throws- Áp dụng cho một phương thức để xử lý nhiều

ngoại lệ

Page 24: Gỡ rối – Xử lý lỗi – Ngoại lệ

24

XỬ LÝ NGOẠI LỆ(Exception Handle)

• RuntimeException• ArthmeticException• IIIegalAccessException • IIIegalArgumentException• ArrayIndexOutOfBoundsExcepti

on• NullPointerException• SecurityException

Danh sách một số Exception trong Java:

• ClassNotFoundException• NumberFormatException• AWTException• IOException• FileNotFoundException• EOFException• NoSuchMethodException• InterruptedException

Page 25: Gỡ rối – Xử lý lỗi – Ngoại lệ

25

XỬ LÝ NGOẠI LỆ(Exception Handle)

Tóm tắt• Bất cứ khi nào một lỗi xuất hiện trong khi thi hành chương trình, nghĩa là

một ngoại lễ đã xuất hiện• Ngoại lệ phát sinh vào lúc thực thi chương trình theo trình tự code• Mỗi ngoại lệ phát sinh phải bị bắt giữ, nếu không ứng dụng sẽ bị ngắt• Cho phép kết hợp tất cả tiến trình xử lý lỗi trong một nơi• Các câu lệnh trong khối ‘try’ chặn ngoại lệ, khối ‘catch’ xử lý ngoại lệ• Nhiều khối catch có thể được sử dụng với các kiểu ngoại lệ khác nhau

theo các cách khác nhau• ‘throws’ liệt kê các ngoại lệ mà phương thức có thể chặn được• ‘throw’ chỉ ra 1 ngoại lệ vừa xảy ra• ‘finally’ khai báo các cấu lệnh thu hồi tài nguyên cho hệ hống và xuất câu

thông báo

Page 26: Gỡ rối – Xử lý lỗi – Ngoại lệ

26

RÀO CHẮN

• Xử lý trước khi xảy ra lỗi.VD: if( num != 0) return a/num;

• Xử lý giao diện hợp lý