From 811c5d7aeb0b76494d78efe61e418f574c310ec0 Mon Sep 17 00:00:00 2001 From: AcherTT <937889516@qq.com> Date: Fri, 21 Jun 2024 18:21:25 +0800 Subject: [PATCH] Add debug script command (#13289) Add two new debug commands for outputing script. 1. `DEBUG SCRIPT LIST` Output all scripts. 2. `DEBUG SCRIPT ` Output a specific script. Close #3846 --- src/debug.c | 24 ++++++++++++++++++++++++ src/eval.c | 4 ++++ src/script.h | 1 + 3 files changed, 29 insertions(+) diff --git a/src/debug.c b/src/debug.c index 4b5f73061..b774ccc65 100644 --- a/src/debug.c +++ b/src/debug.c @@ -15,6 +15,7 @@ #include "fpconv_dtoa.h" #include "cluster.h" #include "threads_mngr.h" +#include "script.h" #include #include @@ -1013,6 +1014,29 @@ NULL } else if (!strcasecmp(c->argv[1]->ptr, "dict-resizing") && c->argc == 3) { server.dict_resizing = atoi(c->argv[2]->ptr); addReply(c, shared.ok); + } else if (!strcasecmp(c->argv[1]->ptr,"script") && c->argc == 3) { + if (!strcasecmp(c->argv[2]->ptr,"list")) { + dictIterator *di = dictGetIterator(getLuaScripts()); + dictEntry *de; + while ((de = dictNext(di)) != NULL) { + luaScript *script = dictGetVal(de); + sds *sha = dictGetKey(de); + serverLog(LL_WARNING, "SCRIPT SHA: %s\n%s", (char*)sha, (char*)script->body->ptr); + } + dictReleaseIterator(di); + } else if (sdslen(c->argv[2]->ptr) == 40) { + dictEntry *de; + if ((de = dictFind(getLuaScripts(), c->argv[2]->ptr)) == NULL) { + addReplyErrorObject(c, shared.noscripterr); + return; + } + luaScript *script = dictGetVal(de); + serverLog(LL_WARNING, "SCRIPT SHA: %s\n%s", (char*)c->argv[2]->ptr, (char*)script->body->ptr); + } else { + addReplySubcommandSyntaxError(c); + return; + } + addReply(c,shared.ok); } else if(!handleDebugClusterCommand(c)) { addReplySubcommandSyntaxError(c); return; diff --git a/src/eval.c b/src/eval.c index 02b472098..1cea9e6db 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1737,3 +1737,7 @@ void luaLdbLineHook(lua_State *lua, lua_Debug *ar) { rctx->start_time = getMonotonicUs(); } } + +dict *getLuaScripts(void) { + return lctx.lua_scripts; +} diff --git a/src/script.h b/src/script.h index 12d01f754..8d604e493 100644 --- a/src/script.h +++ b/src/script.h @@ -74,6 +74,7 @@ extern scriptFlag scripts_flags_def[]; void luaEnvInit(void); lua_State *createLuaState(void); +dict *getLuaScripts(void); uint64_t scriptFlagsToCmdFlags(uint64_t cmd_flags, uint64_t script_flags); int scriptPrepareForRun(scriptRunCtx *r_ctx, client *engine_client, client *caller, const char *funcname, uint64_t script_flags, int ro); void scriptResetRun(scriptRunCtx *r_ctx);