debugger refactor

This commit is contained in:
kepler155c@gmail.com
2020-05-30 20:06:30 -06:00
parent 6394a48766
commit d203510527
7 changed files with 58 additions and 22 deletions

View File

@@ -1,6 +1,5 @@
local Array = require('opus.array')
local Config = require('opus.config')
local fuzzy = require('opus.fuzzy')
local UI = require('opus.ui')
local Util = require('opus.util')
@@ -492,7 +491,7 @@ local page = UI.Page {
UI.Window.resize(self)
w, h = self.width, self.height
actions.set_cursor(x, y)
actions.set_cursor()
actions.dirty_all()
actions.redraw()
end,
@@ -940,7 +939,7 @@ actions = {
local routine = {
focused = true,
title = fs.getName(fileInfo.path),
chainExit = function(_, result)
onExit = function(_, result)
-- display results of process before closing window
if result then -- clean exit
-- any errors will be picked up by multishells
@@ -1467,12 +1466,19 @@ actions = {
end,
}
local args = { ... }
local args, options = Util.parse( ... )
local filename = args[1] and shell.resolve(args[1])
if not (actions.load(filename) or actions.load(config.filename) or actions.load('untitled.lua')) then
error('Error opening file')
end
if tonumber(options.line) then
scrollY = math.max(0, tonumber(options.line) - math.floor(h / 2))
actions.go_to(1, tonumber(options.line))
actions.set_cursor()
actions.dirty_all()
end
UI:setPage(page)
local s, m = pcall(function() UI:start() end)
if not s then

View File

@@ -78,4 +78,9 @@
category = "Apps",
run = "write",
},
[ "c543ece81605c7d202121c62080a0db4020fc2c75bfac35d101d7f3e93c93949" ] = {
category = "Apps",
run = "ascii",
title = "Ascii",
},
}

View File

@@ -3,5 +3,4 @@ packages/common/hexedit.lua urlfs https://pastebin.com/raw/Ds9ajsp4
packages/common/colors.lua urlfs https://raw.githubusercontent.com/kepler155c/opus-apps/develop-1.8/ignore/colors.lua
packages/common/cowsay.lua urlfs https://pastebin.com/raw/n00VQJsw
packages/common/calc.lua urlfs https://pastebin.com/raw/nAinUn1h
packages/common/write.lua urlfs https://pastebin.com/raw/RSyhCjqv
packages/common/apis/debugger.lua urlfs https://raw.githubusercontent.com/slembcke/debugger.lua/master/debugger.lua
packages/common/write.lua urlfs https://pastebin.com/raw/RSyhCjqv

View File

@@ -6,10 +6,8 @@ local fs = _G.fs
local dbg = {
hooks = { },
waits = { },
debugger = nil,
breakpoints = nil,
}
_G._dbg = dbg -- for testing purposes
local function breakpointHook(info)
if dbg.breakpoints then
@@ -155,12 +153,7 @@ local function hook()
while dbg.waits[1] ~= h do
os.sleep(.1)
end
os.queueEvent('debuggerX', dbg.debugger.uid, snapshot)
local e, cmd, param
repeat
e, cmd, param = os.pullEvent('debugger')
until e == 'debugger'
local cmd, param = dbg.read(snapshot)
table.remove(dbg.waits, 1)
@@ -187,7 +180,7 @@ function dbg.call(fn, ...)
local args = { ... }
return xpcall(
function()
fn(table.unpack(args))
return fn(table.unpack(args))
end,
function(err)
dbg.hooks[coroutine.running()].eval = stepHook()

View File

@@ -46,6 +46,18 @@ local function startClient()
error(msg, -1)
end
dbg.read = function(snapshot)
os.sleep(0) -- not sure why, but we need a sleep before :resume
-- directly resuming debugger routine to prevent
-- serialization of the snapshot
dbg.debugger:resume('debuggerX', dbg.debugger.uid, snapshot)
local e, cmd, param
repeat
e, cmd, param = os.pullEvent('debugger')
until e == 'debugger'
return cmd, param
end
-- breakpoint table is shared across processes
dbg.breakpoints = breakpoints
dbg.debugger = debugger
@@ -106,8 +118,6 @@ local page = UI.Page {
y = 1, ey = '50%',
tabs = UI.Tabs {
ey = -2,
unselectedBackgroundColor = 'black',
locals = UI.Tab {
title = 'Locals',
index = 1,
@@ -361,11 +371,12 @@ local page = UI.Page {
self:draw()
end,
editFile = function(_, file)
editFile = function(self, file)
if fs.exists(file) then
local line = self.source:getSelected().line
multishell.openTab(_ENV, {
path = 'sys/apps/shell.lua',
args = { 'edit ' .. file },
args = { ('edit --line=%d %s'):format(line , file) },
focused = true,
})
end
@@ -424,8 +435,12 @@ local page = UI.Page {
local t = event.selected.raw
for k,v in pairs(t) do
local depth = event.selected.depth or 0
table.insert(event.selected.children,
{ name = (' '):rep(depth + 2) .. k, value = tostring(v), raw = v, depth = depth + 2 })
table.insert(event.selected.children, {
name = (' '):rep(depth + 2) .. tostring(k),
value = tostring(v),
raw = v,
depth = depth + 2
})
end
table.sort(event.selected.children, function(a, b) return a.name < b.name end)
end
@@ -468,6 +483,7 @@ Event.on('debuggerX', function(_, uid, data)
for k,v in pairs(getfenv(data.info.func)) do
table.insert(t, { name = k, value = tostring(v), raw = v })
end
table.sort(t, function(a, b) return a.name < b.name end)
page.container.tabs.env.grid:setValues(t)
page.container.tabs.env.grid.orig = Util.shallowCopy(t)

7
debugger/etc/apps.db Normal file
View File

@@ -0,0 +1,7 @@
{
[ "1a03bd2fd107c453f3183e30b9716f82200671e8270fbbefbe602f5a48705527" ] = {
run = "fileui --exec=debug.lua --title=debug",
title = "Debug",
category = "Apps",
},
}

View File

@@ -1,3 +1,14 @@
--[[
-- a very simple debugger implementation
local dbg = require('debugger')
dbg.read = function(snapshot)
print(('%s: %d'):format(snapshot.info.source, snapshot.info.currentline))
write('> ')
return read()
end
dbg.stopIn(debug.getinfo(1).func)
]]
local function m2(a)
return a
end
@@ -43,7 +54,6 @@ local chunk = load([[
local j = chunk()
print(j)
require('opus.util').print(coroutine)
local co = coroutine.create(function(args)
print('in coroutine')
return 'hi'