当前位置:编程学习 > Delphi >>

delphi获取程序异常信息

delphi 有没有像java throws 在类开始的地方的加入throws后就可以在程序出错的时候看见出错的地方,而不用对具体的地方做异常处理。 因为现在在做一个项目,软件运行的时候有时候会出错,但找了很久,在很多容易出错的地方都加了异常处理,但还是会出错,而又始终找不到。 所以希望找一个类似java这样的全局异常处理。用来查找到出错误的地方
补充:不是这样的,不是在具体的地方加try,而是只在某一处加异常处理,然后获取整个程序出错的地方。
主要是需要将程序里面的不易发现的错误屏蔽掉不要弹出错误对话框。默认为空处理,即使出错也不弹出错误对话框。
追问:
Undeclared identifier: 'MainFormOnTaskBar' 这是怎么回事
procedure TForm1.btn1Click(Sender: TObject);
var bf:Double;
begin
bf:=StrToFloat(edt1.Text);
edt2.Text:=FloatToStr(bf);
end;
在工程文件加了后还是不行的。不运行到except里面。
用 Raise 抛出一个异常!就可以使程序直接进入 Except 语句里。
还要在单击事件里面加入try吗?能够只在工程文件里面加,不在其他地方加吗?
Raise单独使用即可,任何可能出错的地方都可以抛出异常。
delphi7 里面没有'MainFormOnTaskBar' ,raise EMyException.Create('Your custom error message! For example : Timeout!');  //抛出自定义异常
在单击事件后加入
raise Exception.Create('error');也还是不行。
经查阅相关资料,找到了解决办法:

1.添加ApplicationEvents控件。

2.编写ApplicationEvents控件的事件 OnException :

procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
  //在此编写你的通用错误处理代码
  Application.MessageBox(PChar('我的自定义错误:' + E.Message), 'error', 16);
end;

提示: 工程文件中的 try。。。都可以去掉了。
答案:======================补充回答===============

如果是要求获取整个程序出错的地方,那么需要在工程文件里写异常处理代码:

program Project1;

uses
  Forms, SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  try
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  except
    on e: Exception do
    Begin
      Application.MessageBox(PChar(E.Message), 'error', 16);
    End;
  end;
end.

=====================================

可以啊,delphi里的异常处理功能很不错,以下是一段示例:

procedure TForm1.Button1Click(Sender: TObject);
var ii:integer;
begin
UsedTime:=0;
Timer1.Enabled :=True;
Try
//以下为你自己的处理过程。中间加入对UsedTime的判断。如果大于你预定的时间,则抛出异常
for ii:=1 to 100000000 do
begin
application.ProcessMessages;
if UsedTime>=2 then
raise EMyException.Create('Your custom error message! For example : Timeout!');  //抛出自定义异常
end;

except
//在此可以用      on E: Exception do begin...end;  来捕获错误信息
Showmessage('TimeOut!');
Timer1.Enabled :=False;
end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
UsedTime:=UsedTime+1;
end;

end.

//这里面的关键是,在满足你设定的时间条件后,要用 Raise 抛出一个异常!就可以使程序直接进入 Except 语句里。
其他:try
    //你的代码
  except on e: Exception do
    Begin
      Application.MessageBox(PChar(E.Message), 'error', 16);
    End;
  end;

上一个:Delphi实现以太网通信必须分开写客户端和服务器端程序吗?
下一个:Borland Delphi 2.0[Overlay] 如何处理附加数据 ? 有个程序,需要注册码。 应该如何处理?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,