Kiểm lỗi trên Emulator

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 134)

2 Hướng nghiên cứu và giới hạn đề tài

6.2.1Kiểm lỗi trên Emulator

Công việc kiểm lỗi luôn là một phần không thể thiếu trong một IDE. Các IDE dùng trong phát triển ứng dụng trên Symbian luôn hỗ trợ kiểm lỗi trên Emulator.

KHOA CNTT –

ĐH KHTN

Giống như mọi phần debugger trên các IDE, phần debugger trên các IDE phát triển

ứng dụng Symbian hỗ trợ các chức năng: ngắt chương trình, chạy từng bước, xem giá trị biến hay thực hiện tại vị trí con trỏ, … Sau khi biên dịch với kiểu biên dịch debug cho môi trường IDE (WINSCW hay WINS), ta hoàn toàn có thể thực hiện các chức năng này để bắt các lỗi cú pháp cũng như logic. Muốn bắt đầu debbug ở đâu, chúng ta đặt dấu breakpoint tại đó. Nếu muốn debug từđầu thì đặt tại E32Dll(). Sau đó chọn chức năng debug trên menu.

Một kỹ thuật rất hay sử dụng trong quá trình debug là đưa câu lệnh RDebug::Print() vào chương trình. Các hàm này sẽ in các đoạn văn bản mô tả ra file tạm có tên là epocwind.out trong thư mục Windows Temp. Các định dạng kiểu dữ

liệu dùng trong chuỗi tham số của lệnh Print theo định dạng của C. Ví dụ

TInt error=-10;

_LIT(KMsgDebug,"Error value: %d"); RDebug::Print(KMsgDebug,error);

Một số phím nóng cũng được dùng trong quá trình debug để phục vụ cho việc kiểm tra vùng heap hay các server. Ví dụ:

- Ctrl+Alt+Shift+A: số ô heap đang sử dụng.

- Ctrl+Alt+Shift+B: số tài nguyên file server được cấp. - Ctrl+Alt+Shift+C: số tài nguyên window server được cấp. 6.2.2 Kiểm lỗi trên điện thoại Symbian

Việc kiểm lỗi trên điện thoại Symbian là khá chậm và phức tạp nhất là khi dùng câu lệnh RDebug::Print(). Một việc khá bất tiện khác là khi phát hiện lỗi, sau khi sửa lỗi, ta phải biên dịch, cài đặt trên điện thoại lại rồi mới kiểm lỗi tiếp được.

• Với IDE CodeWarrior Professional Edittion hay OEM Edittion

Để có thể kiểm lỗi trên điện thoại Symbian, phần Debugger trên CodeWarrior IDE giao tiếp với một chương trình tên là Metro TRK (Metrowerks’ Target Resident Kernel) chạy trên điện thoại Symbian thông qua cổng kết nối với

đường liên kết giữa điện thoại và máy tính. Thông qua Metro TRK việc kiểm lỗi trên điện thoại sẽ trở nên khá dễ dàng. Không chỉ hỗ trợ kiểm lỗi các ứng dụng đồ

KHOA CNTT –

ĐH KHTN

họa, với Metro TRK, các chương trình thực thi khác như chương trình .exe hay .dll cũng được kiểm lỗi dễ dàng.

Chương trình Metro TRK có thể tìm thấy trong SDK (với phiên bản SDK dùng hệ điều hành Symbian 7.0.7 trở về sau) hoặc lấy trực tiếp trên mạng tại www.Metrowerks.com/MW/Support/Download/default.htm. Sau khi cài đặt chương trình Metro TRK trên điện thoại Symbian, quá trình debug sẽ được thực hiện theo các bước sau:

- Kết nối điện thoại với máy tính.

- Biên dịch chương trình trên điện thoại với kiểu biên dịch debug và loại biên dịch ARMI (sẽ nói trong phần biên dịch).

- Thực thi Metro TRK trên điện thoại.

- Cấu hình kết nối từ xa cho IDE CodeWarrior: Edit->Preference. Sau đó chọn Remote Connections và giá trị cho nó là Symbian MetroTRK.

- Bắt đầu kiểm lỗi chương trình trên IDE CodeWarrior như kiểu debug cho Emulator.

• Với chương trình GDB:

GNU debugger (GDB) là chương trình độc lập chạy trên máy tính sẽ giúp kiểm lỗi trên điện thoại Symbian kết nối với máy tính. Giống như với kiểm lỗi bằng IDE CodeWarrior cần Metro TRK, GDB cũng cần một chương trình nhỏ chạy trên

điện thoại Symbian để giao tiếp với GDB, chương trình GDB stub (gdbstub.exe). Những đặc tính của chương trình GDB:

- GDB có giao diện đồ họa và dòng lệnh: thường giao tiếp bằng dòng lệnh

được sử dụng do hỗ trợđầy đủ hơn giao diện đồ họa.

- GDB có thể kiểm lỗi cho ứng dụng đồ họa và chương trình .exe. - Hỗ trợ hầu hết các tính năng kiểm lỗi. (adsbygoogle = window.adsbygoogle || []).push({});

- Kiểm lỗi cho các chương trình ARMI, ARM4 và THUMB. - Hỗ trợ chuỗi Unicode.

- GDB và GDB stub có thể giao tiếp qua cổng giao tiếp tuần tự, hay hồng ngoại, bluetooth cũng có thể.

KHOA CNTT –

ĐH KHTN

- Cho phép chuyển file từ máy tính lên điện thoại. - GDB stub có thể cấu hình từ 1 file hoặc từ dòng lệnh.

- Kết quả xuất kiểm lỗi có thể trực tiếp ra file hay trong môi trường text console.

- GDB không hỗ trợ kiểm lỗi các chương trình đa tiểu trình, các chương trình ở cấp nhân kernel và không thể gắn GDB với một tiến trình đang chạy.

Quá trình kiểm lỗi với GDB:

- Biên dịch chương trình với dòng SRCDBG trong file .mmp với loại biên dịch ARMI (để có thể sử dụng trên các nền khác).

- Kết nối điện thoại và máy tính.

- Cài đặt chương trình ứng dụng lên điện thoại. - Thực thi GDB stub trên điện thoại.

- Thực thi GDB và bắt đầu kiểm lỗi.

- Để đóng phần kiểm lỗi, trên GDB, từ dòng lệnh gõ : q và trên GDB stub gõ qq (q 2 lần).

Một số câu lệnh thông dụng dùng trên GDB:

- break breakpoint hay b breakpoint: đặt một điểm ngắt tại breakpoint với breakpoint có thể là số dòng hay tên hàm. ví dụ: break Meadebug.cpp:110 hay b CMeadebugAppUi::HandleCommandL.

- clear linenumber/function: xóa breakpoint với số dòng hay tên hàm. - stepi hay si: chạy từng bước.

- nexti hay ni: bước tiếp theo.

- continue hay c: thực hiện tiếp cho đến khi gặp breakpoint tiếp theo. - print variablename hay p variablename: in tên biến và giá trị. - quit hay q: thoát khỏi GDB.

KHOA CNTT –

ĐH KHTN

6.2.3 Một số mã lỗi thông dụng trong Symbian

Phần này giới thiệu các mã lỗi thông dụng trong Symbian. Nó không chỉ được sử dụng để phát hiện lỗi trongdebug mã còn được sử dụng trong lập trình để kiểm soát lỗi.

KErrNone : 0 Không có lỗi.

KErrNotFound: -1 Không thể tìm thấy đối tượng cần KErrGeneral: -2 Lỗi chung

KErrCancel: -3 Thao tác bị từ chối KerrNoMemory: -4 Không đủ bộ nhớ

KErrNotSupported: -5 Thao tác yêu cầu không được hỗ trợ

KErrArgument: -6 Yêu cầu lỗi KErrTotalLossOfPrecision: -7 KErrBadHandle: -8 Đối tượng lỗi KErrOverflow: -9 Tràn KErrUnderflow: -10 KErrAlreadyExists: -11 Đã tồn tại KErrPathNotFound: -12 Không tìm thấy thư mục cần KErrDied: -13 Đối tượng đã đóng

KErrInUse: -14 Đối tượng đang được sử dụng KErrServerTerminated: -15 Server đã đóng

KErrServerBusy: -16 Server bận

KErrCompletion: -17 Lỗi khi hoàn tất thao tác KErrNotReady: -18 Đối tượng chưa sẵn sàng KErrUnknown:-19 Lỗi chung, không rõ KErrCorrupt: -20 (adsbygoogle = window.adsbygoogle || []).push({});

KErrAccessDenied: -21 Truy cập bị từ chối KErrLocked: -22 Đối tượng bị khóa KErrWrite: -23 Lỗi ghi

KHOA CNTT –

ĐH KHTN

KErrEof : -25 Lỗi kết thúc file KErrDiskFull: -26 Đĩa đầy

KErrBadDriver: -27 Lỗi trình điều khiển thiết bị

KErrBadName: -28 Tên sai

KErrCommsLineFail: -29 Đường truyền thông lỗi KErrCommsFrame: -30 Khung truyền thông lỗi KErrCommsOverrun: -31 Lỗi tràn đường truyền thông

KErrCommsParity: -32 Lỗi kiểm chẵn/lẽ trong truyền thông KErrTimedOut: -33 Timed out

KErrCouldNotConnect: -34 Lỗi kết nối

KErrCouldNotDisconnect: -35 Lỗi khi ngắt kết nối KErrDisconnected: -36 Đối tượng đã ngắt kết nối KErrBadLibraryEntryPoint: -37 Điểm vào thư viện sai KErrBadDescriptor: -38 Descriptor lỗi

KErrAbort: -39 Đã ngắt KErrTooBig: -40 Quá lớn KErrDivideByZero: -41 Chia cho 0 KErrBadPower: -42 Pin còn quá ít KErrDirFull: -43 Đầy thư mục

KErrHardwareNotAvailable: -44 Phần cứng chưa sẵn sàng

6.3 Biên dịch chương trình

Trên môi trường hệ điều hành máy tính, sau khi kiểm lỗi xong, việc biên dịch chương trình sẽ trở nên rất đơn giản với chỉ một câu lệnh hay một thao tác trên IDE. Nhưng trên hệ điều hành Symbian, việc biên dịch không hềđơn giản bởi có nhiều loại đích biên dịch khác nhau sau những quy ước xây dựng các file dự án .mmp và bld.inf, nhất là biên dịch cho các ứng dụng đồ họa bởi tài nguyên và chương trình

KHOA CNTT –

ĐH KHTN

riêng. Trước khi thực hiện biên dịch, chúng ta hãy xem xét các loại biên dịch khác nhau cho Emulator và cho điện thoại Symbian.

6.3.1 Loại biên dịch

Trong phần này chỉ nói về các đặc điểm riêng của các loại biên dịch, còn cách thức biên dịch sẽ được nói rõ trong phần biên dịch bằng các công cụ và biên dịch với các IDE.

• Biên dịch cho Emulator

Ngoài ứng dụng đồ họa và chương trình console, các loại chương trình khác như .exe, server hay .dll, biên dịch cho Emulator đều được hỗ trợ, được lưu trữ trên cùng vị trí như ứng dụng đồ họa nhưng chúng không thể thực thi trên Emulator. Thông thường 2 từ khóa WINSCW và WINS được sử dụng trong biên dịch ứng với 2 loại Emulator hỗ trợ cho 2 môi trường phát triển là CodeWarrior và VC++ 6.0. WINS cũng được dùng trong biên dịch với IDE C++ Builder 6.0/C++ BuilderX.

• Biên dịch cho WINC

Đây là một loại biên dịch đặc biệt, cho phép các phần engine ứng dụng chạy trên hệ điều hành Symbian có thể truy cập tài liệu ứng dụng từ các chương trình ứng dụng chạy trên máy tính. Kết quả biên dịch của WINC được lưu trữ trong epoc32\release\winc\variant. WINC là từ khóa được dùng trong biên dịch cho WINC.

• Biên dịch cho điện thoại Symbian

Điện thoại Symbian sử dụng bộ xử lý ARM nhưng bộ chỉ thị của ARM không được đặc tả duy nhất. Do đó định dạng nhị phân ra đời với tên gọi là Application Binary Interface (ABI), nó sẽđịnh nghĩa luật chung để gọi các hàm và những phần khác trong file nhị phân. Bộ xử lý ARM7 và ARM9 (dùng trên điện thoại Symbian) hỗ trợ loại định dạng nhị phân là ARM4, ARMI và THUMB.

- ARM4: biên dịch cho tập chỉ thị ARMv4 32 bit phục vụ cho xử lý nhanh. - THUMB: biên dịch cho chếđộ THUMB (16bit) , là tập con của tập chỉ thị

KHOA CNTT –

ĐH KHTN

- ARMI: biên dịch cho chế độ ARM, là tập con của tập chỉ thị ARMv4T, dùng BX.

Với BX: tập chỉ thị chuyển từ chế độ ARM sang chế độ THUMB. Khái niệm "dùng BX" ở trên để chỉ các ABI ARMI và THUMB được biên dịch có khả (adsbygoogle = window.adsbygoogle || []).push({});

năng tương tác với mã trong các chế độ khác trong tập chỉ thị ARMv4T, và chúng sẽđược tựđộng chuyển đúng chếđộ khi gọi một hàm hoặc trả về từ một hàm.

Mã hệ điều hành được biên dịch với nhiều loại ABI khác nhau. Chương trình được biên dịch với ABI là ARMI có thể làm việc với các mã ABI còn lại nên

đây là kiểu biên dịch thường dùng, nhất là đối với lập trình viên tự do. 6.3.2 Biên dịch ứng dụng đồ họa

Khác với biên dịch một chương trình .exe hay một thư viện tĩnh .dll, sau những khai báo chính xác ở file .mmp và file bld.inf thì việc biên dịch trở nên dễ

dàng, biên dịch một ứng dụng đồ họa rất phức tạp với việc tài nguyên và chương trình được biên dịch riêng và nhiều công cụ biên dịch. Trước khi vào phần biên dịch một chương trình ứng dụng, chúng ta hãy tìm hiểu một loại file quan trọng phục vụ

cho quá trình biên dịch và xây dựng ứng dụng là file thông tin ứng dụng (.aif). 6.3.2.1 File AIF

File thông tin ứng dụng (Application information file-AIF) có cùng tên với file thực thi .app, lưu trữ cùng thư mục nhưng có phần mở rộng là .aif . Nó chứa thông tin vềứng dụng bao gồm:

• Biểu tượng (icon) ứng dụng: Các biểu tượng này đại diện cho chính ứng dụng cũng như đại diện cho các file/tài liệu của ứng dụng khi chúng được nhúng vào ứng dụng khác hay trên shell. File aif cho phép có thể lưu trữ nhiều icon với kích thước khác nhau. Điều này giúp cho đảm bảo chất lượng icon khi ứng dụng

được thể hiện dưới các dạng và trên các giao diện khác nhau. Mỗi icon cần một hình bitmap chính và một hình làm mặt nạ (mask bitmap). Hình mặt nạ này có màu

đen ở các vùng có hình và màu trắng trong suốt tại vùng thuộc khung hình nhưng không chứa hình.

KHOA CNTT –

ĐH KHTN

Ví dụ: // icons

num_icons=2;

• Tên ứng dụng (caption): Đây là tên đại diện cho ứng dụng, nằm dưới biểu tượng, thường chính là tên dự án ứng dụng. Khai báo này để hỗ trợ cho các ứng dụng nhiều ngôn ngữ. Mặc định, khi không có khai báo này trong file .aif thì tên file của file .aif này (không bao gồm phần mở rộng) sẽ được lấy làm tên ứng dụng. Ví dụ:

// captions caption_list= {

CAPTION { code=ELangEnglish; caption="Hello"; }, CAPTION { code=ELangFrench; caption="Bonjour"; } };

• Thuộc tính (property/capability): Khai báo các thuộc tính mà ứng dụng có thể hỗ trợ như:

- embeddability: khai báo file/tài liệu của ứng dụng có thể nhúng trong

ứng dụng khác hay không với 3 giá trị:

+ embeddable: xuất hiện trong danh sách file có thể nhúng (embeddable list) và trên shell.

+ not embeddable: không thể nhúng.

+ EmbeddableOnly: chỉ xuất hiện trong danh sách nhúng. Giá trị mặc định là không thể nhúng (not embeddable).

- hidden: có 2 giá trị: Hidden và Not Hidden. Khi giá trị Hidden được chọn, ứng dụng sẽ chạy nền, không hiện trên shell và trong danh sách có thể nhúng. Mặc định là Not Hidden.

- new-file: có 2 giá trị là Does Not Support New File và Supports New File. Thuộc tính này quy định có cho phép tạo file mới từứng dụng hay không. Giá

KHOA CNTT –

ĐH KHTN

trị mặc định là không. Trong C++, chức năng này được thể hiện ở lớp TApaAppCapability.

Lập trình C++ hỗ trợ tất cả các thuộc tính này trong khi Java thì không hỗ trợ thuộc tính nào cả. OPL không hỗ trợ nhúng.

// capabilities (adsbygoogle = window.adsbygoogle || []).push({});

embeddability= KAppEmbeddable; hidden=KAppNotHidden;

newfile= KAppSupportsNewFile;

• MIME (Multipurpose Internet Mail Extensions): khai báo định dạng file

để truyền những dữ liệu không phải là ký tự như hình ảnh, âm thanh, fax qua Internet. Có rất nhiều kiểu định dạng cho MIME và mỗi loại có độ ưu tiên khác nhau. Khi một file được mở, hệ điều hành Symbian sẽ nạp ứng dụng có độ ưu tiên cao nhất hỗ trợ loại file này. Java không hỗ trợđặc tính này.

// MIME types datatype_list= {

DATATYPE { priority=EDataTypePriorityNormal; type="text/html"; }, DATATYPE { priority=EDataTypePriorityLow; type="text/plain"; } };

Ngoài ra, đầu file còn chứa UID, định danh ứng dụng. Đây là nội dung một file .aif mẫu: #include <aiftool.rh> RESOURCE AIF_DATA { // uid app_uid=0x10004299; // captions caption_list=

KHOA CNTT –

ĐH KHTN

{

CAPTION { code=ELangEnglish; caption="Hello"; }, CAPTION { code=ELangFrench; caption="Bonjour"; } }; // icons num_icons=2; // capabilities embeddability= KAppEmbeddable; hidden=KAppNotHidden; newfile= KAppSupportsNewFile; // MIME types datatype_list= {

DATATYPE { priority=EDataTypePriorityNormal; type="text/html"; }, DATATYPE { priority=EDataTypePriorityLow; type="text/plain"; } };

}

File .aif này được tạo ra bằng công cụ abld, aiftool hay dùng AIF Builder. 6.3.2.2 Biên dịch với các công cụ biên dịch

Không dễ dàng như biên dịch với các IDE nhưng biên dịch từ dòng lệnh đôi khi cũng cần thiết để hiểu rõ quá trình biên dịch.

• Các công cụ biên dịch: Do Symbian hỗ trợ:

- bldmake: Công cụ này xử lý file mô tả thành phần dự án (bld.inf) và tạo ra một file bó abld.bat đảm nhận phần biên dịch còn lại. Đồng thời nó cũng phát sinh một số file biên dịch .make khác.

- abld: Đây là công cụ biên dịch chính. Nó đảm nhận biên dịch thành file thực thi cho chương trình với việc sử dụng các file .make.

KHOA CNTT –

ĐH KHTN

- makmake: Công cụ này được dùng để biên dịch các makefile để dùng cho các môi trường phát triển dự án khác nhau. makmake sử dụng file .mmp để tạo ra makefile cho một môi trường phát triển ứng dụng cụ thể: .winscw ứng với WINSCW (CodeWarrior), .wins ứng với WINS (VC++ 6.0), .winc ứng với WINC hay .armi ứng với loại biên dịch ARMI (loại biên dịch cho ứng dụng trên điện thoại Symbian). Biên dịch tài nguyên nên thực hiện trước khi makmake được thực hiện.

- petran: Công cụ sử dụng định dạng file ARM PE cho điện thoại Symbian. Với công cụ này các DLL sẽ có kích thước nhỏ hơn.

- rcomp: Công cụ này biên dịch file tài nguyên nguồn (.rss) thành file tài nguyên đích (.rsc) và (.rsg). Ngoài ra, biên dịch tài nguyên có thể được thực hiện với công cụ abld.

Một phần của tài liệu TÌM HIỂU và NGHIÊN cứu kỹ THUẬTPHÁT TRIỂN ỨNG DỤNG TRÊN MÔITRƯỜNG SYMBIAN OS (Trang 134)