Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 现在EurekaLog 7中不推荐使用TEurekaExceptionRecord,是什么替代了LogText?_Delphi_Delphi 7_Delphi Xe4_Eurekalog - Fatal编程技术网

Delphi 现在EurekaLog 7中不推荐使用TEurekaExceptionRecord,是什么替代了LogText?

Delphi 现在EurekaLog 7中不推荐使用TEurekaExceptionRecord,是什么替代了LogText?,delphi,delphi-7,delphi-xe4,eurekalog,Delphi,Delphi 7,Delphi Xe4,Eurekalog,从EurekaLog 6迁移到7时,我注意到编译器警告说,TEurekaExceptionRecord已被弃用,我应该使用TEurekaExceptionInfo 在我的带有EurekaLog 6的Delphi 7应用程序中,有这样一个语句: exceptionRecord : TEurekaExceptionRecord; myString := exceptionRecord.logText; 现在,当我在Delphi XE4和EurekaLog 7中使用TEurekaException

从EurekaLog 6迁移到7时,我注意到编译器警告说,
TEurekaExceptionRecord
已被弃用,我应该使用
TEurekaExceptionInfo

在我的带有EurekaLog 6的Delphi 7应用程序中,有这样一个语句:

exceptionRecord : TEurekaExceptionRecord; 
myString := exceptionRecord.logText;
现在,当我在Delphi XE4和EurekaLog 7中使用
TEurekaExceptionInfo
而不是
TEurekaExceptionRecord
时,如下所示:

exceptionInfo : TEurekaExceptionInfo;
myString := exceptionInfo.logText;

第二行出现错误,因为
logText
现在不存在。在EurekaLog 7中,哪种方法取代了它?

我是EurekaLog支持人员。v6和v7之间有很大的差异。您的问题很难回答,因为虽然您在v6中使用的全局变量仍保留在v7中,但您可能无法在v7中以相同的方式修改或检查它们。成功与否取决于您何时读取或修改变量。有几个事件处理程序,每个处理程序在EL类中读取/写入不同的字段。它们是按顺序调用的,所以这就是我提到的计时问题。日志文本现在在我们的对话框类中创建,但是有一些方法可以从中提取原始日志文本

我建议您在我们的网站上打开一个问题单,并发布一些代码来演示您正在尝试做什么。您还可以查看我们的代码片段库,了解日志管理的想法

  • 如果您希望获取一般异常信息(类、消息、地址等)-请参阅
  • 如果要获取异常的调用堆栈,请参阅
  • 如果您希望将报告文件保存到数据库或网络共享(带有屏幕截图、附加文件、网页、转储文件等)-请参阅
  • 如果要对错误报告文件进行操作,请参阅
  • 通常,您不需要访问错误报告:

    EurekaLog 7.7.8.2
    
    Application:
    -------------------------------------------------------
      1.1 Start Date      : Wed, 17 Oct 2018 16:23:33 +0300
      1.2 Name/Description: Project1.exe
      1.3 Version Number  : 
      1.4 Parameters      : 
      1.5 Compilation Date: Wed, 17 Oct 2018 16:23:15 +0300
      1.6 Up Time         : 6 second(s)   Exception:
    ------------------------------------------------------------------------
      2.1 Date          : Wed, 17 Oct 2018 16:23:39 +0300
      2.2 Address       : 012A03F0
      2.3 Module Name   : Project1.exe
      2.4 Module Version: 
      2.5 Type          : ERangeError
      2.6 Message       : Range check error at Unit1.Button1Click (Line 261)
      2.7 ID            : ABBB0630
      2.8 Count         : 1
    
    ...
    
    使用上面提到的一个用例就足够了

    然而,当您从EurekaLog 6迁移旧代码时,您需要访问一个简单的bug报告的一个特定示例。错误报告已从
    OneExceptionNotify
    事件中删除,因为错误报告不存在于EurekaLog 7中的异常处理之外(与EurekaLog 6不同)。例如,如果您决定在
    OnExceptionNotify
    事件处理程序中处理异常,则根本不会生成错误报告,从而节省处理时间

    如果您仍然需要EurekaLog 6风格的行为,那么可以随时从
    Dialog.BugReport
    属性(基本上是
    LogBuilder.report
    属性的缓存)检索错误报告内容。例如:

    uses
      EException, // for TEurekaExceptionInfo
      ELogBuilder; // for TBaseLogBuilder and RegisterEventEndReportGen
    
    procedure UploadToDB(const ACustom: Pointer;
      AExceptionInfo: TEurekaExceptionInfo;
      ALogBuilder: TBaseLogBuilder;
      var CallNextHandler: Boolean);
    var
      BugID: Cardinal;
      Report: String;
    begin
      BugID  := AExceptionInfo.BugID;
      Report := ALogBuilder.Report;
      // ... write bug report's content to your DB or
      // do whatever you want with it
    end;
    
    initialization
      RegisterEventEndReportGen(nil, UploadToDB, True);
    end.
    
    例如,您应该将
    OnExceptionNotify
    事件处理程序替换为
    OnEndReportGen
    事件处理程序。此事件处理程序的调用方式如下:

    • 上传到数据库
    • TBaseDialog.SaveBugReport
    • TBaseDialog.Execute
    • 显示例外
    • 进程异常
    • 例外管理器.句柄
    • Forms.TApplication.HandleException
    或者,可以使用
    BuildBugReport
    功能随时(根据需要)创建错误报告:

    uses
      EException, // for TEurekaExceptionInfo
      ELogBuilder; // for BuildBugReport
    
    var
      EI: TEurekaExceptionInfo;
      Report: String;
    begin
      try
        // ...
      except
        on E: Exception do
        begin
          EI := ExceptionManager.Info(E);
          // EI = nil for disabled EurekaLog
          // or when exception is ignored
          if Assigned(EI) then
          begin
            Report := BuildBugReport(EI);
    
            // ... write bug report's content to your DB
    
            // or do whatever you want with it
          end; 
        end;  
      end;
    

    ExceptionInfo.ToString?@kobik-谢谢你的回复,但我认为用Tostrng替换logText会减少讨论中的日志信息:你用
    logText
    做什么?@nkp:你为什么不向供应商询问这个问题?