我知道我的问题是多方面的,我可能会得到一些独立的建议,但非常感谢你这一切,我很抱歉,如果这是一个新手的问题。
我在Delphi 10中使用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 c0000005 / 001dea9b ),而且在各种论坛上找到的所有线程都被终止和/或解决了。
我试图通过显示更大的消息来编程每个页面加载,而不是关闭该程序:
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;
但是,在使用调试器时,我不会收到任何错误(再次),在生产系统上,我只会在没有任何错误消息的情况下杀死应用程序。
乍一看,我想我需要一个解释
事先谢谢你,如果这太简单或者问题太蠢,我很抱歉。当然,我也知道,由于我没有提供完整的代码,这将是很难分析的问题,但我想学习这样的错误分析自己,所以也许你会原谅我。:)
~~附加信息
win 7 xs64;
发布于 2020-02-10 17:59:05
感谢@J..。我想我想出了办法来解决这个问题。
所指示的错误仅来自libcef.dll库的“工作”,而该库(不幸的是)可能不再受支持。虽然这在任何地方都不是一个解决的问题-在各种论坛上,大多数错误的迹象都出现在内存中引用错误地址的问题时,然后遵循这一思路,在不同版本中基本上都会出现内存错误。
libcef库有一些分配内存的致命方法,其本身会导致不断的内存泄漏。这些泄漏和错误分配会导致几乎所有可用内存的使用.同样的问题也很容易解决。首先,添加一个指令
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
之后
uses WinApi.Windows
对于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库中的bug的信息-和J.完成了这个话题,非常感谢你。
至于萨尔瓦多·迪亚斯·福乌的提议--我真的很感谢你参与这个项目,像你这样的人是我们社区的基础;然而,尽管CEF3还在工作,但对我来说,与其说是发现CEF4的新元素和可能性,不如说它需要我重建表单。会有时间这样做的。:)
谢谢你们!案子已经结案了!
https://stackoverflow.com/questions/60039176
复制相似问题