luaforwindows/SciTE/scite-debug/scite_lua/debug/jdb.lua

94 lines
2.0 KiB
Lua
Executable File

scite_require 'debugger.lua'
local find = string.find
local sub = string.sub
local p_pattern = '.*= '
local function print_process(s)
display(s)
end
-- special actions for commands which require postprocessing
local postprocess_command = {
print = {pattern=p_pattern, action=print_process, single_pattern=true},
}
Jdb = class(Dbg)
function Jdb:init(root)
self.prompt = '(JDB)'
self.no_target_ext = ''
self.cmd_file = '.jdbrc'
self.no_quit_confirm = true
self.silent_command = {}
self.postprocess_command = postprocess_command
end
local GTK = scite_GetProp('PLAT_GTK')
function Jdb:command_line(target)
return 'jdb '..target..' '..self:parameter_string()
end
function Jdb:run_program(out,parms)
out:write('run\n')
end
function Jdb:dump_breakpoints(out)
for b in Breakpoints() do
out:write('stop at '..filename(b.file)..':'..b.line..'\n')
end
end
function Jdb:clear_breakpoint(file,line,num)
if file then
dbg_command('clear',filename(file)..':'..line)
else
print ('no breakpoint at '..file..':'..line)
end
end
function Jdb:backtrace(count)
dbg_command('where')
end
function Jdb:finish()
dbg_command('step up')
end
function Jdb:locals()
dbg_command('locals')
end
function Jdb:watch(word)
dbg_command('monitor print',word)
end
function Jdb:set_breakpoint(file,lno)
dbg_command('stop at',filename(file)..':'..lno)
end
-- a little hack necessary....
function Jdb:find_execution_break(line)
local _,method,lineno,file
-- get the classname from 'classname.method()'
_,_,method,lineno = find(line,'", ([^%(]+)%(%), line=(%d+)')
if _ then
-- we get file from the classname - everything up to '.'
local klass = filename(method)
if not klass then return nil end
file = klass..'.java'
return file,lineno
end
end
function Jdb:detect_program_end(line)
return find(line,'^The application exited')
end
function Jdb:detect_program_crash(line)
return find(line,'^Uncaught exception. Entering post mortem debugging')
end
register_debugger('jdb','java',Jdb)