Gỡ rối và bẫy lỗi trong VBAIDE

Một phần của tài liệu Tự động hóa thiết kế cầu đường lê quỳnh mai (Trang 95 - 99)

Kiu 2: Lp cho n khi iu kin là FALSE

14. Gỡ rối và bẫy lỗi trong VBAIDE

Trong quá trình xây dựng một dự án phần mềm, việc gặp các lỗi là không thể tránh khỏi. Vì vậy, việc tìm và xử lý lỗi là điều tất yếu. Trình tự của công việc này như sau:

1. Tìm và phân loại lỗi.

2. Tìm kiếm vị trí mã lệnh phát sinh lỗi.

3. Sửa lỗi.

4. Ngăn chặn lỗi có thể xảy ra trong tương lai (bẫy lỗi).

14.1. Phân loại lỗi trong lập trình Các lỗi có thể được phân loại như sau:

Lỗi cú pháp (Syntax Error): là các lỗi phát sinh do viết mã lệnh sai quy tắc. Ví dụ: đặt tên biến trùng từ khoá, viết sai từ khoá,… Tuy nhiên trong VBA IDE, các lỗi cú pháp được hạn chế rất nhiều nhờ các tính năng phát sinh mã lệnh tự động, gợi ý mã lệnh hoặc tự động kiểm tra cú pháp của mã lệnh. Một chương trình chỉ chạy khi không còn lỗi cú pháp.

Lỗi khi chạy chương trình (Runtime Error): là các lỗi phát sinh trong khi chương trình đang chạy. Đây là một loại lỗi mà nguyên nhân gây lỗi rất đa dạng cho nên việc phát hiện và sửa chữa lỗi loại này khá khó khăn. Ví dụ như lỗi do tràn bộ nhớ, các tài nguyên mà chương trình cần sử dụng không có trong hệ thống,… Các lỗi thực thi thường dẫn tới sự chấm dứt hoạt động của chương trình, thậm chí của toàn bộ hệ thống.

Lỗi do giải thuật: là các lỗi xảy ra do thuật toán hoặc do việc cài đặt và sử dụng các thuật toán chưa đúng. Các lỗi giải thuật thường dẫn tới kết quả xử lý của chương trình bị sai,

Tập tin Kết quả

http://www.ebook.edu.vn

thực thi. VBA IDE không thể phát hiện được các lỗi loại này mà phải do người lập trình hoặc người sử dụng chương trình mới tìm ra được. Vì vậy, đây là loại lỗi khó phát hiện và khắc phục nhất.

14.2. Gỡ rối trong lập trình

Các lỗi cú pháp có thể được khắc phục khá dễ dàng do người lập trình được thông báo của trình biên dịch ngay trong quá trình viết mã lệnh (tham khảo thêm mục “Các trợ giúp về cú pháp trong quá trình viết mã lệnh” trang 23 và “Tính năng gợi nhớ và tự hoàn thiện mã lệnh” trang 24). Ngoài ra, cũng có một số lỗi về cú pháp mà VBA IDE không thể phát hiện ngay lúc viết mã lệnh được, với những trường hợp này, thông thường ngay trước khi chương trình được thực thi, VBA IDE sẽ báo lỗi với người dùng.

Do các lỗi cú pháp rất dễ dàng được phát hiện nên phần này sẽ tập trung vào các tính năng dùng để phát hiện lỗi thực thi và lỗi giải thuật.

14.2.1. Phát hiện lỗi lúc thực thi

Đối với các lỗi phát sinh lúc thực thi chương trình, VBA IDE sẽ tự động dừng chương trình và hiển thị thông báo lỗi, sau đó cho phép người dùng lựa chọn kết thúc chương trình hoặc tiếp tục gỡ rối chương trình.

Để hiểu rõ hơn tính năng này, nhập đoạn mã lệnh sau vào mô-đun chuNn của VBA IDE Sub VDLoiThucThi()

Dim i As Integer

i = InputBox("Nhap so nguyen: ", "VD loi thuc thi") MsgBox i

End Sub

Đoạn mã lệnh trên sẽ hiển thị hộp thoạiInputBoxđể người dùng nhập một số nguyên, sau đó hiển thị kết quả vừa được nhập vào thông qua hàmMsgBox.

Thực thi chương trình con này, sau đó trong hộp thoại vừa hiển thị, nhập vào một chuỗi ký tự là số nguyên, ví dụ là 123, sau đó nhấn OK một hộp thoại khác sẽ hiển thị kết quả vừa nhập.

Tiếp tục thực thi chương trình một lần nữa, lần này nhập một chuỗi ký tự không phải là số nguyên, ví dụ là “ABC”, sau đó chọn OK. VBA IDE sẽ hiển thị thông báo lỗi như sau:

Hình II-37: Thông báo lỗi phát sinh lúc thực thi chương trình.

Trong cửa sổ thông báo lỗi có hiển thị Mã lỗi và Mô tả lỗi để người dùng có thể tra cứu, khắc phục lỗi. Trong ví dụ này, đó là lỗi số 13, lỗi “Type missmatch – Không phù hợp kiểu dữ liệu”.

Nếu người dùng chọn nút lệnhEndchương trình sẽ kết thúc thực thi.

Nếu người dùng chọn nút lệnhDebug, chương trình sẽ dừng lại ngay tại dòng lệnh đã làm phát sinh lỗi trên. VBA IDE sẽ hiển thị cửa sổ mã lệnh và đánh dấu dòng lệnh nơi phát sinh ra lỗi thực thi.

Hình II-38: VBA IDE đánh dấu dòng lệnh làm phát sinh lỗi thực thi.

Nhờ có điều này mà người lập trình có thể rõ được nguyên nhân phát sinh lỗi và nơi làm phát sinh lỗi thực thi, để từ đó có được hướng khắc phục hợp lý.

14.2.2. Các phương pháp thực thi mã lệnh

Trong các trình biên dịch hiện đại nói chung và VBAIDE nói riêng, người dùng được hỗ trợ rất nhiều thông qua các tính năng gỡ rối như biên dịch theo từng bước, theo các điểm dừng, hiển thị các kết quả trung gian. Tuỳ thuộc vào mục đích mà người lập trình có thể sử dụng một phương pháp phù hợp hoặc có thể sử dụng phối hợp giữa các phương pháp. Các phương pháp thực thi mã lệnh có thể được truy cập thông qua trình đơn Debug của VBAIDE:

Chy t-ng bc (Step Into) Nút lệnh: . Phím tắt:F8.

Chương trình được dịch theo từng dòng lệnh. Mỗi khi người lập trình nhấn F8 thì chương trình sẽ thực thi một dòng lệnh, cứ như thế cho đến khi kết thúc chương trình.

Nếu tại một dòng lệnh có lời gọi đến chương trình con khác thì khi tiếp tục thực hiện với Step Into, con trỏ biên dịch sẽ được nhảy đến dòng đầu tiên của chương trình con được gọi.

Chy t-ng bc vi kh!i lnh (Step Over) Nút lệnh: . Phím tắt:SHIFT+F8.

Phương pháp này tương tự như chạy từng bước (Step Into) nhưng việc thực thi một chương trình con được coi như thực thi một dòng lệnh. Vì vậy nếu trong chương trình hiện tại có một lời gọi chương trình con thì chương trình con sẽ được thực thi như một lệnh và do đó con trỏ biên dịch sau đó sẽ nhảy tới dòng lệnh tiếp theo của chương trình con hiện tại.

Chy ra ngoài chng trình con (Step Out) Nút lệnh: . Phím tắt:CTRL+SHIFT+F8.

Nếu con trỏ biên dịch đang ở trong một chương trình con, thì lệnh biên dịch Step Out sẽ dịch toàn bộ các lệnh còn lại trong chương trình con đó và đưa con trỏ lệnh tới vị trí tiếp sau vị trí có lời gọi chương trình con.

http://www.ebook.edu.vn

Chy ti v< trí con tr= chu#t (Run to Cursor) Nút lệnh: . Phím tắt:CTRL+F8.

Chạy từ vị trí con trỏ biên dịch hiện tại tới vị trí có con trỏ soạn thảo. Phương pháp này thường được dùng khi người lập trình muốn thực thi qua toàn bộ những khối lệnh lặp đến dòng lệnh mà mình cần quan tâm.

To im d-ng (Break point) khi chy chng trình Nút lệnh: . Phím tắt:F9.

Với phương pháp này, khi người lập trình thực thi chương trình, trình biên dịch sẽ dừng lại tại các vị trí dòng lệnh tương ứng đã được đánh dấu trước. Để tạo điểm dừng cho một dòng lệnh, đưa con trỏ soạn thảo chọn dòng lệnh tương ứng và nhấn phímF9.

Nếu muốn xoá điểm dừng cho một dòng lệnh, đưa con trỏ soạn thảo đến dòng lệnh đó có điểm dừng và nhấn phím F9. Nếu muốn xoá hết tất cả các điểm dừng đã tạo, nhấn phím tắt CTRL+SHIFT+F9.

14.2.3. Cửa sổ trợ giúp gỡ rối

Ngoài việc gỡ rối sử dụng các phương pháp thực thi chương trình, VBAIDE còn hỗ trợ người lập trình các công cụ dùng để thử nghiệm các dòng lệnh và kiểm soát các biến trong chương trình. Đây là công cụ rất hữu ích giúp người lập trình có thể theo dõi và từ đó phát hiện ra lỗi trong chương trình, nhất là các lỗi phát sinh do giải thuật.

C>a s' trung gian (Immediate Window).

Để hiển thị cửa số trung gian, trong VBAIDE chọn trình đơn View Immediate window, hoặc sử dụng phím tắtCTRL+G:

Hình II-39: Cửa sổ trung gian.

Với cửa sổ trung gian, người dùng có thể:

Gõ một dòng lệnh vào và nhấn ENTER để thực thi dòng lệnh đó trực tiếp từ cửa số trung gian.

Điểm dừng (Break point)

Vị trí con trỏ biên dịch hiện tại

Hiển thị giá trị của biểu thức lên cửa sổ trong quá rình gỡ rối. Để hiển thị giá trị của biểu thức, trong cửa sổ trung gian gõ “?Biểu_Thức” rồi nhấn phím ENTER.

Người lập trình có thể in giá trị của biểu thức ra cửa sổ trung gian từ mã lệnh chương trình sử dụng cú pháp:

Debug. Print <danh_sách_các_biểu_thức>

Thay đổi giá trị của một biến trong khi chạy chương trình từ cửa sổ trung gian. Chẳng hạn như trong chương trình đang thực thi có biến a, người lập trình có thể thay đổi giá trị của biến a thành 5 bằng cách gõa=5trong cửa sổ trung gian và nhấn phím ENTER.

C>a s' theo dõi (Watch Window).

Để hiển thị cửa sổ theo dõi, trong VBA IDE chọn trình đơnViewWatch Window.

Hình II-40: Cửa sổ theo dõi.

Cửa sổ này thường được sử dụng để theo dõi sự biến đổi của các biến hoặc các biểu thức trong quá trình mã lệnh được thực thi. Ngoài ra, trong cửa sổ theo dõi, người lập trình có thể thay đổi giá trị cho biến trong lúc đang thực thi chương trình. Cần lưu ý là giá trị của biến/biểu thức cần theo dõi chỉ được hiển thị khi trình biên dịch đang thực thi một dòng lệnh nằm trong phạm vi hiệu lực của biến/biểu thức đó. Ví dụ như biếnatrong chương trình conVD1chỉ hiển thị giá trị trong cửa sổ theo dõi khi trình biên dịch đang thực thi một dòng lệnh nằm trong chương trình conVD1đó.

Để thêm một biểu thức vào trong danh sách các biểu thức đang được theo dõi của cửa sổ Watch, thực hiện theo các bước sau:

Một phần của tài liệu Tự động hóa thiết kế cầu đường lê quỳnh mai (Trang 95 - 99)

Tải bản đầy đủ (PDF)

(434 trang)