如题,delphi中是否能捕获到发生异常的出错unit和行数?

解决方案 »

  1.   

    发生异常,它会在下面message信息框中显示,双击提示,即返回到错误代码处~~
      

  2.   

    一直做C#,C#中通过 StackTrace 类很简单的可以做到。初学delphi,在网上找了半天都没有看到完美解决方案,还望大虾们指点。
      

  3.   


    我是指在程序里捕获,然后把错误的详细信息写入log文件。
      

  4.   


    我是指在程序里捕获,然后把错误的详细信息写入log文件。
    并非调试状态。
      

  5.   

    function getTicketBit(vTicketNo:integer):integer;
    begin
      Dec(vTicketNo);
      Assert((vTicketNo >= 0),'票據編號不可小於 0');  Result := round(intpower(2,vTicketNo));
    end;
      

  6.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }  public
        { Public declarations }
      end;
      procedure LogAssert(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
    var
      Form1: TForm1;
      OldAssertErrorProc : TAssertErrorProc;
    implementation{$R *.dfm}procedure  LogAssert(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
    var
      RunErrMsg : String;
    begin
      runErrMsg := format('Error: %s, Addr: %p, in file(%d): %s ',
                          [Message, ErrorAddr, LineNumber, FileName]);
    if IsConsole then
        Writeln(runErrMsg)
    else
        MessageBox(0, pChar(runErrMsg), 'Error Log by AssertLogs', 0);
    end;procedure TForm1.btn1Click(Sender: TObject);
    var
      outputstring:string;
    begin
      Assert(false,outputstring);end;initialization
      oldAssertErrorProc := AssertErrorProc;
      AssertErrorProc := @LogAssert;finalization
      AssertErrorProc := oldAssertErrorProc;end.
      

  7.   

    用Assert的话,只能得到 Assert调用的行数。想实现的是try
    //一些处理
    except
    on e: Exception do
    begin
    //Start 假设用 Assert的话 
    Assert(false, e.Message);   //只能捕获到这一行,并不能真正捕获到出错的行数
    //END 假设用 Assert的话//Start 希望实现的
    Applog.TraceLog(e);  // Applog是一个类,TraceLog是一个把异常信息写入Log的方法。
    //End 希望实现的
    end;
    end;
      

  8.   

    可以用EurekaLog,这个有详细的调用堆栈之类的信息记录,可以直接定位程序代码行
      

  9.   

    EurekaLog 我也查到了,
    还有一个 http://help.madshi.net/madExcept.htm难道只能通过第3方控件或dll吗,delphi中自带的类什么的不能实现?
    Exception中的StackInfo属性看上去能取到些信息,可是调试一看是nil。不理解。