CThreadDebugger::~CThreadDebugger() { // Clear all Traps and Breakpoints that are marked for removal ClearTrapsToRemove(); // Return all breakpoints to the associated CDebuggingServer ReturnActiveBreakPoints(NULL); // Remove all the hooks because they store a pointer to this object JS_SetExecuteHook(m->m_pScriptInterface->GetRuntime(), NULL, NULL); JS_SetCallHook(m->m_pScriptInterface->GetRuntime(), NULL, NULL); JS_SetNewScriptHook(m->m_pScriptInterface->GetRuntime(), NULL, NULL); JS_SetDestroyScriptHook(m->m_pScriptInterface->GetRuntime(), NULL, NULL); }
/* * call-seq: * debugger=(debugger) * * Sets a debugger object */ static VALUE set_debugger(VALUE self, VALUE debugger) { JohnsonRuntime* runtime; JSDebugHooks* debug_hooks; rb_iv_set(self, "@debugger", debugger); Data_Get_Struct(self, JohnsonRuntime, runtime); Data_Get_Struct(debugger, JSDebugHooks, debug_hooks); JSContext * context = johnson_get_current_context(runtime); JS_SetInterrupt( runtime->js, debug_hooks->interruptHandler, debug_hooks->interruptHandlerData); JS_SetNewScriptHook( runtime->js, debug_hooks->newScriptHook, debug_hooks->newScriptHookData); JS_SetDestroyScriptHook( runtime->js, debug_hooks->destroyScriptHook, debug_hooks->destroyScriptHookData); JS_SetDebuggerHandler( runtime->js, debug_hooks->debuggerHandler, debug_hooks->debuggerHandlerData); JS_SetSourceHandler( runtime->js, debug_hooks->sourceHandler, debug_hooks->sourceHandlerData); JS_SetExecuteHook( runtime->js, debug_hooks->executeHook, debug_hooks->executeHookData); JS_SetCallHook( runtime->js, debug_hooks->callHook, debug_hooks->callHookData); JS_SetObjectHook( runtime->js, debug_hooks->objectHook, debug_hooks->objectHookData); JS_SetThrowHook( runtime->js, debug_hooks->throwHook, debug_hooks->throwHookData); JS_SetDebugErrorHook( runtime->js, debug_hooks->debugErrorHook, debug_hooks->debugErrorHookData); JS_SetContextDebugHooks(context, debug_hooks); return debugger; }
void CThreadDebugger::Initialize(uint id, std::string name, ScriptInterface* pScriptInterface, CDebuggingServer* pDebuggingServer) { ENSURE(id != 0); m->m_ID = id; m->m_Name = name; m->m_pScriptInterface = pScriptInterface; m->m_pDebuggingServer = pDebuggingServer; JS_SetExecuteHook(m->m_pScriptInterface->GetRuntime(), CallHook_, (void*)this); JS_SetCallHook(m->m_pScriptInterface->GetRuntime(), CallHook_, (void*)this); JS_SetNewScriptHook(m->m_pScriptInterface->GetRuntime(), NewScriptHook_, (void*)this); JS_SetDestroyScriptHook(m->m_pScriptInterface->GetRuntime(), DestroyScriptHook_, (void*)this); JS_SetThrowHook(m->m_pScriptInterface->GetRuntime(), ThrowHandler_, (void*)this); if (m->m_pDebuggingServer->GetSettingSimultaneousThreadBreak()) { // Setup a handler to check for break-requests from the DebuggingServer regularly JS_SetInterrupt(m->m_pScriptInterface->GetRuntime(), CheckForBreakRequestHandler_, (void*)this); } }