function! vebugger#rdebug#start(entryFile,args) let l:debugger=vebugger#std#startDebugger(shellescape(vebugger#util#getToolFullPath('ruby',get(a:args,'version'),'ruby')) \.' -rdebug '.a:entryFile.' '.vebugger#util#commandLineArgsForProgram(a:args)) let l:debugger.state.rdebug={} let l:debugger.state.std.config.externalFileStop_flowCommand='stepover' "skip external modules call l:debugger.writeLine("$stdout=$stderr") let l:debugger.pipes.err.annotation = "err&prg\t\t" if !has('win32') call vebugger#std#openShellBuffer(l:debugger) endif call l:debugger.addReadHandler(function('vebugger#rdebug#_readProgramOutput')) call l:debugger.addReadHandler(function('vebugger#rdebug#_readWhere')) call l:debugger.addReadHandler(function('vebugger#rdebug#_readEvaluatedExpressions')) call l:debugger.setWriteHandler('std','flow',function('vebugger#rdebug#_writeFlow')) call l:debugger.setWriteHandler('std','breakpoints',function('vebugger#rdebug#_writeBreakpoints')) call l:debugger.setWriteHandler('std','evaluateExpressions',function('vebugger#rdebug#_requestEvaluateExpression')) call l:debugger.setWriteHandler('std','executeStatements',function('vebugger#rdebug#_executeStatements')) call l:debugger.setWriteHandler('std','removeAfterDisplayed',function('vebugger#rdebug#_removeAfterDisplayed')) call l:debugger.generateWriteActionsFromTemplate() call l:debugger.std_addAllBreakpointActions(g:vebugger_breakpoints) return l:debugger endfunction function! vebugger#rdebug#_readProgramOutput(pipeName,line,readResult,debugger) if 'err'==a:pipeName let a:readResult.std.programOutput={'line':a:line} endif endfunction function! vebugger#rdebug#_readWhere(pipeName,line,readResult,debugger) if 'out'==a:pipeName let l:matches=matchlist(a:line,'\v^([^:]+)\:(\d+)\:(.*)$') if 3