aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-10-28 23:05:15 +0100
committerKim Alvefur <zash@zash.se>2020-10-28 23:05:15 +0100
commit4d9e30aff34d5c37c4a43e7ed6af8ed4c8b621ca (patch)
treed0e4f0ad1dc1f7d69c7cae986212b07b111be7c2
parent43ec58831c05914393b9931503d1f32f0ba72549 (diff)
downloadprosody-4d9e30aff34d5c37c4a43e7ed6af8ed4c8b621ca.tar.gz
prosody-4d9e30aff34d5c37c4a43e7ed6af8ed4c8b621ca.zip
tools/linedebug: Print each line of source executed
The extremely verbose debug output. Nice for getting some idea which code runs most often, or where it pauses for no reason etc.
-rw-r--r--tools/linedebug.lua18
1 files changed, 18 insertions, 0 deletions
diff --git a/tools/linedebug.lua b/tools/linedebug.lua
new file mode 100644
index 00000000..96214cc8
--- /dev/null
+++ b/tools/linedebug.lua
@@ -0,0 +1,18 @@
+local data = {}
+local getinfo = debug.getinfo;
+local function linehook(ev, li)
+ local S = getinfo(2, "S");
+ if S and S.source and S.source:match"^@" then
+ local file = S.source:sub(2);
+ local lines = data[file];
+ if not lines then
+ lines = {};
+ data[file] = lines;
+ for line in io.lines(file) do
+ lines[#lines+1] = line;
+ end
+ end
+ io.stderr:write(ev, " ", file, " ", li, " ", lines[li], "\n");
+ end
+end
+debug.sethook(linehook, "l");