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中调试CEF3/libcef.dll并收集有关c0000005/001dea9b异常的信息_Delphi_Exception_Dll_Chromium Embedded_Madexcept - Fatal编程技术网

如何在Delphi中调试CEF3/libcef.dll并收集有关c0000005/001dea9b异常的信息

如何在Delphi中调试CEF3/libcef.dll并收集有关c0000005/001dea9b异常的信息,delphi,exception,dll,chromium-embedded,madexcept,Delphi,Exception,Dll,Chromium Embedded,Madexcept,我知道我的问题是多方面的,我可能会得到一些独立的建议,但非常感谢你的所有这些,如果这是一个新手问题,我很抱歉 我在DelphiRad10中使用了CEF(TChromium)浏览器。我经常在客户的产品中收到一个错误,在使用调试器时无法复制该错误。显示基本Win错误信息后,系统(Win7)终止程序,并以未保存的先前工作结束。我一步一步地检查代码的每个元素,请其他程序员进行分析,似乎这个错误只适用于CEF浏览器。每次,无论我能在程序的工作中注意到什么,错误都是一样的: Problem signatur

我知道我的问题是多方面的,我可能会得到一些独立的建议,但非常感谢你的所有这些,如果这是一个新手问题,我很抱歉

我在DelphiRad10中使用了CEF(TChromium)浏览器。我经常在客户的产品中收到一个错误,在使用调试器时无法复制该错误。显示基本Win错误信息后,系统(Win7)终止程序,并以未保存的先前工作结束。我一步一步地检查代码的每个元素,请其他程序员进行分析,似乎这个错误只适用于CEF浏览器。每次,无论我能在程序的工作中注意到什么,错误都是一样的:

Problem signature:
  Problem Event Name:   APPCRASH
  Application Name: MyApp.exe
  Application version:  0.0.0.0
  Application timestamp:    5e36d888
  Module name with error:   libcef.dll
  Module version with error:    3.2454.1344.0
  Module timestamp with error:  562d8f27
  Exception Code:   c0000005
  Exception Offset: 001dea9b
  OS Version:   6.1.7601.2.1.0.256.1
  Locale ID:    1045
  Additional information 1: 0a9e
  Additional information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional information 3: 0a9e
  Additional information 4: 0a9e372d3b4ad19135b953a78882e789
是的,我想问题可能是由大量不同的事情引起的,但我假设,由于这只发生在使用浏览器时(否则程序工作正常),并且每次显示相同的问题时,可能是TChromium组件

不幸的是,我无法理解到底是什么导致了这个问题(libcef.dll c000005/001dea9b exeption),在各种论坛上找到的所有线程都被终止和/或未解决

我试图通过显示更大的消息而不是关闭程序来对每个页面加载进行编程:

procedure LoadUrl(url: String);
begin
  try
  Form1.Chromium1.Load(url);
  except
    on E : Exception do
      ShowMessage('CEF: '+E.ClassName+' error raised, with message : '+E.Message);
  end;
end;
但在调试器上工作时,我没有(再次)得到任何错误,在生产系统上,我只是在没有任何错误消息的情况下终止应用程序

乍一看,我想我需要一个解释:

  • TChromium组件实际上只有在我用“Load(url)”调用它时才会更改,所以我是否正确理解代码中的这个地方是我应该关注的地方
  • 我可以用这种方式编程外部库的错误/异常吗?或者,也许有其他方法可以安全地使用它们,这样错误就不会成为终止应用程序的原因,而是在生产过程中得到控制
  • 上面提到的调用TChromium组件的过程会给我比杀死我的应用程序的系统更多的信息吗?(当然,如果这是一个错误的地方,因为这似乎是最可靠的机会)
  • 我使用EurekaLog7工具,但我不知道应该如何使用它来跟踪浏览器库错误跟踪以及在哪里调用它,甚至不知道如何在代码中使用它。实际上,我完全不知道从哪里开始在外部库中使用它,我很乐意接受一些文档或关于阅读内容的提示,以及在哪里可以找到一个可以理解的示例
提前谢谢你,如果这太简单或问题太愚蠢,我向你道歉。当然,我也知道,由于我没有提供完整的代码,因此分析问题会很困难,但我想自己学习这种错误分析,所以您可能会原谅我。:)

~~其他信息

  • 程序得到x32结构,在Win7XS64中运行
  • 该程序是一个简单的爬虫程序,其任务是将搜索页面的选定元素保存为文本文件形式
  • 可选:这对我来说已经足够了,如果这个错误触发了我自己的关机程序,允许简单地保存结果,那么应用程序可以在之后被杀死,因为调度程序会重新启动它
      感谢@J。。。我想我找到了答案,这是解决办法

      所示错误仅由libcef.dll库的“工作”导致,很遗憾,该库可能不再受支持。虽然这不是一个任何地方都能解决的问题,但在各种论坛中,当出现引用内存中错误地址的问题时,就会出现这种错误的大多数迹象,而遵循这条线索基本上是关于各种版本中的内存不足错误

      libcef库有一些致命的内存分配方法,其本身会导致不断的内存泄漏。这些泄漏和错误分配很快导致几乎所有可用内存的使用。。。很容易出现类似的问题。首先,添加一个指令

      {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
      
      之后

      到dpr表单解决了一段时间的问题,因为程序有更多的可用内存,消耗资源的时间更长。当然,这并不能解决问题,因为暂停该计划只会花费更长的时间

      但是!当每隔几十次扫描(爬网)就会为表单重新定位内存时,这就足够了,它会自动分配内存,消除泄漏——同样是在libcef库方面。我发现并使用了这种不时被调用的代码。对我来说,每20次打开一次浏览器就足够了,但对每个人来说可能都不一样。你需要试试扳机

       procedure TrimAppMemorySize;
       var
         MainHandle : THandle;
       begin
         try
           MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
           SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
           CloseHandle(MainHandle) ;
         except
          on E : Exception do
           // inform me about problem 
         end;
         Application.ProcessMessages;
       end;
      
      这可能不是最好的解决方案,但它使不稳定的形式与CEF3稳定和准备工作。几天来,在处理同一表单的多个副本时,没有出现任何错误,因此这可能是一个很好的解决方案,可能适用于所有使用CEF3发生内存泄漏、出现与我类似的未知错误或由CEF3导致的内存不足错误的人

      然而,我的问题是如何调试libcef.dll,以及如何获得更多关于CEF3库错误的信息,以及J。。。我已经完成了这个话题,非常感谢

      关于萨尔瓦多·阿兹福的提议——我真的很感激你参与这个项目,像你这样的人是我们社区的基础;然而,虽然CEF3仍在运行,但对我来说,发现CEF3的新元素和可能性需要我重新构建表单,这比发现CEF3的新元素和可能性要少。会有时间的。:)


      谢谢你们!案件已经结案了

      您的应用程序正在使用非常旧的CEF库。3.2454.1344.0版本是几年前发布的。考虑切换到最新的CEF4Delphi版本,并阅读本指南调试CEF问题:我刚刚上传了一个新版本的CEF4Delphi与修复的那个问题。请从GitHub再次下载。您可以使用stackoverflow或我们的论坛讨论CEF4Delphi。@kwadratens再次感谢您的支持
       procedure TrimAppMemorySize;
       var
         MainHandle : THandle;
       begin
         try
           MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID) ;
           SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF) ;
           CloseHandle(MainHandle) ;
         except
          on E : Exception do
           // inform me about problem 
         end;
         Application.ProcessMessages;
       end;