Search in sources :

Example 1 with DBGBreakpointDescriptor

use of org.jkiss.dbeaver.debug.DBGBreakpointDescriptor in project dbeaver by dbeaver.

the class Debugger method main.

public static void main(String[] args) throws DBGException {
    // "jdbc:postgresql://localhost/postgres?user=postgres&password=postgres&ssl=false";
    String url = "jdbc:postgresql://192.168.229.133/postgres?user=postgres&password=postgres&ssl=false";
    DBPDataSourceContainer dataSource = null;
    Connection conn;
    DBGBaseController controller;
    try {
        conn = DriverManager.getConnection(url);
    } catch (SQLException e) {
        e.printStackTrace();
        return;
    }
    // TODO: fix connection
    controller = new PostgreDebugController(dataSource);
    Scanner sc = new Scanner(System.in);
    Scanner scArg;
    String command;
    while (true) {
        System.out.print(PROMPT);
        command = sc.next();
        switch(command.toUpperCase()) {
            case COMMAND_HELP:
                System.out.println("W Show sessions");
                System.out.println("N New session");
                System.out.println("D Show debug objects");
                System.out.println("S Stack");
                System.out.println("F Frame");
                System.out.println("V Variables");
                System.out.println("= Set Variables");
                System.out.println("L List breakpoint(s)");
                System.out.println("Q List debug session(s)");
                System.out.println("B Set breakpoint");
                System.out.println("R Remove breakpoint");
                System.out.println("C Continue execution");
                System.out.println("I Step into");
                System.out.println("O Step over");
                System.out.println("X Close session");
                System.out.println("T Abort session");
                System.out.println("E Exit debugger");
                System.out.println("? This help");
                break;
            case COMMAND_CLOSE:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionC = chooseSession(sc, controller);
                if (debugSessionC == null) {
                    break;
                }
                controller.detach(debugSessionC.getSessionId(), new VoidProgressMonitor());
                System.out.println("Session closed");
                break;
            case COMMAND_STACK:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionSL = chooseSession(sc, controller);
                if (debugSessionSL == null) {
                    break;
                }
                List<? extends DBGStackFrame> stack = debugSessionSL.getStack();
                if (stack.size() == 0) {
                    System.out.println("No stack defined");
                }
                for (DBGStackFrame s : stack) {
                    System.out.println(s.toString());
                }
                break;
            case COMMAND_FRAME:
                System.out.println("FRAME!!!");
                break;
            case COMMAND_VARIABLES:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionVL = chooseSession(sc, controller);
                if (debugSessionVL == null) {
                    break;
                }
                List<? extends DBGVariable<?>> vars = debugSessionVL.getVariables();
                if (vars.size() == 0) {
                    System.out.println("No vars defined");
                }
                for (DBGVariable<?> v : vars) {
                    System.out.println(v.toString());
                }
                break;
            case COMMAND_VARIABLE_SET:
                String strVal = "";
                String argcV = sc.nextLine();
                if (argcV.length() > 0) {
                    scArg = new Scanner(argcV);
                    if (scArg.hasNext()) {
                        strVal = scArg.next();
                    }
                    scArg.close();
                }
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionVS = chooseSession(sc, controller);
                if (debugSessionVS == null) {
                    break;
                }
                DBGVariable<?> var = chooseVariable(sc, controller, debugSessionVS);
                if (var == null) {
                    break;
                }
                debugSessionVS.setVariableVal(var, strVal);
                System.out.println(String.format("Variable Set %s", strVal));
                break;
            case COMMAND_BREAKPOINT:
                String strObjId = ANY_ARG;
                String strLineNo = ANY_ARG;
                String argc = sc.nextLine();
                if (argc.length() > 0) {
                    scArg = new Scanner(argc);
                    if (scArg.hasNext()) {
                        strObjId = scArg.next();
                        if (scArg.hasNext()) {
                            argc = scArg.nextLine();
                            if (argc.length() > 0) {
                                strLineNo = argc;
                            }
                        }
                    }
                    scArg.close();
                }
                Integer objId = -1;
                try {
                    objId = Integer.valueOf(strObjId.trim());
                } catch (Exception e) {
                    System.out.println(String.format("Incorrect object ID '%s'", strObjId));
                    break;
                }
                int lineNo = -1;
                if (strLineNo.trim().length() > 0) {
                    try {
                        lineNo = Integer.valueOf(strLineNo.trim());
                    } catch (Exception e) {
                        System.out.println(String.format("Incorrect line number '%s'", strLineNo));
                        break;
                    }
                }
                DBGObjectDescriptor debugObject = null;
                for (DBGObjectDescriptor o : controller.getObjects("_", "_")) {
                    if (objId.equals(o.getID())) {
                        debugObject = o;
                    }
                }
                if (debugObject == null) {
                    System.out.println(String.format("Object ID '%s' no found", strObjId));
                    break;
                }
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSession = chooseSession(sc, controller);
                if (debugSession == null) {
                    break;
                }
                PostgreDebugBreakpointProperties breakpointProperties = lineNo > 0 ? new PostgreDebugBreakpointProperties(lineNo, true) : new PostgreDebugBreakpointProperties(true);
                Object oid = debugObject.getID();
                PostgreDebugBreakpointDescriptor descriptor = new PostgreDebugBreakpointDescriptor(oid, breakpointProperties);
                debugSession.addBreakpoint(descriptor);
                System.out.println("Breakpoint added");
                System.out.println(breakpointProperties.toString());
                break;
            case COMMAND_BREAKPOINT_LIST:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionBL = chooseSession(sc, controller);
                if (debugSessionBL == null) {
                    break;
                }
                if (debugSessionBL.getBreakpoints().size() == 0) {
                    System.out.println("No breakpoints defined");
                }
                for (DBGBreakpointDescriptor bpl : debugSessionBL.getBreakpoints()) {
                    System.out.println(bpl.toString());
                }
                break;
            case COMMAND_BREAKPOINT_REMOVE:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionBR = chooseSession(sc, controller);
                if (debugSessionBR == null) {
                    break;
                }
                if (debugSessionBR.getBreakpoints().size() == 0) {
                    System.out.println("No breakpoints defined");
                }
                DBGBreakpointDescriptor bpr = chooseBreakpoint(sc, controller, debugSessionBR);
                debugSessionBR.removeBreakpoint(bpr);
                System.out.println("Breakpoint removed ...");
                break;
            case COMMAND_CONTINUE:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionSC = chooseSession(sc, controller);
                if (debugSessionSC == null) {
                    break;
                }
                debugSessionSC.execContinue();
                System.out.println("Continue ...");
                break;
            case COMMAND_INTO:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionSI = chooseSession(sc, controller);
                if (debugSessionSI == null) {
                    break;
                }
                debugSessionSI.execStepInto();
                System.out.println("Step Into ...");
                break;
            case COMMAND_OVER:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionSO = chooseSession(sc, controller);
                if (debugSessionSO == null) {
                    break;
                }
                debugSessionSO.execStepOver();
                System.out.println("Step over ...");
                break;
            case COMMAND_SESSIONS:
                for (DBGSessionInfo s : controller.getSessionDescriptors()) {
                    System.out.println(s);
                }
                break;
            case COMMAND_DEBUG_LIST:
                if (controller.getSessions().size() == 0) {
                    System.out.println("no debug sessions");
                    break;
                }
                for (DBGSession s : controller.getSessions()) {
                    System.out.println(s);
                }
                break;
            case COMMAND_NEW:
                try {
                    Connection debugConn = DriverManager.getConnection(url);
                    // TODO: fix connection
                    DBCExecutionContext executionContext = null;
                    DBGSession s = controller.createSession(null, executionContext);
                    System.out.println("created");
                    System.out.println(s);
                } catch (SQLException e) {
                    e.printStackTrace();
                    break;
                }
                break;
            case COMMAND_OBJ:
                String proc = ANY_ARG;
                String owner = ANY_ARG;
                String arg = sc.nextLine();
                if (arg.length() > 0) {
                    scArg = new Scanner(arg);
                    if (scArg.hasNext()) {
                        proc = scArg.next();
                        if (scArg.hasNext()) {
                            arg = scArg.nextLine();
                            if (arg.length() > 0) {
                                owner = arg;
                            }
                        }
                    }
                    scArg.close();
                }
                for (DBGObjectDescriptor o : controller.getObjects(owner.equals(ANY_ARG) ? "_" : owner, proc.equals(ANY_ARG) ? "_" : proc)) {
                    System.out.println(o);
                }
                break;
            case COMMAND_ATTACH:
                if (controller.getSessions().size() == 0) {
                    System.out.println("Debug sessions not found");
                    break;
                }
                DBGSession debugSessionA = chooseSession(sc, controller);
                if (debugSessionA == null) {
                    break;
                }
                System.out.println("Waiting for target session ...");
                break;
            case COMMAND_TERMINATE:
                System.out.println("EXIT.....");
                return;
            default:
                System.out.println(String.format("Unnown command '%s' for command list type ?", command));
                break;
        }
    }
}
Also used : Scanner(java.util.Scanner) DBCExecutionContext(org.jkiss.dbeaver.model.exec.DBCExecutionContext) SQLException(java.sql.SQLException) PostgreDebugBreakpointDescriptor(org.jkiss.dbeaver.ext.postgresql.debug.internal.impl.PostgreDebugBreakpointDescriptor) Connection(java.sql.Connection) PostgreDebugController(org.jkiss.dbeaver.ext.postgresql.debug.internal.impl.PostgreDebugController) DBGBreakpointDescriptor(org.jkiss.dbeaver.debug.DBGBreakpointDescriptor) DBGSession(org.jkiss.dbeaver.debug.DBGSession) DBGException(org.jkiss.dbeaver.debug.DBGException) SQLException(java.sql.SQLException) DBGStackFrame(org.jkiss.dbeaver.debug.DBGStackFrame) PostgreDebugBreakpointProperties(org.jkiss.dbeaver.ext.postgresql.debug.internal.impl.PostgreDebugBreakpointProperties) DBGBaseController(org.jkiss.dbeaver.debug.DBGBaseController) DBGSessionInfo(org.jkiss.dbeaver.debug.DBGSessionInfo) DBGObjectDescriptor(org.jkiss.dbeaver.debug.DBGObjectDescriptor) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Example 2 with DBGBreakpointDescriptor

use of org.jkiss.dbeaver.debug.DBGBreakpointDescriptor in project dbeaver by dbeaver.

the class Debugger method chooseBreakpoint.

public static DBGBreakpointDescriptor chooseBreakpoint(Scanner sc, DBGController controller, DBGSession session) throws DBGException {
    DBGBreakpointDescriptor bp = null;
    List<? extends DBGBreakpointDescriptor> bps = session.getBreakpoints();
    Scanner scArg;
    if (bps.size() == 1) {
        bp = bps.get(0);
    } else {
        System.out.println("Choose breakpoint (0 for quit) :");
        int bpNo = 1;
        for (DBGBreakpointDescriptor b : bps) {
            System.out.println(String.format(" (%d) %s", bpNo++, b.toString()));
        }
        int bpId = -1;
        while (bpId < 0) {
            String argc = sc.nextLine();
            String strBpid = "";
            scArg = new Scanner(argc);
            if (scArg.hasNext()) {
                strBpid = scArg.next();
                if (strBpid.trim().length() > 0) {
                    try {
                        bpId = Integer.valueOf(strBpid);
                    } catch (Exception e) {
                        System.out.println(String.format("Incorrect session ID %s", strBpid));
                        bpId = -1;
                    }
                    if (bpId == 0) {
                        break;
                    }
                    if (bpId > bps.size()) {
                        System.out.println(String.format("Incorrect breakpoint ID %s", strBpid));
                        bpId = -1;
                    } else {
                        bp = bps.get(bpId - 1);
                        break;
                    }
                }
            }
            scArg.close();
        }
    }
    return bp;
}
Also used : Scanner(java.util.Scanner) DBGBreakpointDescriptor(org.jkiss.dbeaver.debug.DBGBreakpointDescriptor) DBGException(org.jkiss.dbeaver.debug.DBGException) SQLException(java.sql.SQLException)

Example 3 with DBGBreakpointDescriptor

use of org.jkiss.dbeaver.debug.DBGBreakpointDescriptor in project dbeaver by serge-rider.

the class ToggleProcedureBreakpointTarget method toggleLineBreakpoints.

@Override
public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
    IEditorPart editorPart = (IEditorPart) part;
    IResource resource = extractResource(editorPart, selection);
    if (resource == null) {
        return;
    }
    DBSObject databaseObject = DebugUI.extractDatabaseObject(editorPart);
    if (databaseObject == null) {
        return;
    }
    DBNDatabaseNode node = DBWorkbench.getPlatform().getNavigatorModel().getNodeByObject(new VoidProgressMonitor(), databaseObject, false);
    if (node == null) {
        return;
    }
    String nodeItemPath = node.getNodeItemPath();
    ITextSelection textSelection = (ITextSelection) selection;
    int lineNumber = textSelection.getStartLine();
    IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(DBGConstants.MODEL_IDENTIFIER_DATABASE);
    for (IBreakpoint breakpoint : breakpoints) {
        if (breakpoint instanceof IDatabaseBreakpoint) {
            IDatabaseBreakpoint databaseBreakpoint = (IDatabaseBreakpoint) breakpoint;
            if (nodeItemPath.equals(databaseBreakpoint.getNodePath())) {
                if (((ILineBreakpoint) breakpoint).getLineNumber() == (lineNumber + 1)) {
                    DebugUITools.deleteBreakpoints(new IBreakpoint[] { breakpoint }, part.getSite().getShell(), null);
                    return;
                }
            }
        }
    }
    int charstart = -1, charend = -1;
    DBGBreakpointDescriptor breakpointDescriptor = GeneralUtils.adapt(databaseObject, DBGBreakpointDescriptor.class);
    if (breakpointDescriptor == null) {
        throw new CoreException(GeneralUtils.makeErrorStatus("Object '" + DBUtils.getObjectFullName(databaseObject, DBPEvaluationContext.UI) + "' doesn't support breakpoints"));
    }
    // create line breakpoint (doc line numbers start at 0)
    new DatabaseLineBreakpoint(databaseObject, node, resource, breakpointDescriptor, lineNumber + 1, charstart, charend, true);
}
Also used : DatabaseLineBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.DatabaseLineBreakpoint) IDatabaseBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.IDatabaseBreakpoint) IEditorPart(org.eclipse.ui.IEditorPart) DBGBreakpointDescriptor(org.jkiss.dbeaver.debug.DBGBreakpointDescriptor) ITextSelection(org.eclipse.jface.text.ITextSelection) ILineBreakpoint(org.eclipse.debug.core.model.ILineBreakpoint) IBreakpoint(org.eclipse.debug.core.model.IBreakpoint) DatabaseLineBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.DatabaseLineBreakpoint) IDatabaseBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.IDatabaseBreakpoint) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) CoreException(org.eclipse.core.runtime.CoreException) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) DBNDatabaseNode(org.jkiss.dbeaver.model.navigator.DBNDatabaseNode) IBreakpoint(org.eclipse.debug.core.model.IBreakpoint) IResource(org.eclipse.core.resources.IResource)

Example 4 with DBGBreakpointDescriptor

use of org.jkiss.dbeaver.debug.DBGBreakpointDescriptor in project dbeaver by dbeaver.

the class DatabaseDebugTarget method describeBreakpoint.

protected DBGBreakpointDescriptor describeBreakpoint(IBreakpoint breakpoint) {
    Map<String, Object> description = new HashMap<String, Object>();
    try {
        Map<String, Object> attributes = breakpoint.getMarker().getAttributes();
        Map<String, Object> remote = DebugCore.toBreakpointDescriptor(attributes);
        description.putAll(remote);
    } catch (CoreException e) {
        DebugCore.log(e.getStatus());
        return null;
    }
    DBGBreakpointDescriptor descriptor = controller.describeBreakpoint(description);
    return descriptor;
}
Also used : CoreException(org.eclipse.core.runtime.CoreException) HashMap(java.util.HashMap) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBGBreakpointDescriptor(org.jkiss.dbeaver.debug.DBGBreakpointDescriptor)

Example 5 with DBGBreakpointDescriptor

use of org.jkiss.dbeaver.debug.DBGBreakpointDescriptor in project dbeaver by dbeaver.

the class ToggleProcedureBreakpointTarget method toggleLineBreakpoints.

@Override
public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
    IEditorPart editorPart = (IEditorPart) part;
    IResource resource = extractResource(editorPart, selection);
    if (resource == null) {
        return;
    }
    DBSObject databaseObject = DebugUI.extractDatabaseObject(editorPart);
    if (databaseObject == null) {
        return;
    }
    DBNDatabaseNode node = DBWorkbench.getPlatform().getNavigatorModel().getNodeByObject(new VoidProgressMonitor(), databaseObject, false);
    if (node == null) {
        return;
    }
    String nodeItemPath = node.getNodeItemPath();
    ITextSelection textSelection = (ITextSelection) selection;
    int lineNumber = textSelection.getStartLine();
    IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(DBGConstants.MODEL_IDENTIFIER_DATABASE);
    for (IBreakpoint breakpoint : breakpoints) {
        if (breakpoint instanceof IDatabaseBreakpoint) {
            IDatabaseBreakpoint databaseBreakpoint = (IDatabaseBreakpoint) breakpoint;
            if (nodeItemPath.equals(databaseBreakpoint.getNodePath())) {
                if (((ILineBreakpoint) breakpoint).getLineNumber() == (lineNumber + 1)) {
                    DebugUITools.deleteBreakpoints(new IBreakpoint[] { breakpoint }, part.getSite().getShell(), null);
                    return;
                }
            }
        }
    }
    int charstart = -1, charend = -1;
    DBGBreakpointDescriptor breakpointDescriptor = GeneralUtils.adapt(databaseObject, DBGBreakpointDescriptor.class);
    if (breakpointDescriptor == null) {
        throw new CoreException(GeneralUtils.makeErrorStatus("Object '" + DBUtils.getObjectFullName(databaseObject, DBPEvaluationContext.UI) + "' doesn't support breakpoints"));
    }
    // create line breakpoint (doc line numbers start at 0)
    new DatabaseLineBreakpoint(databaseObject, node, resource, breakpointDescriptor, lineNumber + 1, charstart, charend, true);
}
Also used : DatabaseLineBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.DatabaseLineBreakpoint) IDatabaseBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.IDatabaseBreakpoint) IEditorPart(org.eclipse.ui.IEditorPart) DBGBreakpointDescriptor(org.jkiss.dbeaver.debug.DBGBreakpointDescriptor) ITextSelection(org.eclipse.jface.text.ITextSelection) ILineBreakpoint(org.eclipse.debug.core.model.ILineBreakpoint) IBreakpoint(org.eclipse.debug.core.model.IBreakpoint) DatabaseLineBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.DatabaseLineBreakpoint) IDatabaseBreakpoint(org.jkiss.dbeaver.debug.core.breakpoints.IDatabaseBreakpoint) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) CoreException(org.eclipse.core.runtime.CoreException) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) DBNDatabaseNode(org.jkiss.dbeaver.model.navigator.DBNDatabaseNode) IBreakpoint(org.eclipse.debug.core.model.IBreakpoint) IResource(org.eclipse.core.resources.IResource)

Aggregations

DBGBreakpointDescriptor (org.jkiss.dbeaver.debug.DBGBreakpointDescriptor)5 CoreException (org.eclipse.core.runtime.CoreException)3 VoidProgressMonitor (org.jkiss.dbeaver.model.runtime.VoidProgressMonitor)3 DBSObject (org.jkiss.dbeaver.model.struct.DBSObject)3 SQLException (java.sql.SQLException)2 Scanner (java.util.Scanner)2 IResource (org.eclipse.core.resources.IResource)2 IBreakpoint (org.eclipse.debug.core.model.IBreakpoint)2 ILineBreakpoint (org.eclipse.debug.core.model.ILineBreakpoint)2 ITextSelection (org.eclipse.jface.text.ITextSelection)2 IEditorPart (org.eclipse.ui.IEditorPart)2 DBGException (org.jkiss.dbeaver.debug.DBGException)2 DatabaseLineBreakpoint (org.jkiss.dbeaver.debug.core.breakpoints.DatabaseLineBreakpoint)2 IDatabaseBreakpoint (org.jkiss.dbeaver.debug.core.breakpoints.IDatabaseBreakpoint)2 DBNDatabaseNode (org.jkiss.dbeaver.model.navigator.DBNDatabaseNode)2 Connection (java.sql.Connection)1 HashMap (java.util.HashMap)1 DBGBaseController (org.jkiss.dbeaver.debug.DBGBaseController)1 DBGObjectDescriptor (org.jkiss.dbeaver.debug.DBGObjectDescriptor)1 DBGSession (org.jkiss.dbeaver.debug.DBGSession)1