aboutsummaryrefslogtreecommitdiffstats
path: root/tools
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 /tools
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.
Diffstat (limited to 'tools')
-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");