Page 1 of 2

How to terminate application on libcef exception?

Posted: Sat Aug 01, 2020 8:25 pm
by andreykrasnodar
Sometimes there are libcef exceptions and program hangs with message "libcef exception...".
How to terminate application on that exception?

Re: How to terminate application on libcef exception?

Posted: Sun Aug 02, 2020 8:22 am
by salvadordf
If you find a bug in CEF4Delphi, please report it and provide all the details you can.

If that issue can be reproduced with any of the demos then show the steps to reproduce it.
In some cases it's necessary to provide a minimal demo in order to reproduce that error.

In any case, please share your findings with the community to fix it as soon as possible.

libcef exceptions and programs hanging shouldn't happen but if your application can't avoid them you can use a "watchdog" process that checks if the main application has problems and close all their processes if it hangs.

Re: How to terminate application on libcef exception?

Posted: Sun Aug 02, 2020 8:30 am
by andreykrasnodar
I made the bot that visits search engines and checks thousands positions of thousands websites. It works on my notebook but once or twice a day it hangs on my zero client (Via Eden 1Ghz, 2gb RAM, 2GB SSD, WindowsXP SP3) with message "libcef exception". I don't know the reason and just want to terminate all the processes and start program again.

Re: How to terminate application on libcef exception?

Posted: Sun Aug 02, 2020 8:57 am
by salvadordf
Using Windows XP means that you use the OldCEF4Delphi component which includes a very old CEF verison.
Many of the old CEF issues are now fixed and your application should be much more stable if you upgrade.

Chromium is known to use a lot of RAM and that PC only has 2Gb. This issue could also be caused by running out of memory.

Use the CEF log functions to add some custom information about the code that may give problems.

Re: How to terminate application on libcef exception?

Posted: Sun Aug 02, 2020 10:29 am
by andreykrasnodar
Use the CEF log functions
Please tell me how to do that

Re: How to terminate application on libcef exception?

Posted: Sun Aug 02, 2020 10:42 am
by salvadordf
Add these lines before the GlobalCEFApp.StartMainProcess call in the DPR file :

Code: Select all

  GlobalCEFApp.LogFile             := 'debug.log';
  GlobalCEFApp.LogSeverity         := LOGSEVERITY_INFO;
Then call CefDebugLog with a text message every time you need to add some information to the debug.log file.

If the application crashes you can open the debug.log file to see what was the last text message.

If you want extra information in the log set GlobalCEFApp.LogSeverity to LOGSEVERITY_VERBOSE.

LOGSEVERITY_INFO and LOGSEVERITY_VERBOSE are defined in uCEFConstants.pas

Re: How to terminate application on libcef exception?

Posted: Sat Aug 08, 2020 9:47 am
by andreykrasnodar
I started to use ChromiumOSR and ... no exceptions now.

P.S. Also hangs with exceptions...

Re: How to terminate application on libcef exception?

Posted: Sat Aug 08, 2020 4:38 pm
by andreykrasnodar
But I found out that application does not close correctly.
When I run my program, open new windows and close them, and repeat it few times, suddenly"libcef exception" begin on opening new window. And it will continue on the next cycle of running my program. But if I restart computer, libcef exception does not occur.
So I think there is a problem when I terminate my program. Maybe I should close browser, free memory or something like this and after this terminate program...

Re: How to terminate application on libcef exception?

Posted: Sat Aug 08, 2020 5:13 pm
by andreykrasnodar
When I try to terminate my program clicking X button, I see the message
APPCRASH gdi32.dll 6.3.9600.17246
53dc6153 c0000005 000266a4

Re: How to terminate application on libcef exception?

Posted: Sat Aug 08, 2020 6:20 pm
by andreykrasnodar
I am trying to close my program with this procedure

Code: Select all

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if CefSingleProcess then
  begin
    Chromium1.Load('about:blank');
    Chromium2.Load('about:blank');
  end;
  CanClose := True;
end;
But now on close program I see message Access violation