From: John L. <jr...@us...> - 2007-11-28 22:55:06
|
Update of /cvsroot/wxlua/wxLua/modules/wxluasocket/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv28670/wxLua/modules/wxluasocket/src Modified Files: wxldserv.cpp wxldtarg.cpp Log Message: Use wxSIGKILL to kill debuggee process since wxSIGTERM doesn't work in MSW Made wxLuaCheckStack class work a little nicer for easier debugging in C++ Made wxluaT_insert(L, idx) not pop the value that it refs since it may not be the one at the top of the stack. Use wxLuaDebugData::GetTypeValue in wxLuaDebugTarget and other code cleanup in wxLuaDebugTarget Index: wxldtarg.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldtarg.cpp,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** wxldtarg.cpp 17 Nov 2007 00:15:11 -0000 1.40 --- wxldtarg.cpp 28 Nov 2007 22:55:02 -0000 1.41 *************** *** 328,335 **** break; } ! case wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT: ret = true; break; ! case wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT: ret = true; break; --- 328,335 ---- break; } ! case wxLUASOCKET_DEBUGGER_CMD_DISABLE_BREAKPOINT: // FIXME do something here ret = true; break; ! case wxLUASOCKET_DEBUGGER_CMD_ENABLE_BREAKPOINT: // FIXME do something here ret = true; break; *************** *** 343,347 **** wxString wxLuaDebugTarget::CreateBreakPoint(const wxString &fileName, int lineNumber) const { ! return wxString::Format(wxT("%u:"), lineNumber) + fileName; } --- 343,353 ---- wxString wxLuaDebugTarget::CreateBreakPoint(const wxString &fileName, int lineNumber) const { ! return wxString::Format(wxT("%d:"), lineNumber) + fileName; ! } ! ! bool wxLuaDebugTarget::AtBreakPoint(const wxString &fileName, int lineNumber) const ! { ! wxCriticalSectionLocker locker(m_breakPointListCriticalSection); ! return (m_breakPointList.Index(CreateBreakPoint(fileName, lineNumber)) != wxNOT_FOUND); } *************** *** 477,481 **** } ! bool wxLuaDebugTarget::EvaluateExpr(int exprRef, const wxString &strExpr) { wxString strResult(wxT("Error")); --- 483,487 ---- } ! bool wxLuaDebugTarget::EvaluateExpr(int exprRef, const wxString &strExpr) // FIXME - check this code { wxString strResult(wxT("Error")); *************** *** 504,508 **** nReference = m_wxlState.wxluaT_Insert(-1); ! lua_settop(L, nOldTop); } else --- 510,514 ---- nReference = m_wxlState.wxluaT_Insert(-1); ! lua_settop(L, nOldTop); // throw out all return values } else *************** *** 524,529 **** break; } ! else ! lua_pop(L, 1); } --- 530,535 ---- break; } ! ! lua_pop(L, 1); } *************** *** 546,559 **** if (strExpr == name) { ! nReference = m_wxlState.wxluaT_Insert(-1); // reference value and pop it. ! lua_pop(L, 1); // pop index fFound = true; break; } - else - lua_pop(L, 1); // removes `value'; } ! else ! lua_pop(L, 1); // removes `value'; } lua_settop(L, nOldTop); // the table of globals. --- 552,563 ---- if (strExpr == name) { ! nReference = m_wxlState.wxluaT_Insert(-1); // reference value ! lua_pop(L, 2); // pop key and value fFound = true; break; } } ! ! lua_pop(L, 1); // removes `value'; } lua_settop(L, nOldTop); // the table of globals. *************** *** 564,611 **** { m_wxlState.wxluaT_Remove(nReference); - switch (lua_type(L, -1)) - { - case LUA_TNIL: - strResult = wxT("Nil"); - break; - - case LUA_TBOOLEAN: - strResult = wxLuaDebugData::MakeBoolean(lua_toboolean(L, -1)); - break; ! case LUA_TNUMBER: ! strResult = wxLuaDebugData::MakeNumber(lua_tonumber(L, -1)); ! break; ! ! case LUA_TSTRING: ! strResult = wxString::Format(wxT("\"%s\""), lua2wx(lua_tostring(L, -1)).c_str()); ! break; ! ! case LUA_TTABLE: ! strResult = wxT("table ") + wxLuaDebugData::GetTableInfo(m_wxlState, -1); ! break; ! ! case LUA_TFUNCTION: ! if (lua_iscfunction(L, -1)) ! strResult = wxString::Format(wxT("C-function %p"), lua_tocfunction(L, -1)); ! else ! strResult = wxString::Format(wxT("lua function %p"), lua_topointer(L, -1)); ! break; ! ! case LUA_TUSERDATA: ! strResult = wxT("user data ") + wxLuaDebugData::GetUserDataInfo(m_wxlState, -1); ! break; ! ! case LUA_TLIGHTUSERDATA: ! strResult = wxT("light user data ") + wxLuaDebugData::GetUserDataInfo(m_wxlState, -1, false); ! break; ! ! case LUA_TTHREAD: ! strResult = wxString::Format(wxT("thread %p"), lua_topointer(L, -1)); ! break; ! default: ! break; ! } lua_pop(L, 1); --- 568,577 ---- { m_wxlState.wxluaT_Remove(nReference); ! int wxl_type = 0; ! wxString value; ! int l_type = wxLuaDebugData::GetTypeValue(m_wxlState, -1, &wxl_type, value); ! strResult = wxlua_getwxluatypename(wxl_type) + wxT(" : ") + value; lua_pop(L, 1); *************** *** 641,645 **** } else ! wxMessageBox(errorMsg, wxT("wxLua client error"), wxOK | wxCENTRE, NULL); m_fErrorsSeen = true; --- 607,611 ---- } else ! wxMessageBox(errorMsg, wxT("wxLua debug client error"), wxOK | wxCENTRE, NULL); m_fErrorsSeen = true; *************** *** 689,701 **** } - wxString wxLuaDebugTarget::GetDebugInfo(int &lineNumber) const - { - lua_Debug luaDebug = INIT_LUA_DEBUG; - lua_getstack(m_wxlState.GetLuaState(), 0, &luaDebug); - lua_getinfo(m_wxlState.GetLuaState(), "Sln", &luaDebug); - lineNumber = luaDebug.currentline - 1; - return lua2wx(luaDebug.source); - } - bool wxLuaDebugTarget::DebugHook(int event) { --- 655,658 ---- *************** *** 703,706 **** --- 660,675 ---- m_fStopped = true; + int lineNumber = 0; + wxString fileName; + + if (!(m_forceBreak && m_resetRequested)) + { + lua_Debug luaDebug = INIT_LUA_DEBUG; + lua_getstack(m_wxlState.GetLuaState(), 0, &luaDebug); + lua_getinfo(m_wxlState.GetLuaState(), "Sln", &luaDebug); + lineNumber = luaDebug.currentline - 1; + fileName = lua2wx(luaDebug.source); + } + if (m_forceBreak) { *************** *** 714,720 **** if (!m_fExiting) { - int lineNumber = 0; - wxString fileName = GetDebugInfo(lineNumber); - if (NotifyBreak(fileName, lineNumber)) fWait = true; --- 683,686 ---- *************** *** 725,736 **** if (event == LUA_HOOKCALL) // call m_nFramesUntilBreak++; ! else ! if ((event == LUA_HOOKRET) || (event == LUA_HOOKTAILRET)) // return { if (m_nFramesUntilBreak > 0) m_nFramesUntilBreak--; } ! else ! if (event == LUA_HOOKLINE) // line { switch (m_nextOperation) --- 691,700 ---- if (event == LUA_HOOKCALL) // call m_nFramesUntilBreak++; ! else if ((event == LUA_HOOKRET) || (event == LUA_HOOKTAILRET)) // return { if (m_nFramesUntilBreak > 0) m_nFramesUntilBreak--; } ! else if (event == LUA_HOOKLINE) // line { switch (m_nextOperation) *************** *** 738,744 **** case DEBUG_STEP: { - int lineNumber = 0; - wxString fileName = GetDebugInfo(lineNumber); - if (NotifyBreak(fileName, lineNumber)) fWait = true; --- 702,705 ---- *************** *** 748,759 **** case DEBUG_STEPOVER: { ! if (m_nFramesUntilBreak == 0) ! { ! int lineNumber = 0; ! wxString fileName = GetDebugInfo(lineNumber); - if (NotifyBreak(fileName, lineNumber)) - fWait = true; - } break; } --- 709,715 ---- case DEBUG_STEPOVER: { ! if ((m_nFramesUntilBreak == 0) && NotifyBreak(fileName, lineNumber)) ! fWait = true; break; } *************** *** 761,769 **** default: { ! int lineNumber = 0; ! wxString fileName = GetDebugInfo(lineNumber); ! ! if (AtBreakPoint(fileName, lineNumber) && ! NotifyBreak(fileName, lineNumber)) fWait = true; --- 717,721 ---- default: { ! if (AtBreakPoint(fileName, lineNumber) && NotifyBreak(fileName, lineNumber)) fWait = true; *************** *** 784,792 **** EnterLuaCriticalSection(); } m_fStopped = false; return fWait; } ! void LUACALL wxLuaDebugTarget::LuaDebugHook(lua_State *L, lua_Debug *pLuaDebug) { wxLuaDebugTarget *pTarget = NULL; --- 736,747 ---- EnterLuaCriticalSection(); } + m_fStopped = false; return fWait; } ! // -------------------------------------------------------------------------- ! ! wxLuaDebugTarget* wxLuaDebugTarget::GetDebugTarget(lua_State* L) { wxLuaDebugTarget *pTarget = NULL; *************** *** 801,812 **** lua_pop(L, 1); ! if (pTarget != NULL) ! pTarget->DebugHook(pLuaDebug->event); } ! bool wxLuaDebugTarget::AtBreakPoint(const wxString &fileName, int lineNumber) const { ! wxCriticalSectionLocker locker(m_breakPointListCriticalSection); ! return (m_breakPointList.Index(CreateBreakPoint(fileName, lineNumber)) != wxNOT_FOUND); } --- 756,768 ---- lua_pop(L, 1); ! return pTarget; } ! void LUACALL wxLuaDebugTarget::LuaDebugHook(lua_State *L, lua_Debug *pLuaDebug) { ! wxLuaDebugTarget *pTarget = GetDebugTarget(L); ! ! if (pTarget != NULL) ! pTarget->DebugHook(pLuaDebug->event); } *************** *** 831,844 **** } ! wxLuaDebugTarget *pTarget = NULL; ! ! // try to get the state we've stored ! lua_pushstring( L, "__wxLuaDebugTarget__" ); ! lua_rawget( L, LUA_REGISTRYINDEX ); ! // if nothing was returned or it wasn't a ptr, abort ! if ( lua_islightuserdata(L, -1) ) ! pTarget = (wxLuaDebugTarget*)lua_touserdata( L, -1 ); ! ! lua_pop(L, 1); if (pTarget != NULL) --- 787,791 ---- } ! wxLuaDebugTarget *pTarget = GetDebugTarget(L); if (pTarget != NULL) Index: wxldserv.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldserv.cpp,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** wxldserv.cpp 26 Jul 2007 18:56:40 -0000 1.46 --- wxldserv.cpp 28 Nov 2007 22:55:02 -0000 1.47 *************** *** 195,198 **** --- 195,200 ---- wxLuaDebuggerBase::~wxLuaDebuggerBase() { + //wxPrintf(wxT("~wxLuaDebuggerBase the m_debuggeeProcess %p %d exists %d\n"), m_debuggeeProcess, m_debuggeeProcessID, wxProcess::Exists(m_debuggeeProcessID)); fflush(stdout); + // we don't delete the the process, we kill it and it's OnTerminate deletes it if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0) && *************** *** 202,207 **** m_debuggeeProcess = NULL; wxProcess::Kill(m_debuggeeProcessID, wxSIGKILL, wxKILL_CHILDREN); - - //wxPrintf(wxT("Deleting the m_debuggeeProcess %d\n"), m_debuggeeProcessID); } } --- 204,207 ---- *************** *** 605,608 **** --- 605,610 ---- void wxLuaDebuggerBase::OnEndDebugeeProcess(wxProcessEvent& event) { + //wxPrintf(wxT("OnEndDebugeeProcess the m_debuggeeProcess %p %d exists %d\n"), m_debuggeeProcess, m_debuggeeProcessID, wxProcess::Exists(m_debuggeeProcessID)); fflush(stdout); + // The process's OnTerminate will null m_debuggeeProcess, // but if in destructor it's already NULL and don't send event. *************** *** 619,622 **** --- 621,626 ---- bool wxLuaDebuggerBase::KillDebuggee() { + //wxPrintf(wxT("KillDebuggee the m_debuggeeProcess %p %d exists %d\n"), m_debuggeeProcess, m_debuggeeProcessID, wxProcess::Exists(m_debuggeeProcessID)); fflush(stdout); + if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0)) { *************** *** 625,629 **** //if (p->Exists(m_debuggeeProcessID)) should exist since OnTerminate hasn't been called ! wxProcess::Kill(m_debuggeeProcessID, wxSIGTERM, wxKILL_CHILDREN); } else if (m_debuggeeProcess != NULL) // error starting process? --- 629,633 ---- //if (p->Exists(m_debuggeeProcessID)) should exist since OnTerminate hasn't been called ! wxProcess::Kill(m_debuggeeProcessID, wxSIGKILL, wxKILL_CHILDREN); } else if (m_debuggeeProcess != NULL) // error starting process? |