From: Sergey Voinov <sergeiv@tarantool.org> To: tarantool-patches@dev.tarantool.org, Alexander Turenko <alexander.turenko@tarantool.org> Subject: [Tarantool-patches] [PATCH] Increase limits for debug.traceback Date: Fri, 13 Dec 2019 11:56:09 +0300 [thread overview] Message-ID: <20191213085609.2516-1-sergeiv@tarantool.org> (raw) Currently debug.traceback cuts out path prefixes and removes intermediate frames. This makes it harder to debug and navigate to files right from terminal. This change increases traceback limits to 25 stack frames and maximum source file name length to 128 characters. Closes: #4581 --- issue: https://github.com/tarantool/tarantool/issues/4581 branch: https://github.com/tarantool/luajit/tree/servoin/gh-4581-debug-limits src/lj_debug.c | 8 ++-- src/luaconf.h | 5 ++- test/tarantool-4581-traceback.result | 55 ++++++++++++++++++++++++++ test/tarantool-4581-traceback.test.lua | 24 +++++++++++ 4 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 test/tarantool-4581-traceback.result create mode 100755 test/tarantool-4581-traceback.test.lua diff --git a/src/lj_debug.c b/src/lj_debug.c index 73bd196..090ffaa 100644 --- a/src/lj_debug.c +++ b/src/lj_debug.c @@ -332,11 +332,11 @@ void lj_debug_shortname(char *out, GCstr *str, BCLine line) strcpy(out, src); } else { /* Output [string "string"] or [builtin:name]. */ size_t len; /* Length, up to first control char. */ - for (len = 0; len < LUA_IDSIZE-12; len++) + for (len = 0; len < LUA_IDSIZE_ERR-12; len++) if (((const unsigned char *)src)[len] < ' ') break; strcpy(out, line == ~(BCLine)0 ? "[builtin:" : "[string \""); out += 9; if (src[len] != '\0') { /* Must truncate? */ - if (len > LUA_IDSIZE-15) len = LUA_IDSIZE-15; + if (len > LUA_IDSIZE_ERR-15) len = LUA_IDSIZE_ERR-15; strncpy(out, src, len); out += len; strcpy(out, "..."); out += 3; } else { @@ -651,8 +651,8 @@ void lj_debug_dumpstack(lua_State *L, SBuf *sb, const char *fmt, int depth) #endif /* Number of frames for the leading and trailing part of a traceback. */ -#define TRACEBACK_LEVELS1 12 -#define TRACEBACK_LEVELS2 10 +#define TRACEBACK_LEVELS1 25 +#define TRACEBACK_LEVELS2 25 LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, int level) diff --git a/src/luaconf.h b/src/luaconf.h index 60cb928..c8fff22 100644 --- a/src/luaconf.h +++ b/src/luaconf.h @@ -110,8 +110,9 @@ #endif /* Note: changing the following defines breaks the Lua 5.1 ABI. */ -#define LUA_INTEGER ptrdiff_t -#define LUA_IDSIZE 60 /* Size of lua_Debug.short_src. */ +#define LUA_INTEGER ptrdiff_t +#define LUA_IDSIZE 128 /* Size of lua_Debug.short_src. */ +#define LUA_IDSIZE_ERR 60 /* Size of error message */ /* ** Size of lauxlib and io.* on-stack buffers. Weird workaround to avoid using ** unreasonable amounts of stack space, but still retain ABI compatibility. diff --git a/test/tarantool-4581-traceback.result b/test/tarantool-4581-traceback.result new file mode 100644 index 0000000..018ceec --- /dev/null +++ b/test/tarantool-4581-traceback.result @@ -0,0 +1,55 @@ +TAP version 13 +1..1 +recursion limit reached! +stack traceback: +tarantool-4581-traceback.test.lua:13: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' + ... +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:17: in function 'frec' +tarantool-4581-traceback.test.lua:22: in main chunk +ok - nil diff --git a/test/tarantool-4581-traceback.test.lua b/test/tarantool-4581-traceback.test.lua new file mode 100755 index 0000000..8003665 --- /dev/null +++ b/test/tarantool-4581-traceback.test.lua @@ -0,0 +1,24 @@ +#!/usr/bin/env tarantool + +--- +--- gh-4581: Increase limits for debug.traceback +--- + +local test = require('tap').test('traceback test') +test:plan(1) + +-- Recursive function which generates stack frames for debug.traceback +function frec(rec_limit) + if rec_limit <= 0 then + local output = debug.traceback('recursion limit reached!') + -- Strip path from the output and print it to stdout + io.write(output:gsub("[^\n]*/", ""), "\n") + else + frec(rec_limit - 1) + end +end + +-- Call debug.traceback with specified recursion depth +output = frec(100) + +test:ok("PASS") -- 2.17.1
next reply other threads:[~2019-12-13 8:56 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-13 8:56 Sergey Voinov [this message] 2019-12-20 12:25 ` Igor Munkin 2020-01-21 8:08 ` Sergey Voinov 2020-01-15 10:17 ` Sergey Ostanevich 2020-01-20 10:22 ` Sergey Voinov 2020-01-22 14:51 Sergey Voinov 2020-01-25 19:35 ` Igor Munkin 2020-02-21 11:00 ` Sergey Ostanevich
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191213085609.2516-1-sergeiv@tarantool.org \ --to=sergeiv@tarantool.org \ --cc=alexander.turenko@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] Increase limits for debug.traceback' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox