HRESULT CRunBreakPoint::OnDemandBreakpoint(CebScript *pScript, CebThread *pThread, IObjectManagement *pIOM, IStreamInfo *pISI) { ASSERT(NULL != pScript); ASSERT(NULL != pThread); if (pScript == NULL || pThread == NULL) return E_POINTER; ASSERT(NULL != pThread->GetHandle()); ASSERT(NULL != pScript->GetHandle()); if (NULL == pScript->GetHandle() || NULL == pThread->GetHandle()) return E_HANDLE; HRESULT hr = NOERROR; try {// evtl. Debuggerfenster erzeugen hr = CreateDebugger(WM_CLOSEBREAKPOINTDEBUGGERDIALOG, false, 0, pIOM, pISI); if (FAILED(hr)) _com_issue_error(hr); // Fertzigen Script und Thread unterschieben if (!ebDebugger_SetScript(GetDebuggerWnd(), pScript->GetHandle())) _com_issue_error(E_FAIL); if (!ebDebugger_SetThread(GetDebuggerWnd(), pThread->GetHandle())) _com_issue_error(E_FAIL); // jetzt Debugger anzeigen hr = m_pScriptDebugger -> RunModal(); if (FAILED(hr)) _com_issue_error(hr); } catch(_com_error& e) { if (m_pScriptDebugger) m_pScriptDebugger -> DestroyWindow(); m_pScriptDebugger = NULL; return _COM_ERROR(e); } return S_OK; }
HRESULT CRunErr::OnDemandRuntimeError(ebWORD wLinNr) { // testen, ob im richtigen Kontext verwendet ASSERT (!m_fRunModal); // evtl. Debuggerfenster erzeugen m_fRTError = true; if (NULL == m_pScriptDebugger) { HRESULT hr = CreateDebugger(); if (FAILED(hr)) return hr; ASSERT(NULL != m_pScriptDebugger); } ebDebugger_SelectLines(GetDebuggerWnd(), wLinNr-2, wLinNr-1, true); // jetzt, wo alles fertig ist, anzeigen m_pScriptDebugger -> EditOnly(); // UI richten, kein GO etc. möglich m_pScriptDebugger -> ShowWindow (SW_SHOWNORMAL); m_pScriptDebugger -> UpdateWindow(); return NOERROR; }
HRESULT CRunErr::CreateDebugger() { // Debugger-DLL nicht installiert if (!g_SummitModuls[DEBUGGER].fIsInstalled) return E_FAIL; EnableTriasWindow(false); CMacroScriptExtension *pExt = (CMacroScriptExtension *)g_pTE; ASSERT(NULL != pExt); m_pScriptDebugger = new CBScriptDebug(pExt->ebInst(), pExt->MWind(), m_pOperateScripts); ASSERT(NULL != m_pScriptDebugger); if (NULL == m_pScriptDebugger) return E_OUTOFMEMORY; if (NULL != m_pOperateScripts) { // öffnet Stream ASSERT(!m_strName.IsEmpty()); if (!m_pScriptDebugger -> OpenStream((LPSTR)(LPCSTR)m_strName)) return E_FAIL; } ASSERT(!m_strText.IsEmpty()); // immer if (!ebDebugger_SetText(GetDebuggerWnd(), m_strText)) return E_FAIL; return NOERROR; }
HRESULT CRunErr::OnDemandBreakpoint(CebScript *pScript, CebThread *pThread) { ASSERT(NULL != pScript); ASSERT(NULL != pThread); if (pScript == NULL || pThread == NULL) return E_POINTER; ASSERT(NULL != pThread->GetHandle()); ASSERT(NULL != pScript->GetHandle()); if (NULL == pScript->GetHandle() || NULL == pThread->GetHandle()) return E_HANDLE; // testen, ob im richtigen Kontext verwendet ASSERT(!m_fRTError); m_fRunModal = true; // evtl. Debuggerfenster erzeugen if (NULL == m_pScriptDebugger) { HRESULT hr = CreateDebugger(); if (FAILED(hr)) return hr; ASSERT(NULL != m_pScriptDebugger); } if (!ebDebugger_SetScript(GetDebuggerWnd(), pScript->GetHandle())) return E_FAIL; if (!ebDebugger_SetThread(GetDebuggerWnd(), pThread->GetHandle())) return E_FAIL; // jetzt Debugger anzeigen HRESULT hr = m_pScriptDebugger -> RunModal(); if (E_ABORT == hr || E_UNEXPECTED == hr) // Debugger wurde geschlossen m_fRunModal = false; return hr; }
HRESULT CRunErr::CreateDebugger(UINT uiWMClose, BOOL fOpen, ebWORD wLineNr, IObjectManagement *pIOM, IStreamInfo *pISI) { ASSERT(!m_strName.IsEmpty()); if (m_strName.IsEmpty()) return E_INVALIDARG; EnableTriasWindow(false); HRESULT hr = NOERROR; // Neuen Debugger kreieren, Baum füllen, DebCtrl init. if (NULL == m_pScriptDebugger) hr = ::CreateDebugger(g_pBSE -> MWind(), m_strName, fOpen, uiWMClose, pIOM, pISI, &m_pScriptDebugger); else // Nur neuen Script öffnen hr = m_pScriptDebugger -> Init(m_strName, fOpen, pIOM, pISI); if (FAILED(hr)) return hr; m_pScriptDebugger -> SetEditOnly(true);// Nur editieren möglich ebDebugger_SelectLines(GetDebuggerWnd(), wLineNr-2, wLineNr-1, true); return hr; }