Hi,
I've been testing out CEF to run my application. And I always encounter a crash that points back to V8Proxy after minutes of automatic navigating.
I haven't been able to create a minimal set of code to reproduce it yet. But my javascript is quite simple. Each "onload" there's a function to declare an array:
var myarray = new Array();
myarray['map'] = "mapped string";
myarray['othermap'] = "other mapped string";
then there are calls to "document.getElementById" to read out some hidden form values, and print formatted values to the page by accessing innerHTML.
The program that hosts CEF will attempt to refresh the page filled with random content, served by a custom scheme handler, then execute that javascript, at the timer of 1 second per refresh. Within several minutes, there will be a crash that points back to line 226 of V8Proxy.cpp, the call stack is below:
> libcef.dll!WebCore::reportFatalErrorInV8(const char * location=0x5b03b7b4, const char * message=0x5b022ad0) Line 226 C++
libcef.dll!v8::internal::V8::FatalProcessOutOfMemory(const char * location=0x5b03b7b4) Line 179 C++
libcef.dll!v8::internal::Factory::NewJSObject(v8::internal::Handle<v8::internal::JSFunction> constructor={...}, v8::internal::PretenureFlag pretenure=TENURED) Line 647 + 0x20 bytes C++
libcef.dll!v8::internal::Genesis::CreateRoots(v8::Handle<v8::ObjectTemplate> global_template={...}, v8::internal::Handle<v8::internal::Object> global_object={...}) Line 779 + 0x11 bytes C++
libcef.dll!v8::internal::Genesis::Genesis(v8::internal::Handle<v8::internal::Object> global_object={...}, v8::Handle<v8::ObjectTemplate> global_template={...}, v8::ExtensionConfiguration * extensions=0x0301f3bc) Line 1592 C++
libcef.dll!v8::internal::Bootstrapper::CreateEnvironment(v8::internal::Handle<v8::internal::Object> global_object={...}, v8::Handle<v8::ObjectTemplate> global_template={...}, v8::ExtensionConfiguration * extensions=0x0301f3bc) Line 380 C++
libcef.dll!v8::Context::New(v8::ExtensionConfiguration * extensions=0x0301f3bc, v8::Handle<v8::ObjectTemplate> global_template={...}, v8::Handle<v8::Value> global_object={...}) Line 2789 + 0x15 bytes C++
libcef.dll!WebCore::V8Proxy::createNewContext(v8::Handle<v8::Object> global={...}, int extensionGroup=0) Line 990 C++
libcef.dll!WebCore::V8Proxy::initContextIfNeeded() Line 1084 + 0x11 bytes C++
libcef.dll!WebCore::V8Proxy::updateDocument() Line 844 C++
libcef.dll!WebCore::Frame::setDocument(WTF::PassRefPtr<WebCore::Document> newDoc={...}) Line 292 C++
libcef.dll!WebCore::FrameLoader::begin(const WebCore::KURL & url={...}, bool dispatch=false, WebCore::SecurityOrigin * origin=0x00000000) Line 830 C++
libcef.dll!WebCore::FrameLoader::receivedFirstData() Line 749 C++
libcef.dll!WebCore::FrameLoader::setEncoding(const WebCore::String & name={...}, bool userChosen=false) Line 1466 C++
libcef.dll!WebKit::WebFrameImpl::commitDocumentData(const char * data=0x0979c4e0, unsigned int dataLen=2107) Line 879 C++
libcef.dll!WebKit::FrameLoaderClientImpl::committedLoad(WebCore::DocumentLoader * loader=0x098d5140, const char * data=0x0979c4e0, int length=2107) Line 1030 C++
libcef.dll!WebCore::FrameLoader::committedLoad(WebCore::DocumentLoader * loader=0x098d5140, const char * data=0x0979c4e0, int length=2107) Line 3240 + 0x16 bytes C++
libcef.dll!WebCore::DocumentLoader::commitLoad(const char * data=0x0979c4e0, int length=2107) Line 343 C++
libcef.dll!WebCore::DocumentLoader::receivedData(const char * data=0x0979c4e0, int length=2107) Line 354 + 0xf bytes C++
libcef.dll!WebCore::MainResourceLoader::addData(const char * data=0x0979c4e0, int length=2107, bool allAtOnce=false) Line 143 + 0x10 bytes C++
libcef.dll!WebCore::ResourceLoader::didReceiveData(const char * data=0x0979c4e0, int length=2107, __int64 lengthReceived=2107, bool allAtOnce=false) Line 252 C++
libcef.dll!WebCore::MainResourceLoader::didReceiveData(const char * data=0x0979c4e0, int length=2107, __int64 lengthReceived=2107, bool allAtOnce=false) Line 375 C++
libcef.dll!WebCore::ResourceLoader::didReceiveData(WebCore::ResourceHandle * __formal=0x0da72188, const char * data=0x0979c4e0, int length=2107, int lengthReceived=2107) Line 398 + 0x18 bytes C++
libcef.dll!WebCore::ResourceHandleInternal::didReceiveData(WebKit::WebURLLoader * __formal=0x0d869ad8, const char * data=0x0979c4e0, int dataLength=2107) Line 141 + 0x20 bytes C++
libcef.dll!webkit_glue::WebURLLoaderImpl::Context::OnReceivedData(const char * data=0x0979c4e0, int len=2107) Line 479 + 0x17 bytes C++
libcef.dll!`anonymous namespace'::RequestProxy::NotifyReceivedData(int bytes_read=2107) Line 203 C++
libcef.dll!RunnableMethod<URLRequestFtpJob,void (__thiscall URLRequestFtpJob::*)(int),Tuple1<int> >::Run() Line 289 + 0xf bytes C++
libcef.dll!MessageLoop::RunTask(Task * task=0x02aea400) Line 321 C++
libcef.dll!MessageLoop::DoWork() Line 435 + 0xb bytes C++
libcef.dll!base::MessagePumpForUI::DoRunLoop() Line 210 C++
libcef.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate=0x0301f8c8) Line 78 + 0x3e bytes C++
libcef.dll!MessageLoop::RunInternal() Line 205 + 0xb bytes C++
libcef.dll!MessageLoop::Run() Line 156 C++
libcef.dll!ThreadHandlerUI(void * lpParam=0x003e4de8) Line 249 C++
kernel32.dll!767feccb()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!775fd24d()
ntdll.dll!775fd45f()
In the crashing function: "static void reportFatalErrorInV8(const char* location, const char* message)", location = "CALL_AND_RETRY_2", message = "Allocation failed - process out of memory".
The process started out using about 160MB-ish of RAM, and crashed at some 175MB-ish. The crash is random and I can't link it to a particular piece of javascript of page content. But it always happens after several minutes of running.
I synced chromium to the latest and it's still there.
Is there any way I could debug it and find out about the cause?