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;
}
}
}
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;
}
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);
}
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;
}
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);
}
Aggregations