Tài nguyên Thư viện

Thành viên trực tuyến

19 khách và 0 thành viên

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Menu Thư viện

    Gốc > Kiến thức tin học > Lập trình Pascal >

    LỖI TRONG TURBO PASCAL (Phần 2)

    Lỗi 101. Invalid ordering of gields: Trật tự các trường (trong bản ghi) không đúng.

    Lỗi 102. String constant expected: Cần một hằng kiểu xâu.

    Lỗi 103. Integer or real variable expected: Cần biến nguyên hoặc thực (biến số).

    Lỗi 104. Ordinal variable expected: Cần biến (kiểu) thứ tự.

    Lỗi 105. INLINE error: Lỗi khi sử dụng toán tử INLINE ( < ). Toán tử này không được dùng với các con trỏ tới biến. Các con trỏ loại này luôn luôn có kích thước bằng một từ.

    Lỗi 106. Character expressionexpected: Cần biểu thức kiểu ký tự.

    Lỗi 107. Too manyrebocation items: Quá nhiều phần tử động. Kích thước của bảng động cho tệp. EXE vượt quá 64 KB.

    Lỗi 108. Not enough memory to run progam:Không đủ miền nhớ để thực hiện chương trình.

    Lỗi 109. Can not find EXE file: Không tìm thấy tệp EXE.

    Lỗi 110. Can not run a Unit: Không được phép thực hiện một modul. Modul là một thư viện các khai báo (biến, thủ tục, hàm) để ghép với các chương trình sử dụng chúng chứ không dùng để thực hiện độc lập.

    Lỗi 111. Compilation abozted: Huỷ việc dịch (bằng lệnh ^ BREAK).

    Lỗi 112. CASE constant out of range: Hằng của toán tửCASE không nằm trong giới hạn. -32768 dến 32767

    Lỗi 113. Error in statement: Câu lệnh sai. Lỗi không sảy ra khi viết sai kí tự đầu tiên của câu lệnh.

    Lỗi 114. Can not call an interrupt procedure: Không thể gọi thủ tục ngắt.

    Lỗi 115. Must have an 8087 to compile this: Cần có bộ sử lý 8087 để dịch chương trình này nếu có khai báo chế độ dịch { $ N + }.hãy thử dùng tổ hợp { $ N +, E + }.

    Lỗi 116. Must be in8087 mode compile this: Phải dùng chế độ 8087 để dịch chương trình này. Không được sử dụng các kiểu SINGLE, DOUBLE, EXTENDEN, và COMP trong chế độ { $ N - }.

    Lỗi 117. Target address not found: Không tìm thấy địa chỉ đã cho.

    Lỗi 118. Include files are not allwed here: Không được dùng tệp hồng ở đây.

    Lỗi 119. TMP file format error: Lỗi khuân dạng tệp TMP. Tệp có đuôi đúng làTMP nhưng nội dung không đúng dạng đó.

    Lỗi 120. NIL expected: Cần giá trị bằng NIL.

    Lỗi 121. Invalid qualifier: Định dabnh không hợp lệ. Có thể do các nguyên nhân sau: - Viết một biến đơn có kèm chỉ dẫn như biến mảng. - Viết một biến đơn hoặc mảng theo trường như biến bản ghi. - Sử dụng biến không thuộc kiểu con trỏ như một biến con trỏ.

    Lỗi 122. Invalid variable reference: Tham chiếu không hợp lệ tới biến. Bản thân biến được khai báo đúng kiểu con trỏ nhưng nội dung của nó không phải là địa chỉ. Thường gặp trong khi gọi một hàm kiểu một con trỏ nhưng quên dùng ký hiệu ^.

    Lỗi 123. Too many symbols: Có quá nhiều ký hiệu. Chương trình có tổng số ký hiệu lớn hơn 64 KB. Cần chia thành những module nhỏ hơn nếu dịch trong chế độ { $ D + }.

    Lỗi 124. Statement part too large: Phần lệnh toán tử quá lớn. Turbo Pascal dành khoảng 24 KB cho phần toán tử. Nếu phần này quá lớn thì nên cắt chúng thành nhiều thủ tục hoặc hàm. Nói chung một người lập trình tốt thường quan tâm đến tổ chức cấu trúc.

    Lỗi 125. Module has no debug information: Trong module không có thông tin bắt lỗi do đó khi thực hiện chương trình đã dịch mà gặp lỗi Turbo bascal sẽ không chỉ ra được toán tử sinh lỗi. Nên dịch lại chương trình theo chế độ { $ D +} hoặc sử dụng mục COMPILER/FIND ERROR để tìm lỗi.

    Lỗi 126. Files must be var parameters: Tham biến hình thức kiểu tệp trong thủ tục hoặc hàm phải được khai báo theo chế độ truyền theo biến (có tiếp đầu VAR).

    Lỗi 127. Too many conditional symbols: Không đủ miền nhớ để xác định các ký hiệu điều kiện. Thử bỏ bớt một số ký hiệu hoặc giảm chiều dài của chúng.

    Lỗi 128. Misplaced conditional directive: Thiếu các khai báo điều kiện, chanửg hạn trong chương trình có { $ ELSE }hoặc {$ ENDIF} nhưng lại không có { $ IFDEF }, {$IFNDEF } hoặc {WIFOPT }.

    Lỗi 129. ENDIF directive missing: Thiếu khai báo Ơ $ENDIF}.

    Lỗi 130. Error in inital conditonal defines: Định nghĩa điều kiện sai. Các điều kiện ban đầu đặt trong OPTIONS/COMPILER/CONDITIONAL DEFILES không đúng. Nếu viết nhiều điều kiện cần ngăn chúng bằng dấu chấm phảy.

    Lỗi 131. Header does not match previous definitio: Phần đầu không phù hợp với khai báo trước đó. Có thể do các nguyên nhân sau: - Đầu của thủ tục và hàm của phần INTERFACE và phần IMPLEMENTATION không phù hợp với nhau. - Đầu của thủ tục và hàm khai báo trước (bằng từ chỉ thị FORWARD) không phù hợp với phần mô tả.

    Lỗi 132. Criticaldisk error: Lỗi nặng về đĩa, thí dụ ở ổ đĩa chưa đóng hoặc chưa được lắp đĩa.

    Lỗi 133. Can not evaluate this expression: không thể tính được gí trị của biểu thức, thí dụ CONTS C = SIN (2); sẽ sinh lỗi và khi khai báo hằng đã dùng hàm SIN.

    Lỗi 134. Exprsseion incorrectly terminated: Biểu thức kết thúc sai.

    Lỗi 135. Invalid format specifier: Dạng thức đặt tả sai.

    Lỗi 136. Invalid inderect reference: Không sử dụng đúng phương thức truy nhập trực tiếp.

    Lỗi 137. Structured variable arenot allowed here: Không được dùng biến cấu trúc ở đây. Lỗi phát sinh khi lập trình viên thực hiện các phép toán không được phép dùng cho các biến cấu trúc, thí dụ như nhân hai bản ghi.

    Lỗi 138. Can not evaluate withut system unit: Cấm tính toán biểu thức khi chưa gọi module SYSTEM. Muốn làm điều này ta phải đưa module SYSTEM vào tệp TURBO.TPL.

    Lỗi 139. Can not access this symbol: Không truy nhập được tới ký hiệu này.

    Lỗi 140. Invalid floating-point operation: Sử dụng sai thao tác với số thực. Có thể xảy ra hiện tượng tràn ô nhớ (kết quả tính toán vượt quá khả năng biểu diễn của ô nhớ) hoặc phép chia cho số 0.

    Lỗi 141. Can not compile overlay to memory: Không thể dịch overlay trên miền nhớ RAM (mà phải đặt chế độ dịch ra đĩa (Disk)).

    Lỗi 142. Procedure or function variable expected: Cần sử dụng biến dạng thủ tục hoặc hàm. Tham biến hình thức của một thủ tục hoặc hàm có thể là một thủ tục hoặc hàm.

     Lỗi hiện thực (của turbo pascal 5.x) Dạng thông báo Runtime error nnn at xxxx:yyyy Số hiệu lỗi

    Địa chỉ nơi sinh lỗi:

        Các lỗi có số liệu từ 1 .. 199 là lỗi vào ra

        Các lỗi có số liệu từ 200 .. 255 là nỗi nặng. 1.

        Lỗi vào - ra Khi gặp lỗi này nếu các phép toán (toán tử) vào ra được dịch trong chế độ { $I+} thì chương trình bị dừng. Ngược lại nếu đặt chỉ thị {$I-}thì chương trình tiếp tục thực hiện sau khi đã gửi số hiệu lỗi (ta còn gọi là mã lỗi) vào biến IORESUT (đây thực chất là một hàm).

    Có thể phân loại lỗi mịn hơn như sau:

        Mã lỗi 1 .. 199 là của DOS Mã lỗi 100 .. 149 lỗi vào ra
        Mã lỗi 150 .. 199 lỗi nặng Mã lỗi 200 .. 255 lỗi rất nặng Chú ý: ngầm định thì chương trình luôn luôn được dịch trong chế độ {$I+}. Sau mỗi lần thực hiện một toán tử vào - ra nếu IORESULT = 0 chứng tỏ toán tử được thực hiện trọn vẹn, không sinh lỗi, ngược lại nếu IORESLT ¹ 0 chứng tỏ toán tử không được thực hiện trọn vẹn, đã có lỗi.
    Thí dụ sau đây minh hoạ thủ tục bẫy lỗi để biết thực trạng của chương trình.
    Thí dụ 1: nhận một tên tệp đưa vào biến tên tệp sau đó cho biết tệp có tên đã cho có tồn tại trong thư mục hiện có của đĩa hay không. Ta biết lệnh Reset(f) tìm và mở tệp f trên đĩa. Nếu không tìm được tệp với tên đã cho hệ thống sẽ thông báo lỗi và do đó IORESULT sẽ có giá trị (mã lỗi) khác 0. Như vậy, IORESULT = 0 cho biết tệp có tồn tại. Ta có chương trình tìm tệp sau đây: (* Chương trình tìm tệp.Pas *)
    PROGRAM Timtep;
    USES dos, crt;
    VAR Tentep: string; f: File;
    BEGIN
    Write ('cho biết tên tệp cần tìm: '); Readln (tentep);
    Assign (f, tentep);
    {#I-} Reset (f);
    {$I+}
     IF IORESULT <> 0 THEN
        Writeln ('khong thay tep', tentep)
    ELSE
        Writeln (' co tep', ten tep);
        Readln
    END.

    Ta có mẫu chung để bẫy lỗi vào - ra như sau.
        Giả sử ta cần thực hiện một thao tác vào - ra P nào đó.
        Sau các bước chuẩn bị ta viết đoạn chương trình sau:
            {$I-} (* bỏ chế độ bắt lỗi *) P; (* thực hiện thao tác vào - ra*)
        {$I+} (* đặt lại chế độ bắt lỗi *)
        IF IORESULT = 0 THEN (* thao tác P được thực hiện tốt *)
        ...
        ELSE (* có lỗi khi thực hiện P *) ...

    Sau đây là mã lỗi và nghĩa của lỗi:

    Lỗi 1: File not found: Không thấy tệp. Lỗi phát sinh khi sử dụng các thủ tục RESET, APPEND, RENAME hoặc ERASE mà không tìm thấy tệp cần thao tác
    3 Path not found: Không thấy đường dẫn. Lỗi xuất hiện khi: - Các thủ tục RESET, APPEND, RENAME hoặc ERASE không tìm được đường dẫn tới tệp cần thao tác. - Các thủ tục CHDIR, MKDIR, hoặc RMDIR nhận được tham trị sai về thư mục hoặc đường dẫn tới thư mục con cần sử lý.
    4. Too many open files: mở quá nhiều tệp. Xuất hiện khi gọi các thủ tục RESET, REWRITE,hoặc APPEND. Để có thể tăng số lượng tệp cần mở hãy sửa hoặc thêm dòng FILES = xx Trong tệp CONFIG.SYS rồi khởi động lại máy.xx là khối lượng tối đa các tệp cần mở, thí dụ 20.
    5. File access denied: Không được phép truy nhập tệp. Lỗi xuất hiện khi: Các thủ tục RESET và APPEND nhận được tham biến tệp ở chế độ chỉ được đọc trong khi tham biến FILEMODE lại được phép ghi. - Gọi thủ tục REWRITE khi thư mục đã đầy hoặc khi tham biến tệp được khai báo ở chế độ chỉ được đọc.
    - Gọi thủ tục RENAME với tên tệp là tên thư mục hoặc tên tệp mới đã có trong thư mục.
    - Gọi thủ tục ERASE với tên tệp là tên thư mục hoặc tham chiếu tới tệp chỉ được đọc. - Gọi thủ tục MKDIR với tên thư mục đã có hoặc tên thư mục đã đầy.
    - Gọi thủ tục RMDIR với thư mục chưa rỗng hoặc sai đường dẫn.
    - Gọi các thủ tục READ hoặc BLOCKREAD khi chưa mở tệp.
    - Gọi các thủ tục WRITE hoặc BLOCKWRITE khi chưa mở tệp để ghi.
    6. Invalid file handle: Kênh cho tệp chưa thông
    12.Invalid file access code: Mã truy nhập tệp bị sai. Lỗi xuất hiện khi gọi các thủ tục RESET hoặc APPEND với tham biến FILEMODE chứa giá trị không chuẩn.
    15. Invalid drive number: Số hiệu ổ đĩa bị sai. Xuất hiện khi gọi GETDIR.
    16. Can not remove current directory: Không được xoá thư mục hiện hành. Xuất hiện khi gọi RMDIR với thư mục đang mở.
    17. Cannot renameacross drives: Không được đổi tên với hai ổ đĩa khác nhau. Xuất hiện khi gọi RENAME với hai tệp nằm ở hai ổ đĩa khác nhau.
    100. Disk read error: Lỗi đọc đĩa. Xuất hiện khi gọi READ từ tệp định kiểu để đọc khi tệp đã được duyệt hết.
    101. Disk write error: Lỗi viết vào đĩa. Xuất hiện khi gọi close, write, writel hoặc flush với đĩa đầy.
    102. File not assigned: Chưa gán tên cho tệp bằng thủ tục ASSIGN mà đã gọi các thủ tục RESET, REWRITE, APPEND, RENAME hoặc ERASE.
    103. File not open: Tệp chưa mở. Xuất hiện khi gọi close, rean, write, seek, eof, fileposfilesize, flush, blockread, blockwrite với tệp chưa được mở
    104. File not open for input: Tệp chưa được mở để đọc. Xuất hiện khi gọi READ, READLN, EOF, EOLN. SEEKEOF, hoặc SEEKEOLN với tệp văn bản (kiểu text) chưa được mở để đọc.
    105. File not open for output: Tệp chưa được mở để ghi. Xuất hiện khi gọi WRITE hoặc WRITEL với tệp văn bản chưa được mở để ghi
    106. Invalid numeric format: Dạng số sai. Xuất hiện khi gọi READ hoặc READLN một số từ tệp văn bản.
    150. Disk is write protected: Đĩa chống ghi. Lỗ chống ghi ở đĩa bị che kín.
    151. Unknown unit: Module lạ
    152. Drive not ready: ổ đĩa chưa sẵn sàng.
    153. Unknown command: Lệnh lạ.
    154. ARC error in data (Cycle Redundant Code -): Lỗi ở dữ liệu ban đầu.
    155 Bad drive requiest structure legth: Chiều dài cấu trúc đĩa không đúng.
    156. Disk seek error: Đầu - đọc ghi ở chỗ đĩa bị đặt sai
    157. Unkown media type: Kiểu vật mang (tin) không rõ
    158. Sector not found: Không tìm được Sector của đĩa.
    159. Printer out of paper: hết giấy in ở máy in
    160. Device write fault: Lỗi khi dùng thiết bị ghi
    161. Device read fault: lỗi khi dùng thiết bị đọc
    162 Hardware failure: Có sự cố phần cứng.

    2. Các lỗi rất nặng:
    200 Division by zero: chia cho số 0.
    201 Range chek error: Lỗi kiểm tra giới hạn.
    202 Stack overflow error: Ngăn xếp đầy.Khi chương trình thực hiện cần có vùng nhớ để tổ chức biến động và gọi các thủ tục và hàm. Vùng nhớ này được tổ chức theo nguyên tắc ngăn xếp.
    Nếu thiểu chỗ thì sinh lỗi 202. 203 heap overflow error: Chùm đầu. Khi chương trình thực hiện cần cấp phát vùng nhớ động cho các thủ tục new hoặc getmem. Các vùng nhớ này được quản lý theo nguyên tắc chùm (như bộ rễ của một cây).
    Nếu thiếu chỗ sẽ sinh lỗi 203. 204 Invalid pointer operation: Thao tác con trỏ không đúng. Lỗi xuất hiện khi gọi DISPOSE hoặc FREEMEM với giá trị NIL hoặc với địa chỉ nằm ngoài giới hạn dành cho phần bộ nhớ thao tác.
    205. Floating point overflow: Toàn giá trị thực (real)
    206. Floating point underflow: Lệch hãng ở giá trị thực (Real). Lỗi này xuất hiện khi sử dụng các bộ đồng xử lý loại 8087/80287/80387 207 Invalid floatingpoint operation: Thao tác sai với các giá trị thực (Real). Lỗi xuất hiện trong các trường hợp:
        - Tham trị của các hàm TRUNC hoặc ROUND không thể biến đổi được trong phạm vi của kiểu LONGINT (từ -2147483648 đến +2147483647)
        - hàm lấy căn bậc 2 SQRT có tham trị âm
        - Hàm logarit LN chứa tham trị không dương
        - Ngăn xếp của bộ đồng xử lý bị tràn.

    208 Overlay manager not installed: Chưa đặt phần hệ điều khiển Overlay. Thường là thiếu thủ tục OVRINIT (khởi tạo - đặt chế độ Overlay) hoặc thủ tục này không được thực hiện đầy đủ.
    209 Overlay file read error: Lỗi khi đọc tệp overlay.


    Nhắn tin cho tác giả
    Đỗ Trung Thành @ 12:13 13/09/2009
    Số lượt xem: 5319
    Số lượt thích: 0 người
     
    Gửi ý kiến