Platform-level script + render debugger / dynamic slicer front-end. 更多...
#include <DevTool.hpp>
类 | |
| struct | ProfileEntry |
| Per-function script profile (line-hook timing). 更多... | |
Public 成员函数 | |
| DevTool (const DevTool &)=delete | |
| DevTool & | operator= (const DevTool &)=delete |
| void | attach (ssq::VM &vm, bool sampleLocals=true) |
| Attach script tracer to VM and enable render tracing. | |
| void | attach (HSQUIRRELVM vm, bool sampleLocals=true) |
| void | attach (eve::Runtime &runtime, bool sampleLocals=true) |
| Attach to a Runtime and route its boundary errors into the slicer. | |
| void | enableRenderTrace (bool on=true) |
| Enable render-flow tracing without a Squirrel VM (C++ / unit tests). | |
| void | detach () |
| void | exposeScriptApi (ssq::VM &vm) |
Expose eve.dev script API (pause/breakpoint/watch/snapshot/AI). | |
| int | startDap (uint16_t port) |
| Start DAP server; returns bound port (0 on failure). | |
| void | stopDap () |
| int | startMcp (uint16_t port) |
| Start MCP server for AI tooling; returns bound port (0 on failure). | |
| void | stopMcp () |
| void | poll () |
| void | drawAiPanel () |
| Draw DevTools AI ImGui panel when visible (call from UI/frame loop). | |
| void | drawConsolePanel () |
| Draw DevTools console ImGui panel when visible (call from UI/frame loop). | |
| void | drawFrameStatsPanel () |
| Draw FPS / frame-time overlay when visible (call from UI/frame loop). | |
| bool | isAttached () const |
| bool | isRuntimeBound () const |
| True when errors also flow through Runtime::setErrorHandler. | |
| bool | renderTraceEnabled () const |
| bool | sampleLocals () const |
| void | setSampleLocals (bool on) |
| CallGraph & | graph () |
| const CallGraph & | graph () const |
| RenderFlow & | renderFlow () |
| const RenderFlow & | renderFlow () const |
| Debugger & | debugger () |
| Snapshot & | snapshot () |
| ScenarioRecorder & | scenario () |
| DebugAdapter & | dap () |
| McpServer & | mcp () |
| AiPanel & | ai () |
| ConsolePanel & | console () |
| FrameStatsPanel & | frameStats () |
| SliceResult | analyzeError (const std::string &errorMessage, const std::vector< std::string > &hintVars={}) const |
| std::string | formatError (const std::string &errorMessage, const std::vector< std::string > &hintVars={}) const |
| const std::string & | lastReport () const |
| const std::string & | lastError () const |
| const SliceResult & | lastSlice () const |
Script-side slice from the last notifyError (empty if none). | |
| const std::unordered_map< std::string, ProfileEntry > & | profile () const |
| void | profileClear () |
| std::string | formatProfileReport () const |
| std::string | notifyError (const std::string &errorMessage, const std::vector< std::string > &hintVars={}) |
| Record an error; includes script slice and render-pipeline slice when enabled. | |
| void | handleDebugEvent (HSQUIRRELVM vm, int type, const char *source, int line, const char *funcname) |
静态 Public 成员函数 | |
| static DevTool & | instance () |
详细描述
Platform-level script + render debugger / dynamic slicer front-end.
When attached (typically via eve run --debug):
- Squirrel: debug hook → CallGraph (call stack + Def/Use data-flow)
- Breakpoints / watches / pause-step via Debugger
- Optional DAP TCP server for the VS Code eve-debug extension
- Optional MCP TCP server for AI agents (tools/resources/prompts)
- EveScript LanguageServer (stdio LSP via
eve language-server, typed API for tests) - Script-state Snapshot (engine treated as stateless)
- Render: installs RenderFlow as eve::debug::IRenderTracer
- on errors: Weiser-style backward slice for script and/or render pipeline
- AI panel: session log + optional ImGui "AI / MCP" window
Not shipped on Android/iOS trimmed runtimes (EVDevTools is desktop-only).
在文件 DevTool.hpp 第 50 行定义.
构造及析构函数说明
◆ DevTool()
|
delete |
成员函数说明
◆ ai()
| AiPanel & eve::dev::DevTool::ai | ( | ) |
◆ analyzeError()
| SliceResult eve::dev::DevTool::analyzeError | ( | const std::string & | errorMessage, |
| const std::vector< std::string > & | hintVars = {} |
||
| ) | const |
◆ attach() [1/3]
| void eve::dev::DevTool::attach | ( | eve::Runtime & | runtime, |
| bool | sampleLocals = true |
||
| ) |
Attach to a Runtime and route its boundary errors into the slicer.
- 参数
-
runtime Runtime whose errors (compile/reflect/unload, plus any uncaught error the VM hook did not already report) are forwarded to notifyError(). sampleLocals Whether to sample frame locals for data-flow slicing.
在文件 DevTool.cpp 第 139 行定义.
引用了 attach(), error, notifyError() , 以及 sampleLocals().
◆ attach() [2/3]
| void eve::dev::DevTool::attach | ( | HSQUIRRELVM | vm, |
| bool | sampleLocals = true |
||
| ) |
在文件 DevTool.cpp 第 177 行定义.
引用了 eve::dev::ConsolePanel::addLog(), eve::dev::ConsolePanel::attach(), eve::dev::Debugger::attach(), eve::dev::CallGraph::clear(), eve::dev::clearScriptTools(), detach(), eve::dev::ConsolePanel::instance(), eve::dev::Debugger::instance(), sampleLocals(), eve::dev::Debugger::setCallGraph(), eve::dev::Debugger::setPump() , 以及 vm.
◆ attach() [3/3]
| void eve::dev::DevTool::attach | ( | ssq::VM & | vm, |
| bool | sampleLocals = true |
||
| ) |
Attach script tracer to VM and enable render tracing.
在文件 DevTool.cpp 第 137 行定义.
引用了 attach(), sampleLocals() , 以及 vm.
◆ console()
| ConsolePanel & eve::dev::DevTool::console | ( | ) |
◆ dap()
|
inline |
在文件 DevTool.hpp 第 104 行定义.
被这些函数引用 exposeScriptApi(), handleDebugEvent() , 以及 notifyError().
◆ debugger()
|
inline |
在文件 DevTool.hpp 第 101 行定义.
被这些函数引用 exposeScriptApi() , 以及 notifyError().
◆ detach()
| void eve::dev::DevTool::detach | ( | ) |
在文件 DevTool.cpp 第 214 行定义.
引用了 eve::dev::ScenarioRecorder::cancel(), eve::dev::clearScriptTools(), eve::dev::ConsolePanel::detach(), eve::dev::Debugger::detach(), eve::dev::ConsolePanel::instance(), eve::dev::Debugger::instance(), eve::dev::ScenarioRecorder::instance(), eve::dev::Debugger::setCallGraph(), eve::Runtime::setErrorHandler(), stopDap() , 以及 stopMcp().
被这些函数引用 attach() , 以及 eve::cmd::Cmdline::Run().
◆ drawAiPanel()
| void eve::dev::DevTool::drawAiPanel | ( | ) |
Draw DevTools AI ImGui panel when visible (call from UI/frame loop).
在文件 DevTool.cpp 第 262 行定义.
引用了 eve::dev::AiPanel::drawImGui() , 以及 eve::dev::AiPanel::instance().
被这些函数引用 exposeScriptApi().
◆ drawConsolePanel()
| void eve::dev::DevTool::drawConsolePanel | ( | ) |
Draw DevTools console ImGui panel when visible (call from UI/frame loop).
在文件 DevTool.cpp 第 264 行定义.
引用了 eve::dev::ConsolePanel::drawImGui() , 以及 eve::dev::ConsolePanel::instance().
被这些函数引用 exposeScriptApi().
◆ drawFrameStatsPanel()
| void eve::dev::DevTool::drawFrameStatsPanel | ( | ) |
Draw FPS / frame-time overlay when visible (call from UI/frame loop).
在文件 DevTool.cpp 第 266 行定义.
引用了 eve::dev::FrameStatsPanel::drawImGui() , 以及 eve::dev::FrameStatsPanel::instance().
被这些函数引用 exposeScriptApi().
◆ enableRenderTrace()
| void eve::dev::DevTool::enableRenderTrace | ( | bool | on = true | ) |
Enable render-flow tracing without a Squirrel VM (C++ / unit tests).
在文件 DevTool.cpp 第 170 行定义.
◆ exposeScriptApi()
| void eve::dev::DevTool::exposeScriptApi | ( | ssq::VM & | vm | ) |
Expose eve.dev script API (pause/breakpoint/watch/snapshot/AI).
在文件 DevTool.cpp 第 268 行定义.
引用了 eve::dev::ConsolePanel::addError(), eve::dev::ConsolePanel::addInfo(), eve::dev::ConsolePanel::addLog(), eve::dev::AiPanel::addNote(), eve::dev::ConsolePanel::addWarn(), eve::dev::Debugger::addWatch(), ai(), eve::dev::ScenarioRecorder::begin(), begin, eve::dev::Debugger::breakOnError(), eve::dev::Debugger::breakpointsEnabled(), eve::dev::ScenarioRecorder::cancel(), eve::dev::Snapshot::capture(), eve::dev::ConsolePanel::clear(), eve::dev::Debugger::clearBreakpoint(), eve::dev::Debugger::clearBreakpoints(), eve::dev::FrameStatsPanel::clearEntityCount(), eve::dev::AiPanel::clearLog(), eve::dev::Snapshot::clearRoots(), eve::dev::Debugger::clearWatches(), condition, console(), dap(), debugger(), drawAiPanel(), drawConsolePanel(), drawFrameStatsPanel(), end, eve::dev::FrameStatsPanel::entityCount(), eve::dev::ScenarioRecorder::errorReport(), eve::dev::ConsolePanel::eval(), eve::dev::Debugger::evaluate(), eve::executeGameplayControlJson(), eve::dev::executeSoftRestart(), eve::dev::exposeMcpScriptApi(), eve::dev::FrameStatsPanel::format(), eve::dev::ConsolePanel::format(), eve::dev::AiPanel::formatLog(), formatProfileReport(), eve::dev::FrameStatsPanel::fps(), eve::dev::FrameStatsPanel::frameMs(), eve::dev::ScenarioRecorder::framesRemaining(), eve::dev::FrameStatsPanel::hasEntityCount(), info, eve::dev::AiPanel::instance(), eve::dev::ConsolePanel::instance(), eve::dev::FrameStatsPanel::instance(), eve::dev::ReloadSession::instance(), eve::dev::ScenarioRecorder::instance(), eve::dev::Snapshot::instance(), eve::dev::Debugger::isPaused(), eve::dev::AiPanel::isVisible(), eve::dev::ConsolePanel::isVisible(), eve::dev::FrameStatsPanel::isVisible(), lastError(), line, lines, eve::dev::Snapshot::loadFile(), eve::dev::ScenarioRecorder::markFrame(), eve::dev::Snapshot::markRoot(), eve::dev::Snapshot::markTransientRoot(), eve::dev::AiPanel::mcpConnected(), eve::dev::AiPanel::mcpPort(), eve::dev::Debugger::mode(), n, name, eve::dev::DebugAdapter::notifyContinued(), notifyError(), eve::dev::Debugger::notifyFrameDone(), eve::dev::DebugAdapter::notifyStopped(), ok, path, eve::dev::Debugger::pause(), eve::dev::Debugger::pauseAt(), eve::dev::PauseKey, poll(), profileClear(), eve::dev::ConsolePanel::recent(), eve::dev::ScenarioRecorder::recording(), eve::dev::Debugger::refreshWatches(), eve::dev::DebugAdapter::registerSource(), eve::dev::SoftRestartRequest::reloadScripts, eve::dev::Debugger::removeWatch(), request, eve::dev::resetNativeStateProviders(), eve::dev::resourceCacheCount(), eve::dev::SoftRestartReport::resourceCountAfter, eve::dev::Snapshot::restore(), eve::dev::Debugger::resume(), eve::dev::Snapshot::rootsFor(), eve::dev::FrameStatsPanel::sample(), eve::dev::Snapshot::saveFile(), eve::dev::SoftRestartReport::scriptsReloaded, eve::dev::Debugger::setBreakOnError(), eve::dev::Debugger::setBreakpoint(), eve::dev::Debugger::setBreakpointsEnabled(), eve::dev::FrameStatsPanel::setEntityCount(), eve::dev::AiPanel::setVisible(), eve::dev::ConsolePanel::setVisible(), eve::dev::FrameStatsPanel::setVisible(), eve::dev::Debugger::shouldRunUpdate(), eve::dev::Snapshot, snapshot(), source, eve::dev::ScenarioRecorder::stageFrame(), status, eve::statusCodeName(), eve::dev::AiPanel::statusLine(), eve::dev::Debugger::step(), eve::dev::StepFrame, eve::dev::Debugger::stepFrame(), eve::dev::Debugger::stepInto(), eve::dev::Debugger::stepLine(), eve::dev::Debugger::stepOut(), eve::dev::Debugger::stepOver(), text, eve::dev::AiPanel::toggleVisible(), eve::dev::ConsolePanel::toggleVisible(), eve::dev::FrameStatsPanel::toggleVisible(), eve::dev::Snapshot::transientRoots(), eve::dev::Snapshot::unmarkRoot(), eve::dev::Snapshot::unmarkTransientRoot(), eve::dev::VariableInfo::value , 以及 vm.
◆ formatError()
| std::string eve::dev::DevTool::formatError | ( | const std::string & | errorMessage, |
| const std::vector< std::string > & | hintVars = {} |
||
| ) | const |
◆ formatProfileReport()
| std::string eve::dev::DevTool::formatProfileReport | ( | ) | const |
◆ frameStats()
| FrameStatsPanel & eve::dev::DevTool::frameStats | ( | ) |
在文件 DevTool.cpp 第 255 行定义.
◆ graph() [1/2]
|
inline |
在文件 DevTool.hpp 第 97 行定义.
被这些函数引用 eve::dev::mcpCallgraphEvents() , 以及 eve::dev::mcpCallgraphStackDepth().
◆ graph() [2/2]
|
inline |
在文件 DevTool.hpp 第 98 行定义.
◆ handleDebugEvent()
| void eve::dev::DevTool::handleDebugEvent | ( | HSQUIRRELVM | vm, |
| int | type, | ||
| const char * | source, | ||
| int | line, | ||
| const char * | funcname | ||
| ) |
在文件 DevTool.cpp 第 586 行定义.
引用了 eve::dev::CallGraph::currentStack(), dap(), eve::dev::SourceLoc::function, eve::dev::Debugger::instance(), eve::dev::SourceLoc::line, line, eve::dev::DebugAdapter::notifyStopped(), eve::dev::Debugger::onCall(), eve::dev::CallGraph::onLine(), eve::dev::Debugger::onReturn(), eve::dev::Debugger::refreshWatches(), eve::dev::SourceLoc::source, source, type, vm , 以及 eve::dev::Debugger::waitWhilePaused().
◆ instance()
|
static |
◆ isAttached()
|
inline |
在文件 DevTool.hpp 第 90 行定义.
被这些函数引用 eve::dev::mcpDevAttached().
◆ isRuntimeBound()
|
inline |
True when errors also flow through Runtime::setErrorHandler.
在文件 DevTool.hpp 第 92 行定义.
◆ lastError()
|
inline |
在文件 DevTool.hpp 第 117 行定义.
被这些函数引用 exposeScriptApi().
◆ lastReport()
|
inline |
在文件 DevTool.hpp 第 116 行定义.
被这些函数引用 eve::dev::mcpLastReport().
◆ lastSlice()
|
inline |
Script-side slice from the last notifyError (empty if none).
在文件 DevTool.hpp 第 119 行定义.
◆ mcp()
| McpServer & eve::dev::DevTool::mcp | ( | ) |
在文件 DevTool.cpp 第 249 行定义.
◆ notifyError()
| std::string eve::dev::DevTool::notifyError | ( | const std::string & | errorMessage, |
| const std::vector< std::string > & | hintVars = {} |
||
| ) |
Record an error; includes script slice and render-pipeline slice when enabled.
在文件 DevTool.cpp 第 807 行定义.
引用了 analyzeError(), dap(), debugger(), eve::dev::SourceLoc::empty(), eve::dev::CallGraph::EventsView::empty(), eve::dev::RenderFlow::EventsView::empty(), eve::dev::RenderFlow::error(), eve::dev::CallGraph::events(), eve::dev::RenderFlow::events(), eve::dev::Exception, formatError(), eve::dev::RenderFlow::formatErrorReport(), eve::script::ScriptErrorContext::function, eve::dev::SourceLoc::function, eve::dev::RenderVision::instance(), eve::dev::ScenarioRecorder::instance(), eve::script::ScriptErrorContext::line, eve::dev::SourceLoc::line, eve::script::ScriptErrorContext::message, eve::dev::RenderVision::notifyPending(), eve::dev::DebugAdapter::notifyStopped(), eve::dev::Debugger::pauseAt(), eve::script::peekLastScriptError(), eve::dev::ScenarioRecorder::setErrorInfo(), eve::script::ScriptErrorContext::source, eve::dev::SourceLoc::source, eve::script::ScriptErrorContext::stack , 以及 eve::dev::Debugger::waitWhilePaused().
被这些函数引用 attach(), exposeScriptApi() , 以及 eve::cmd::Cmdline::Run().
◆ operator=()
◆ poll()
| void eve::dev::DevTool::poll | ( | ) |
◆ profile()
|
inline |
在文件 DevTool.hpp 第 127 行定义.
◆ profileClear()
|
inline |
在文件 DevTool.hpp 第 128 行定义.
被这些函数引用 exposeScriptApi().
◆ renderFlow() [1/2]
|
inline |
在文件 DevTool.hpp 第 99 行定义.
◆ renderFlow() [2/2]
|
inline |
在文件 DevTool.hpp 第 100 行定义.
◆ renderTraceEnabled()
|
inline |
在文件 DevTool.hpp 第 93 行定义.
◆ sampleLocals()
|
inline |
在文件 DevTool.hpp 第 94 行定义.
◆ scenario()
|
inline |
在文件 DevTool.hpp 第 103 行定义.
◆ setSampleLocals()
|
inline |
在文件 DevTool.hpp 第 95 行定义.
◆ snapshot()
|
inline |
在文件 DevTool.hpp 第 102 行定义.
被这些函数引用 exposeScriptApi().
◆ startDap()
| int eve::dev::DevTool::startDap | ( | uint16_t | port | ) |
Start DAP server; returns bound port (0 on failure).
在文件 DevTool.cpp 第 241 行定义.
引用了 eve::dev::DebugAdapter::instance() , 以及 eve::dev::DebugAdapter::listen().
◆ startMcp()
| int eve::dev::DevTool::startMcp | ( | uint16_t | port | ) |
Start MCP server for AI tooling; returns bound port (0 on failure).
在文件 DevTool.cpp 第 245 行定义.
引用了 eve::dev::McpServer::instance() , 以及 eve::dev::McpServer::listen().
◆ stopDap()
| void eve::dev::DevTool::stopDap | ( | ) |
在文件 DevTool.cpp 第 243 行定义.
引用了 eve::dev::DebugAdapter::instance() , 以及 eve::dev::DebugAdapter::stop().
被这些函数引用 detach().
◆ stopMcp()
| void eve::dev::DevTool::stopMcp | ( | ) |
在文件 DevTool.cpp 第 247 行定义.
引用了 eve::dev::McpServer::instance() , 以及 eve::dev::McpServer::stop().
被这些函数引用 detach().
该类的文档由以下文件生成:
- src/engine/devtools/DevTool.hpp
- src/engine/devtools/DevTool.cpp