Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
suliangchun
dbeaver
提交
d6528c07
D
dbeaver
项目概览
suliangchun
/
dbeaver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dbeaver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d6528c07
编写于
1月 21, 2018
作者:
A
Alexander Fedorov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#2556 reimplement step handling: step into
上级
ee795c93
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
146 addition
and
39 deletion
+146
-39
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseDebugElement.java
.../jkiss/dbeaver/debug/core/model/DatabaseDebugElement.java
+2
-2
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseDebugTarget.java
...g/jkiss/dbeaver/debug/core/model/DatabaseDebugTarget.java
+50
-9
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseThread.java
...rc/org/jkiss/dbeaver/debug/core/model/DatabaseThread.java
+93
-23
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/IDatabaseDebugTarget.java
.../jkiss/dbeaver/debug/core/model/IDatabaseDebugTarget.java
+0
-4
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/ProcedureThread.java
...c/org/jkiss/dbeaver/debug/core/model/ProcedureThread.java
+1
-1
未找到文件。
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseDebugElement.java
浏览文件 @
d6528c07
...
...
@@ -26,8 +26,8 @@ public class DatabaseDebugElement extends DebugElement {
super
(
target
);
}
public
I
DatabaseDebugTarget
getDatabaseDebugTarget
()
{
return
(
I
DatabaseDebugTarget
)
getDebugTarget
();
public
DatabaseDebugTarget
getDatabaseDebugTarget
()
{
return
(
DatabaseDebugTarget
)
getDebugTarget
();
}
public
DBGController
getController
()
{
...
...
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseDebugTarget.java
浏览文件 @
d6528c07
...
...
@@ -32,14 +32,15 @@ import org.eclipse.debug.core.model.IBreakpoint;
import
org.eclipse.debug.core.model.IDebugTarget
;
import
org.eclipse.debug.core.model.IMemoryBlock
;
import
org.eclipse.debug.core.model.IProcess
;
import
org.eclipse.debug.core.model.IStackFrame
;
import
org.eclipse.debug.core.model.IThread
;
import
org.eclipse.osgi.util.NLS
;
import
org.jkiss.dbeaver.debug.DBGController
;
import
org.jkiss.dbeaver.debug.DBGEvent
;
import
org.jkiss.dbeaver.debug.DBGEventHandler
;
import
org.jkiss.dbeaver.debug.DBGException
;
import
org.jkiss.dbeaver.debug.DBGStackFrame
;
import
org.jkiss.dbeaver.debug.core.DebugCore
;
import
org.jkiss.dbeaver.debug.core.DebugEvents
;
import
org.jkiss.dbeaver.model.runtime.DefaultProgressMonitor
;
import
org.jkiss.dbeaver.model.runtime.VoidProgressMonitor
;
...
...
@@ -287,11 +288,6 @@ public abstract class DatabaseDebugTarget extends DatabaseDebugElement implement
return
false
;
}
@Override
public
DebugEvent
toDebugEvent
(
DBGEvent
event
)
{
return
new
DebugEvent
(
event
.
getSource
(),
event
.
getKind
(),
event
.
getDetails
());
}
@Override
public
boolean
supportsStorageRetrieval
()
{
return
false
;
...
...
@@ -304,9 +300,54 @@ public abstract class DatabaseDebugTarget extends DatabaseDebugElement implement
@Override
public
void
handleDebugEvent
(
DBGEvent
event
)
{
DebugEvent
debugEvent
=
toDebugEvent
(
event
);
DebugEvents
.
fireEvent
(
debugEvent
);
// DebugEvents.fireEvent(new DebugEvent(this, DebugEvent.SUSPEND, DebugEvent.BREAKPOINT));
int
kind
=
event
.
getKind
();
if
(
DBGEvent
.
SUSPEND
==
kind
)
{
suspended
(
event
.
getDetails
());
}
}
public
boolean
canStepInto
()
{
return
controller
.
canStepInto
(
sessionKey
);
}
public
boolean
canStepOver
()
{
return
controller
.
canStepOver
(
sessionKey
);
}
public
boolean
canStepReturn
()
{
return
controller
.
canStepReturn
(
sessionKey
);
}
public
boolean
isStepping
()
{
// TODO Auto-generated method stub
return
false
;
}
public
void
stepInto
()
throws
DebugException
{
DBGController
controller
=
getController
();
try
{
controller
.
stepInto
(
sessionKey
);
}
catch
(
DBGException
e
)
{
String
message
=
NLS
.
bind
(
"Step into failed for session {0}"
,
sessionKey
);
IStatus
status
=
DebugCore
.
newErrorStatus
(
message
,
e
);
throw
new
DebugException
(
status
);
}
}
public
void
stepOver
()
throws
DebugException
{
// TODO Auto-generated method stub
}
public
void
stepReturn
()
throws
DebugException
{
// TODO Auto-generated method stub
}
protected
List
<?
extends
DBGStackFrame
>
getStackFrames
()
throws
DBGException
{
DBGController
controller
=
getController
();
List
<?
extends
DBGStackFrame
>
stack
=
controller
.
getStack
(
sessionKey
);
return
stack
;
}
}
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/DatabaseThread.java
浏览文件 @
d6528c07
...
...
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import
java.util.List
;
import
org.eclipse.core.runtime.IStatus
;
import
org.eclipse.debug.core.DebugEvent
;
import
org.eclipse.debug.core.DebugException
;
import
org.eclipse.debug.core.model.IBreakpoint
;
import
org.eclipse.debug.core.model.IStackFrame
;
...
...
@@ -39,7 +40,22 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
private
final
Object
sessionKey
;
public
DatabaseThread
(
IDatabaseDebugTarget
target
,
Object
sessionKey
)
{
/**
* Whether this thread is stepping
*/
private
boolean
stepping
=
false
;
/**
* The stackframes associated with this thread
*/
private
List
<
DatabaseStackFrame
>
fFrames
=
new
ArrayList
<>(
1
);
/**
* The stackframes to be reused on suspension
*/
private
List
<
DatabaseStackFrame
>
fOldFrames
;
public
DatabaseThread
(
DatabaseDebugTarget
target
,
Object
sessionKey
)
{
super
(
target
);
this
.
sessionKey
=
sessionKey
;
}
...
...
@@ -91,20 +107,13 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
@Override
public
boolean
isStepping
()
{
// TODO Auto-generated method stub
return
false
;
return
stepping
;
}
@Override
public
void
stepInto
()
throws
DebugException
{
DBGController
controller
=
getController
();
try
{
controller
.
stepInto
(
sessionKey
);
}
catch
(
DBGException
e
)
{
String
message
=
NLS
.
bind
(
"Step into failed for session {0}"
,
sessionKey
);
IStatus
status
=
DebugCore
.
newErrorStatus
(
message
,
e
);
throw
new
DebugException
(
status
);
}
aboutToResume
(
DebugEvent
.
STEP_INTO
,
true
);
getDatabaseDebugTarget
().
stepInto
();
}
@Override
...
...
@@ -131,6 +140,14 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
}
}
private
void
aboutToResume
(
int
detail
,
boolean
stepping
)
{
fOldFrames
=
new
ArrayList
<>(
fFrames
);
fFrames
.
clear
();
setStepping
(
stepping
);
// setBreakpoints(null);
fireResumeEvent
(
detail
);
}
@Override
public
boolean
canTerminate
()
{
return
getDebugTarget
().
canTerminate
();
...
...
@@ -143,24 +160,34 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
@Override
public
void
terminate
()
throws
DebugException
{
fFrames
.
clear
();
getDebugTarget
().
terminate
();
}
@Override
public
IStackFrame
[]
getStackFrames
()
throws
DebugException
{
List
<
DatabaseStackFrame
>
frames
=
new
ArrayList
<
DatabaseStackFrame
>();
DBGController
controller
=
getController
();
try
{
List
<?
extends
DBGStackFrame
>
stack
=
controller
.
getStack
(
sessionKey
);
for
(
DBGStackFrame
dbgStackFrame
:
stack
)
{
DatabaseStackFrame
frame
=
new
DatabaseStackFrame
(
this
,
dbgStackFrame
,
sessionKey
);
frames
.
add
(
frame
);
if
(
isSuspended
())
{
if
(
fFrames
.
size
()
==
0
)
{
getStackFrames0
();
}
}
return
fFrames
.
toArray
(
new
IStackFrame
[
fFrames
.
size
()]);
}
/**
* Retrieves the current stack frames in the thread possibly waiting until the frames are populated
*
*/
private
void
getStackFrames0
()
throws
DebugException
{
List
<?
extends
DBGStackFrame
>
stackFrames
;
try
{
stackFrames
=
getDatabaseDebugTarget
().
getStackFrames
();
buildStack
(
stackFrames
);
}
catch
(
DBGException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
return
(
IStackFrame
[])
frames
.
toArray
(
new
IStackFrame
[
frames
.
size
()]);
}
@Override
...
...
@@ -168,6 +195,43 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
return
true
;
}
public
void
buildStack
(
List
<?
extends
DBGStackFrame
>
stackFrames
)
{
if
(
fOldFrames
!=
null
&&
(
stackFrames
.
size
()
-
1
)
/
4
!=
fOldFrames
.
size
())
{
fOldFrames
.
clear
();
fOldFrames
=
null
;
// stack size changed..do not preserve
}
for
(
DBGStackFrame
dbgStackFrame
:
stackFrames
)
{
addFrame
(
dbgStackFrame
,
sessionKey
);
}
}
private
void
addFrame
(
DBGStackFrame
stackFrameId
,
Object
sessionKey
)
{
DatabaseStackFrame
frame
=
getOldFrame
();
if
(
frame
==
null
/*|| !frame.getFilePath().equals(filePath)*/
)
{
frame
=
new
DatabaseStackFrame
(
this
,
stackFrameId
,
sessionKey
);
}
else
{
// frame.setFilePath(filePath);
// frame.setId(stackFrameId);
// frame.setLineNumber(lineNumber);
// frame.setName(name);
}
fFrames
.
add
(
frame
);
}
private
DatabaseStackFrame
getOldFrame
()
{
if
(
fOldFrames
==
null
)
{
return
null
;
}
DatabaseStackFrame
frame
=
fOldFrames
.
remove
(
0
);
if
(
fOldFrames
.
isEmpty
())
{
fOldFrames
=
null
;
}
return
frame
;
}
@Override
public
int
getPriority
()
throws
DebugException
{
// no idea for now
...
...
@@ -176,7 +240,14 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
@Override
public
IStackFrame
getTopStackFrame
()
throws
DebugException
{
// TODO Auto-generated method stub
if
(
isSuspended
())
{
if
(
fFrames
.
size
()
==
0
)
{
getStackFrames0
();
}
if
(
fFrames
.
size
()
>
0
)
{
return
fFrames
.
get
(
0
);
}
}
return
null
;
}
...
...
@@ -191,9 +262,8 @@ public abstract class DatabaseThread extends DatabaseDebugElement implements ITh
}
public
void
setStepping
(
boolean
b
)
{
// TODO Auto-generated method stub
public
void
setStepping
(
boolean
stepping
)
{
this
.
stepping
=
stepping
;
}
}
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/IDatabaseDebugTarget.java
浏览文件 @
d6528c07
...
...
@@ -19,17 +19,13 @@ package org.jkiss.dbeaver.debug.core.model;
import
org.eclipse.core.runtime.CoreException
;
import
org.eclipse.core.runtime.IProgressMonitor
;
import
org.eclipse.debug.core.DebugEvent
;
import
org.eclipse.debug.core.IBreakpointManagerListener
;
import
org.eclipse.debug.core.IDebugEventSetListener
;
import
org.eclipse.debug.core.model.IDebugTarget
;
import
org.jkiss.dbeaver.debug.DBGController
;
import
org.jkiss.dbeaver.debug.DBGEvent
;
public
interface
IDatabaseDebugTarget
extends
IDebugTarget
,
IDebugEventSetListener
,
IBreakpointManagerListener
{
DebugEvent
toDebugEvent
(
DBGEvent
event
);
DBGController
getController
();
void
connect
(
IProgressMonitor
monitor
)
throws
CoreException
;
...
...
plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/model/ProcedureThread.java
浏览文件 @
d6528c07
...
...
@@ -22,7 +22,7 @@ import org.jkiss.dbeaver.debug.internal.core.DebugCoreMessages;
public
class
ProcedureThread
extends
DatabaseThread
{
public
ProcedureThread
(
I
DatabaseDebugTarget
target
,
Object
sessionKey
)
{
public
ProcedureThread
(
DatabaseDebugTarget
target
,
Object
sessionKey
)
{
super
(
target
,
sessionKey
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录