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 -~----------~----~----~----~------~----~------~--~---
#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;
}
SConstruct
Description: Binary data
drwtsn32.log
Description: Binary data
user.dmp
Description: Binary data
