With your SCons file I could generate the crash on Visual Studio 2005. I changed the line CCFLAGS = ["-Wall", "-O3"],
to CCFLAGS = ["/EHsc"], and now it works file. Take a look at http://msdn.microsoft.com/en-us/library/1deeycx5(VS.80).aspx for informatoin on this option that controls handling of objects which goes out of scope when an exception is thrown. Note that when compiling on Windows the flags needs to be specified for the Visual C++ compiler. SCons cannot translate g++ flags to equivalent VC ones. You will probably need something like tils for MSVC. CCFLAGS = ["/W3", "/O2", "/EHsc"], This actually reveals some C4251 compiler warnings related to using V8 in a DLL, that I will take a look at and have filed issue 482<http://code.google.com/p/v8/issues/detail?id=482>tracking that. Regards, Søren On Fri, Oct 23, 2009 at 08:27, Ondřej Žára <[email protected]> wrote: > Hi Soren, > > some further information: > > - the code is compiled against recent V8 trunk revision, > - using the MS debugger, I traced the crash to this code (factory.cc): > > Handle<Struct> Factory::NewStruct(InstanceType type) { > CALL_HEAP_FUNCTION(Heap::AllocateStruct(type), Struct); > } > > > Additional info provided by the MS Debugger folows: > > > MODULE_NAME: v8 > FAULTING_MODULE: 7c900000 ntdll > DEBUG_FLR_IMAGE_TIMESTAMP: 4adef891 > ERROR_CODE: (NTSTATUS) 0xc0000005 - Instrukce na adrese 0x%08lx odkazovala > na adresu pam > EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - Instrukce na adrese 0x%08lx > odkazovala na adresu pam > EXCEPTION_PARAMETER1: 00000001 > EXCEPTION_PARAMETER2: 00000000 > WRITE_ADDRESS: 00000000 > > FOLLOWUP_IP: > v8!v8::internal::Factory::NewStruct+30 [z:\v8\src\factory.cc @ 150] > 10026420 8938 mov dword ptr [eax],edi > > FAULTING_THREAD: 000004e0 > BUGCHECK_STR: > APPLICATION_FAULT_NULL_POINTER_READ_NULL_POINTER_WRITE_WRONG_SYMBOLS > PRIMARY_PROBLEM_CLASS: NULL_POINTER_READ > DEFAULT_BUCKET_ID: NULL_POINTER_READ > LAST_CONTROL_TRANSFER: from 10007af3 to 10026420 > > STACK_TEXT: > 0012ff30 10007af3 7ffdf000 0012ff60 2b5e1080 > v8!v8::internal::Factory::NewStruct+0x30 [z:\v8\src\factory.cc @ 150] > 0012ff40 10007a3e 0012ff60 00000000 00000000 > v8!v8::ObjectTemplate::New+0xa3 [z:\v8\src\api.cc @ 882] > 0012ff50 004011c3 0012ff60 00405780 2b1ed2b0 v8!v8::ObjectTemplate::New+0xe > [z:\v8\src\api.cc @ 868] > WARNING: Stack unwind information not available. Following frames may be > wrong. > 0012ff78 00402656 00000001 003d3170 003d3188 crash+0x11c3 > 0012ffc0 7c817077 00000012 00000000 7ffdf000 crash+0x2656 > 0012fff0 00000000 004026ad 00000000 00000000 > kernel32!RegisterWaitForInputIdle+0x49 > > STACK_COMMAND: ~0s; .ecxr ; kb > > > > > > Ondrej > > > > > > 2009/10/23 Ondřej Žára <[email protected]> > > Hi Soren, >> >> thanks a lot for your response. I have attached all files relevant to my >> issue: >> - source code, >> - SConstruct file, >> - DrWatson logfile, >> - user.dmp file (two last files are created in DrWatson directory after >> the crash). >> >> Unfortunately, I have no experience with the debugging workflow on >> Windows, so I hope these are sufficient. My compiler is MS VC++ Express >> 2008. >> >> >> Thanks for assistance, >> Ondrej >> >> >> >> >> 2009/10/22 Søren Gjesse <[email protected]> >> >> I have just tried to create a Visual Studio project like the >>> v8_sample_shell containing your code (actually just putting your code in >>> shell.cc) and added the option /EHsc. It seems to run fine for me in both >>> Debug and Release build. I am using used Visual Studio 2005. I also tried to >>> add option /EHsc to the v8 and v8_base project and that also seemed to work >>> fine. If a turn on break on C++ exceptions in the Visual Studio debugger I >>> also get a break when the C++ exception is thrown. Could you perhaps post >>> some more information on the build options used to make the crash happen? >>> >>> Regards, >>> Søren >>> >>> On Thu, Oct 22, 2009 at 08:14, ondras <[email protected]> wrote: >>> >>>> >>>> Hi, >>>> >>>> I run into a very strange runtime error in my v8 application. I >>>> managed to track down the issue and I am including a minimal working >>>> sample. This code must be compiled with MSVC and then executed. >>>> >>>> I am possibly doing something very wrong here (although GCC way works >>>> ok), but I am unable to find out what is the exact cause of the crash. >>>> The error happens when the line with "TEST" ObjectTemplate gets >>>> executed. >>>> >>>> Note that any of the following makes the issue disappear: >>>> - remove any of the HandleScopes; >>>> - remove the "throw" portion of JS code in execute2(); >>>> - do not pass the v8::Object::New() to execute2() >>>> >>>> >>>> Thanks a lot for any assistance, >>>> Ondrej Zara >>>> (code follows) >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> #include <string> >>>> #include <v8.h> >>>> >>>> void execute2(v8::Handle<v8::Object> someObject) { >>>> v8::HandleScope handle_scope; >>>> v8::TryCatch tc; >>>> >>>> v8::Script::New(v8::String::New("throw 1;"))->Run(); >>>> >>>> if (tc.HasCaught()) { throw std::string("exception"); } >>>> } >>>> >>>> void execute1() { >>>> v8::HandleScope handle_scope; >>>> try { >>>> execute2(v8::Object::New()); >>>> } catch (std::string e) { >>>> } >>>> } >>>> >>>> void create_context() { >>>> v8::HandleScope handle_scope; >>>> v8::Context::New(NULL, v8::ObjectTemplate::New())->Enter(); >>>> } >>>> >>>> int main(int argc, char ** argv) { >>>> v8::HandleScope handle_scope; >>>> >>>> create_context(); >>>> execute1(); >>>> v8::Handle<v8::ObjectTemplate> TEST = v8::ObjectTemplate::New(); >>>> >>>> return 0; >>>> } >>>> >>>> >>>> >>> >>> >>> >> > > > > --~--~---------~--~----~------------~-------~--~----~ v8-users mailing list [email protected] http://groups.google.com/group/v8-users -~----------~----~----~----~------~----~------~--~---
