debuggerInit method
void
debuggerInit()
Initializes the local development debugger system. Sets up a WebSocket-based debugging interface that provides:
- Real-time route inspection and listing
- Language file reloading capabilities
- Server restart functionality
- Memory usage monitoring
- Error and log message broadcasting
- Console widget for debugging
The debugger is only initialized when both
config.enableLocalDebuggerandconfig.isLocalDebugare true, and prevents duplicate initialization. Automatically adds debugging routes to the server: /debugger- Main debugger interface/debugger/console.js- Console widget JavaScript
Implementation
void debuggerInit() {
if (config.enableLocalDebugger && config.isLocalDebug && !_isDebuggerInit) {
_isDebuggerInit = true;
debugger = SocketManager(
this,
routes: {
'get_routes': SocketEvent(onMessage: (socket, data) async {
var res = await exploreAllRoutes();
debugger?.sendToAll({
'routes': res,
}, path: 'get_routes');
}),
'update_languages': SocketEvent(onMessage: (socket, data) async {
appLanguages = await MultiLanguage(
languagePath: config.languagePath,
source: config.languageSource,
dartLanguages: config.dartLanguages,
).init();
await debugger?.sendToAll(
{'message': 'Language updated'},
path: 'update_languages',
);
}),
'restart': SocketEvent(onMessage: (socket, data) async {
await debugger?.sendToAll({}, path: 'restartStarted');
await stop(force: true);
await start();
await getAllRoutes();
}),
'get_data': SocketEvent(onMessage: (socket, data) async {
debugger?.sendToAll({
'error': {
'params': socket.rq.getParams(),
'uri': socket.rq.uri.toString(),
'buffer': socket.rq.buffer,
'headers': socket.rq.headers.toString().split(';'),
'session_cookies': socket.rq.getAllSession(),
},
}, path: 'console');
}),
'reinit': SocketEvent(onMessage: (socket, data) async {
print("Server is restarting...");
await restart();
await getAllRoutes();
}),
},
);
Console.onError.add((error, type) {
debugger?.sendToAll({
'error': error.toString(),
'type': type,
}, path: "console");
});
Console.onLogging.add((error, type) {
debugger?.sendToAll({
'message': error.toString(),
'type': type,
}, path: "log");
});
FinchCron(
schedule: FinchCron.evrySecond(1),
delayFirstMoment: false,
onCron: (index, cron) async {
debugger?.sendToAll({
'memory': ConvertSize.toLogicSizeString(ProcessInfo.currentRss),
'max_memory': ConvertSize.toLogicSizeString(ProcessInfo.maxRss),
}, path: "updateMemory");
},
).start();
_webRoutes.add((Request rq) async {
rq.buffer.writeln(
"<script src='${rq.url('/debugger/console.js')}'></script>");
return [
FinchRoute(
path: 'debugger',
index: () async {
await debugger?.requestHandle(rq, userId: "LOCAL_USER");
debugger?.sendToAll({
'type': 'user_connected',
'userId': "LOCAL_USER",
});
return rq.renderSocket();
},
children: [
FinchRoute(
path: 'console.js',
index: () async {
return rq.renderString(
text: ConsoleWidget().layout,
contentType: ContentType(
'text',
'javascript',
charset: 'utf-8',
),
);
},
)
],
)
];
});
}
}