42 static LuaDebugger*
Get();
49 void Install(lua_State* L);
52 void EnsureInstalled();
60 bool IsInstalled()
const {
return mInstalled; }
65 static bool LoadActivePreference();
66 static void SaveActivePreference(
bool active);
71 void LoadBreakpoints();
72 void SaveBreakpoints();
76 void ToggleBreakpoint(
const std::string& sourceFile,
int line);
77 void SetBreakpoint(
const std::string& sourceFile,
int line);
78 void ClearBreakpoint(
const std::string& sourceFile,
int line);
79 void ClearAllBreakpoints();
80 bool HasBreakpoint(
const std::string& sourceFile,
int line)
const;
81 std::set<int> GetBreakpointsForFile(
const std::string& sourceFile)
const;
84 struct BreakpointEntry { std::string mFile;
int mLine; };
85 std::vector<BreakpointEntry> GetAllBreakpoints()
const;
89 bool IsPaused()
const {
return mPaused.load(); }
90 const std::string& GetPauseMessage()
const {
return mPauseMessage; }
91 const std::string& GetPauseFile()
const {
return mPauseFile; }
92 int GetPauseLine()
const {
return mPauseLine; }
94 void RequestContinue();
99 void ResetTransientState();
104 static int LuaBreakBinding(lua_State* L);
109 static int LuaSnapshotBinding(lua_State* L);
116 std::string mFuncName;
118 int mCurrentLine = -1;
124 std::string mTypeStr;
125 std::string mValueStr;
127 void CaptureSnapshot(lua_State* L,
int startLevel = 0);
129 const std::vector<StackFrame>& GetCallStack()
const {
return mCallStack; }
133 enum class VarKind {
Local, Upvalue };
134 std::vector<LocalVar> GetSnapshotVars(
int frameIndex, VarKind kind)
const;
138 static void OnHookTrampoline(lua_State* L, lua_Debug* ar);
144 static const char* GetPauseSentinel();
147 static std::string NormalizeSource(
const char* luaSource);
151 static bool IsLuaPandaActive(lua_State* L);
154 LuaDebugger() =
default;
156 void OnHook(lua_State* L, lua_Debug* ar);
161 void EnterPaused(lua_State* L, lua_Debug* ar,
const char* optionalMessage,
int snapshotStartLevel = 0);
167 void EnterPausedSoft(lua_State* L, lua_Debug* ar,
const char* optionalMessage,
int snapshotStartLevel = 0);
170 static std::string FormatLuaValue(lua_State* L,
int idx);
172 static LuaDebugger* sInstance;
174 void InstallNow(lua_State* L);
176 bool mInstalled =
false;
177 bool mDeferred =
false;
178 bool mFirstHookLogged =
false;
179 lua_State* mL =
nullptr;
187 bool mSavedCursorShown =
true;
188 bool mSavedCursorLocked =
false;
189 bool mSavedCursorTrapped =
false;
190 bool mSavedGamePreviewCapture =
false;
191 bool mSavedCursorValid =
false;
193 void FreeCursorForInspection();
194 void RestoreCursor();
196 mutable std::mutex mBreakpointMutex;
197 std::map<std::string, std::set<int>> mBreakpoints;
199 std::atomic<bool> mPaused{
false};
200 std::string mPauseMessage;
201 std::string mPauseFile;
205 std::vector<StackFrame> mCallStack;
207 std::vector<std::vector<LocalVar>> mFrameLocals;
208 std::vector<std::vector<LocalVar>> mFrameUpvalues;
212 bool mSkipOnceArmed =
false;
213 std::string mSkipOnceFile;
214 int mSkipOnceLine = -1;
220 bool mSkipBreakOnceArmed =
false;
221 std::string mSkipBreakFile;
222 int mSkipBreakLine = -1;
bool IsPaused()
Definition Engine.cpp:2021