熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:異常處理與程序調試(一)[2]

2013-11-23 17:50:55  來源: Delphi編程 

  EIntOverFlow異常類在IntegerWordLongint三種整數類型越界時引發

  var

  I : Integer;

  abc : Word;

  begin

  a := ;

  b := ;

  c := ;

  for I := to do

  begin

  c := a*b*c;

  end;

  end;

  引發一個EIntOverFlow異常

  EIntOverFlow異常類只有在編譯選擇框Option|Project|Over_Flow_Check Option選中時才產生當關閉溢出檢查則溢出後變量保留該類整數的最大范圍值

  整數類型的范圍如下表

  表 整數類型的范圍

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

  類型 范圍 格式

  ───────────────────────────

  Shortint   有符號

  Integer   有符號

  Longint   有符號

  Byte   無符號

  Word   無符號

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━

   浮點異常

  浮點異常是在進行實數操作時產生的它們都從一個EMathError類派生但與整數異常相同程序運行中引發的總是它的子類EInvalidOpEZeroDivideEOverFlowEUnderFlow

  表 浮點異常類及其引發原因

  ━━━━━━━━━━━━━━━━━━━━━━━━

  異常類 引發原因

  ────────────────────────

  EInvalidOp 處理器碰到一個未定義的指令

  EZeroDivide 試圖被零除

  EOverFlow 浮點上溢

  EUnderFlow 浮點下溢

  ━━━━━━━━━━━━━━━━━━━━━━━━

  EInvalidOp最常見的引發原因是沒有協處理器的機器遇到一個協處理器指令由於在缺省情況下Delphi總是把浮點運算編譯為協處理器指令因而在以下微機上常常會碰到這個錯誤此時只需要在單元的接口部分設置全局編譯指示{$N}選擇利用運行時間庫進行浮點運算問題就可以解決了

  各種類型的浮點數(RealSingleDoubleExtended)越界引起同樣的溢出異常這同整數異常類是不同的

   類型匹配異常

  類型匹配異常EInvalidCast當試圖用As 操作符把一個對象與另一類對象匹配失敗後引發

   類型轉換異常

  類型轉換異常EConvertError當試圖用轉換函數把數據從一種形式轉換為另一種形式時引發特別是當把一個字符串轉換為數值時引發下面程序中的兩條執行語句都將引發一個EConvertError異常

  var

  rl : Real;

  int: Integer;

  begin

  rl := StrToFloat( $

  int := StrToInt(

  end;

  要注意並不是所有的類型轉換函數都會引發EConvertError異常比如函數Val當它無法完成字符串到數值的轉換時只把錯誤代碼返回利用這一點我們在()節中實現了輸入的類型和范圍檢查

   硬件異常

  硬件異常發生的情況有兩種或者是處理器檢測到一個它不能處理的錯誤或者是程序產生一個中斷試圖中止程序的執行硬件異常不能編譯進動態鏈接庫(DLLs)中而只能在標准的應用中使用

  硬件異常都是EProcessor異常類的子類但運行時間並不會引發一個EProcessor 異常

  表  硬件異常類及其產生原因

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  異常類 引發原因

  ─────────────────────────────────

  Efault 基本異常類是其它異常類的父類

  EGPFault 一般保護錯通常由一個未 初始化的指針或對象引起

  EStackFault 非法訪問處理器的棧段

  EPageFault Windows內存管理器不能正確使用交換文件

  EInvalidOpCode 處理器碰到一個未定義的指令這通常意味著處理器

  試圖去操作非法數據或未初始化的內存

  EBreakPoint 應用程序產生一個斷點中斷

  ESingleStep 應用程序產生一個單步中斷

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  EFaultEGPFault 往往意味著致命的錯誤而EBreakPointESingleStep被Delphi IDE的內置調試器處理事實上前邊的五種硬件異常的響應和處理對開發者來說都是十分棘手的問題

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25192.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.