Skip to content

Commit ce653b9

Browse files
committed
分离出proto, 整理代码
1 parent 2d65488 commit ce653b9

File tree

12 files changed

+311
-135
lines changed

12 files changed

+311
-135
lines changed

emmy_debugger/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ target_sources(emmy_debugger
3838
src/debugger/extension_point.cpp
3939

4040
#src/proto
41-
src/proto/proto.cpp
41+
src/proto/proto.cpp
42+
src/proto/proto_handler.cpp
4243

4344
#src/arena
4445
src/arena/arena.cpp

emmy_debugger/include/emmy_debugger/debugger/emmy_debugger.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@
3131
using Executor = std::function<void(lua_State* L)>;
3232
class EmmyDebuggerManager;
3333

34-
class Debugger : public std::enable_shared_from_this<Debugger>
34+
class Debugger: public std::enable_shared_from_this<Debugger>
3535
{
3636
public:
37-
Debugger(lua_State* L, std::shared_ptr<EmmyDebuggerManager> manager);
37+
Debugger(lua_State* L, EmmyDebuggerManager* manager);
3838
~Debugger();
3939

4040
void Start();
@@ -86,7 +86,7 @@ class Debugger : public std::enable_shared_from_this<Debugger>
8686
* 设置当前状态机,他的锁由doAction负责
8787
*/
8888
void SetHookState(std::shared_ptr<HookState> newState);
89-
std::shared_ptr<EmmyDebuggerManager> GetEmmyDebuggerManager();
89+
EmmyDebuggerManager* GetEmmyDebuggerManager();
9090

9191
private:
9292
std::shared_ptr<BreakPoint> FindBreakPoint(lua_Debug* ar);
@@ -109,7 +109,7 @@ class Debugger : public std::enable_shared_from_this<Debugger>
109109
lua_State* currentL;
110110
lua_State* mainL;
111111

112-
std::shared_ptr<EmmyDebuggerManager> manager;
112+
EmmyDebuggerManager* manager;
113113

114114
// 取消递归锁的使用
115115
std::mutex hookStateMtx;

emmy_debugger/include/emmy_debugger/debugger/emmy_debugger_manager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include "emmy_debugger/api/lua_api.h"
1212

1313

14-
class EmmyDebuggerManager : public std::enable_shared_from_this<EmmyDebuggerManager>
14+
class EmmyDebuggerManager
1515
{
1616
public:
1717
using UniqueIdentifyType = unsigned long long;

emmy_debugger/include/emmy_debugger/emmy_facade.h

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "emmy_debugger/transporter/transporter.h"
2323
#include "emmy_debugger/api/lua_api.h"
2424
#include "emmy_debugger/debugger/emmy_debugger_manager.h"
25+
#include "proto/proto_handler.h"
2526

2627
enum class LogType
2728
{
@@ -61,14 +62,13 @@ class EmmyFacade
6162
int OnConnect(bool suc);
6263
int OnDisconnect();
6364
void WaitIDE(bool force = false, int timeout = 0);
64-
void OnReceiveMessage(const nlohmann::json document);
6565
bool OnBreak(std::shared_ptr<Debugger> debugger);
6666
void Destroy();
6767
void OnEvalResult(std::shared_ptr<EvalContext> context);
6868
void SendLog(LogType type, const char* fmt, ...);
6969
void OnLuaStateGC(lua_State* L);
7070
void Hook(lua_State* L, lua_Debug* ar);
71-
std::shared_ptr<EmmyDebuggerManager> GetDebugManager() const;
71+
EmmyDebuggerManager& GetDebugManager();
7272

7373
std::shared_ptr<Debugger> GetDebugger(lua_State* L);
7474

@@ -82,17 +82,19 @@ class EmmyFacade
8282

8383
void SetWorkMode(WorkMode mode);
8484
WorkMode GetWorkMode();
85+
86+
void InitReq(InitParams &params);
87+
88+
void ReadyReq();
89+
90+
void OnReceiveMessage(nlohmann::json document);
91+
92+
// void Remove
93+
8594
// Start hook 作为成员存在
8695
std::function<void()> StartHook;
8796

8897
private:
89-
void OnInitReq(const nlohmann::json document);
90-
void OnReadyReq(const nlohmann::json document);
91-
void OnAddBreakPointReq(const nlohmann::json document);
92-
void OnRemoveBreakPointReq(const nlohmann::json document);
93-
void OnActionReq(const nlohmann::json document);
94-
void OnEvalReq(const nlohmann::json document);
95-
9698
std::mutex waitIDEMutex;
9799
std::condition_variable waitIDECV;
98100

@@ -103,12 +105,14 @@ class EmmyFacade
103105
bool isWaitingForIDE;
104106
WorkMode workMode;
105107

106-
std::shared_ptr<EmmyDebuggerManager> emmyDebuggerManager;
107-
108108
// 表示使用了tcplisten tcpConnect 的states
109109
std::set<lua_State*> mainStates;
110110

111111
std::atomic<bool> readyHook;
112+
113+
ProtoHandler _protoHandler;
114+
115+
EmmyDebuggerManager _emmyDebuggerManager;
112116
};
113117

114118

emmy_debugger/include/emmy_debugger/proto/proto.h

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323

2424
enum class DebugAction {
25-
Break,
25+
None = -1,
26+
Break = 0,
2627
Continue,
2728
StepOver,
2829
StepIn,
@@ -49,6 +50,16 @@ class JsonProtocol {
4950
virtual void Deserialize(nlohmann::json json);
5051
};
5152

53+
class InitParams : public JsonProtocol {
54+
public:
55+
std::string emmyHelper;
56+
std::vector<std::string> ext;
57+
58+
virtual nlohmann::json Serialize();
59+
60+
virtual void Deserialize(nlohmann::json json);
61+
};
62+
5263
class BreakPoint : public JsonProtocol {
5364
public:
5465
std::string file;
@@ -63,6 +74,35 @@ class BreakPoint : public JsonProtocol {
6374
void Deserialize(nlohmann::json json) override;
6475
};
6576

77+
class AddBreakpointParams : public JsonProtocol {
78+
public:
79+
bool clear = false;
80+
std::vector<std::shared_ptr<BreakPoint>> breakPoints;
81+
82+
nlohmann::json Serialize() override;
83+
84+
void Deserialize(nlohmann::json json) override;
85+
};
86+
87+
class RemoveBreakpointParams : public JsonProtocol {
88+
public:
89+
std::vector<std::shared_ptr<BreakPoint>> breakPoints;
90+
91+
nlohmann::json Serialize() override;
92+
93+
void Deserialize(nlohmann::json json) override;
94+
};
95+
96+
class ActionParams : public JsonProtocol {
97+
public:
98+
DebugAction action = DebugAction::None;
99+
100+
nlohmann::json Serialize() override;
101+
102+
void Deserialize(nlohmann::json json) override;
103+
};
104+
105+
66106
class Variable : public JsonProtocol {
67107
public:
68108
Variable();
@@ -103,16 +143,27 @@ class EvalContext : public JsonProtocol {
103143
EvalContext();
104144

105145
std::string expr;
146+
std::string value;
106147
std::string error;
107148
int seq = 0;
108149
int stackLevel = 0;
109150
int depth = 0;
110151
int cacheId = 0;
111152
Idx<Variable> result;
112153
bool success = false;
154+
bool setValue = false;
113155
std::shared_ptr<Arena<Variable>> variableArena;
114156

115157
nlohmann::json Serialize() override;
116158

117159
void Deserialize(nlohmann::json json) override;
118160
};
161+
162+
class EvalParams : public JsonProtocol {
163+
public:
164+
std::shared_ptr<EvalContext> ctx;
165+
166+
nlohmann::json Serialize() override;
167+
168+
void Deserialize(nlohmann::json json) override;
169+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
#include "proto.h"
3+
#include "nlohmann/json_fwd.hpp"
4+
5+
class EmmyFacade;
6+
7+
class ProtoHandler {
8+
public:
9+
explicit ProtoHandler(EmmyFacade *owner);
10+
11+
void OnDispatch(nlohmann::json params);
12+
13+
private:
14+
void OnInitReq(InitParams &params);
15+
16+
void OnReadyReq();
17+
18+
void OnAddBreakPointReq(AddBreakpointParams &params);
19+
20+
void OnRemoveBreakPointReq(RemoveBreakpointParams &params);
21+
22+
void OnActionReq(ActionParams& params);
23+
24+
void OnEvalReq(EvalParams& params);
25+
26+
EmmyFacade *_owner;
27+
};

emmy_debugger/src/debugger/emmy_debugger.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void WaitConnectedHook(lua_State *L, lua_Debug *ar) {
3333
// std::lock_guard<std::mutex> lock()
3434
}
3535

36-
Debugger::Debugger(lua_State *L, std::shared_ptr<EmmyDebuggerManager> manager)
36+
Debugger::Debugger(lua_State *L, EmmyDebuggerManager *manager)
3737
: currentL(L),
3838
mainL(L),
3939
manager(manager),
@@ -179,7 +179,7 @@ bool Debugger::GetStacks(std::vector<Stack> &stacks) {
179179
}
180180
// C++ 17 only return T&
181181
stacks.emplace_back();
182-
auto& stack = stacks.back();
182+
auto &stack = stacks.back();
183183
stack.file = GetFile(&ar);
184184
stack.functionName = getDebugName(&ar) == nullptr ? "" : getDebugName(&ar);
185185
stack.level = totalLevel++;
@@ -789,7 +789,7 @@ void Debugger::SetHookState(std::shared_ptr<HookState> newState) {
789789
}
790790
}
791791

792-
std::shared_ptr<EmmyDebuggerManager> Debugger::GetEmmyDebuggerManager() {
792+
EmmyDebuggerManager* Debugger::GetEmmyDebuggerManager() {
793793
return manager;
794794
}
795795

@@ -906,10 +906,13 @@ bool Debugger::DoEval(std::shared_ptr<EvalContext> evalContext) {
906906
}
907907
// LOAD AS "return expr"
908908
std::string statement = "return ";
909-
// 如果是 aaa:bbbb 则纠正为aaa.bbbb
910-
909+
if (evalContext->setValue) {
910+
statement = evalContext->expr + " = " + evalContext->value + " return " + evalContext->expr;
911+
} else {
912+
statement.append(evalContext->expr);
913+
}
911914

912-
statement.append(evalContext->expr);
915+
// 如果是 aaa:bbbb 则纠正为aaa.bbbb
913916
int r = luaL_loadstring(L, statement.c_str());
914917
if (r == LUA_ERRSYNTAX) {
915918
evalContext->error = "syntax err: ";

emmy_debugger/src/debugger/emmy_debugger_lib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ bool install_emmy_debugger(struct lua_State* L)
157157
}
158158
#endif
159159
// register helper lib
160-
EmmyFacade::Get().GetDebugManager()->extension.Initialize(L);
160+
EmmyFacade::Get().GetDebugManager().extension.Initialize(L);
161161
handleStateClose(L);
162162
return true;
163163
}

emmy_debugger/src/debugger/emmy_debugger_manager.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44

55
EmmyDebuggerManager::EmmyDebuggerManager()
66
: stateBreak(std::make_shared<HookStateBreak>()),
7+
stateStepOver(std::make_shared<HookStateStepOver>()),
8+
stateStepIn(std::make_shared<HookStateStepIn>()),
9+
stateStepOut(std::make_shared<HookStateStepOut>()),
710
stateContinue(std::make_shared<HookStateContinue>()),
8-
stateStepOver(std::make_shared<HookStateStepOver>()),
911
stateStop(std::make_shared<HookStateStop>()),
10-
stateStepIn(std::make_shared<HookStateStepIn>()),
11-
stateStepOut(std::make_shared<HookStateStepOut>()),
12+
1213
isRunning(false)
1314
{
1415
}
@@ -46,7 +47,7 @@ std::shared_ptr<Debugger> EmmyDebuggerManager::AddDebugger(lua_State* L)
4647
{
4748
if (luaVersion != LuaVersion::LUA_JIT)
4849
{
49-
debugger = std::make_shared<Debugger>(reinterpret_cast<lua_State*>(identify), shared_from_this());
50+
debugger = std::make_shared<Debugger>(reinterpret_cast<lua_State*>(identify), this);
5051
}
5152
else
5253
{
@@ -61,7 +62,7 @@ std::shared_ptr<Debugger> EmmyDebuggerManager::AddDebugger(lua_State* L)
6162
mainState = L;
6263
}
6364

64-
debugger = std::make_shared<Debugger>(mainState, shared_from_this());
65+
debugger = std::make_shared<Debugger>(mainState, this);
6566
}
6667
debuggers.insert({identify, debugger});
6768
}

0 commit comments

Comments
 (0)