1616
1717#include " emmy_debugger/emmy_facade.h"
1818#include < cstdarg>
19+ #include < cstdint>
1920#include " emmy_debugger/proto/socket_server_transporter.h"
2021#include " emmy_debugger/proto/socket_client_transporter.h"
2122#include " emmy_debugger/proto/pipeline_server_transporter.h"
@@ -58,7 +59,7 @@ EmmyFacade::EmmyFacade()
5859 isAPIReady(false ),
5960 isWaitingForIDE(false ),
6061 StartHook(nullptr ),
61- workMode(WorkMode::EmmyCore),
62+ workMode(WorkMode::EmmyCore),
6263 emmyDebuggerManager(std::make_shared<EmmyDebuggerManager>())
6364{
6465}
@@ -102,6 +103,9 @@ bool EmmyFacade::TcpListen(lua_State* L, const std::string& host, int port, std:
102103{
103104 Destroy ();
104105
106+ // 仅仅luajit需要
107+ mainStates.insert (L);
108+
105109 emmyDebuggerManager->AddDebugger (L);
106110
107111 const auto s = std::make_shared<SocketServerTransporter>();
@@ -130,6 +134,9 @@ bool EmmyFacade::TcpConnect(lua_State* L, const std::string& host, int port, std
130134{
131135 Destroy ();
132136
137+ // 仅仅luajit需要
138+ mainStates.insert (L);
139+
133140 emmyDebuggerManager->AddDebugger (L);
134141
135142 const auto c = std::make_shared<SocketClientTransporter>();
@@ -153,6 +160,9 @@ bool EmmyFacade::PipeListen(lua_State* L, const std::string& name, std::string&
153160{
154161 Destroy ();
155162
163+ // 仅仅luajit需要
164+ mainStates.insert (L);
165+
156166 emmyDebuggerManager->AddDebugger (L);
157167
158168 const auto p = std::make_shared<PipelineServerTransporter>();
@@ -166,6 +176,9 @@ bool EmmyFacade::PipeConnect(lua_State* L, const std::string& name, std::string&
166176{
167177 Destroy ();
168178
179+ // 仅仅luajit需要
180+ mainStates.insert (L);
181+
169182 emmyDebuggerManager->AddDebugger (L);
170183
171184 const auto p = std::make_shared<PipelineClientTransporter>();
@@ -229,6 +242,7 @@ int EmmyFacade::OnDisconnect()
229242void EmmyFacade::Destroy ()
230243{
231244 OnDisconnect ();
245+
232246 if (transporter)
233247 {
234248 transporter->Stop ();
@@ -315,8 +329,10 @@ void EmmyFacade::OnInitReq(const rapidjson::Document& document)
315329 for (auto debugger : debuggers)
316330 {
317331 debugger->Start ();
318-
319- debugger->Attach (false );
332+ if (luaVersion != LuaVersion::LUA_JIT)
333+ {
334+ debugger->Attach (false );
335+ }
320336 }
321337}
322338
@@ -591,21 +607,25 @@ void EmmyFacade::Hook(lua_State* L, lua_Debug* ar)
591607 }
592608 else
593609 {
594- debugger = emmyDebuggerManager->AddDebugger (L);
595- install_emmy_core (L);
596- debugger->Start ();
597- debugger->Attach ();
598-
599- // send attached notify
600- rapidjson::Document rspDoc;
601- rspDoc.SetObject ();
602- // fix macosx compiler error,
603- // repidjson 应该有重载决议的错误
604- int64_t state = reinterpret_cast <int64_t >(L);
605- rspDoc.AddMember (" state" , state, rspDoc.GetAllocator ());
606- this ->transporter ->Send (int (MessageCMD::AttachedNotify), rspDoc);
607-
608- debugger->Hook (ar, L);
610+ if (workMode == WorkMode::Attach)
611+ {
612+ debugger = emmyDebuggerManager->AddDebugger (L);
613+ install_emmy_core (L);
614+ // attach的时候能进入这里必然是 connected,所以可以执行start
615+ debugger->Start ();
616+ debugger->Attach ();
617+
618+ // send attached notify
619+ rapidjson::Document rspDoc;
620+ rspDoc.SetObject ();
621+ // fix macosx compiler error,
622+ // repidjson 应该有重载决议的错误
623+ int64_t state = reinterpret_cast <int64_t >(L);
624+ rspDoc.AddMember (" state" , state, rspDoc.GetAllocator ());
625+ this ->transporter ->Send (int (MessageCMD::AttachedNotify), rspDoc);
626+
627+ debugger->Hook (ar, L);
628+ }
609629 }
610630}
611631
0 commit comments