clean up some cruft from error callstacks
before: stack traceback: [string "text.lua"]:9: in function 'draw' [string "edit.lua"]:200: in function 'draw' [string "run.lua"]:140: in function 'draw' [string "main.lua"]:162: in function <[string "main.lua"]:155> [C]: in function 'xpcall' [string "app.lua"]:38: in function <[string "app.lua"]:20> [C]: in function 'xpcall' [love "boot.lua"]:370: in function <[love "boot.lua"]:337> after: stack traceback: text.lua:9: in function 'draw' edit.lua:200: in function 'draw' run.lua:140: in function 'draw' main.lua:162: in function <[string "main.lua"]:155> [C]: in function 'xpcall' app.lua:38: in function <[string "app.lua"]:20> [C]: in function 'xpcall' [love "boot.lua"]:370: in function <[love "boot.lua"]:337>
This commit is contained in:
parent
8b70258978
commit
a6738b49c4
23
app.lua
23
app.lua
|
@ -43,7 +43,8 @@ function love.run()
|
||||||
end
|
end
|
||||||
|
|
||||||
function handle_error(err)
|
function handle_error(err)
|
||||||
Error_message = debug.traceback('Error: ' .. tostring(err), --[[stack frame]]2)
|
local callstack = debug.traceback('', --[[stack frame]]2)
|
||||||
|
Error_message = 'Error: ' .. tostring(err)..'\n'..clean_up_callstack(callstack)
|
||||||
print(Error_message)
|
print(Error_message)
|
||||||
if Current_app == 'run' then
|
if Current_app == 'run' then
|
||||||
Settings.current_app = 'source'
|
Settings.current_app = 'source'
|
||||||
|
@ -56,6 +57,26 @@ function handle_error(err)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- I tend to read code from files myself (say using love.filesystem calls)
|
||||||
|
-- rather than offload that to load().
|
||||||
|
-- Functions compiled in this manner have ugly filenames of the form [string "filename"]
|
||||||
|
-- This function cleans out this cruft from error callstacks.
|
||||||
|
function clean_up_callstack(callstack)
|
||||||
|
local frames = {}
|
||||||
|
print(callstack)
|
||||||
|
for frame in string.gmatch(callstack, '[^\n]+\n*') do
|
||||||
|
local line = frame:gsub('^%s*(.-)\n?$', '%1')
|
||||||
|
local filename, rest = line:match('([^:]*):(.*)')
|
||||||
|
local core_filename = filename:match('^%[string "(.*)"%]$')
|
||||||
|
-- pass through frames that don't match this format
|
||||||
|
-- this includes the initial line "stack traceback:"
|
||||||
|
local new_frame = (core_filename or filename)..':'..rest
|
||||||
|
table.insert(frames, new_frame)
|
||||||
|
end
|
||||||
|
-- the initial "stack traceback:" line was unindented and remains so
|
||||||
|
return table.concat(frames, '\n\t')
|
||||||
|
end
|
||||||
|
|
||||||
-- The rest of this file wraps around various LÖVE primitives to support
|
-- The rest of this file wraps around various LÖVE primitives to support
|
||||||
-- automated tests. Often tests will run with a fake version of a primitive
|
-- automated tests. Often tests will run with a fake version of a primitive
|
||||||
-- that redirects to the real love.* version once we're done with tests.
|
-- that redirects to the real love.* version once we're done with tests.
|
||||||
|
|
Loading…
Reference in New Issue