Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
291ac30e
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
291ac30e
编写于
1月 27, 2016
作者:
I
isidor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
debug: show changed expressions also in the watch pane
fixes #2308
上级
79a5014d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
23 addition
and
20 deletion
+23
-20
src/vs/workbench/parts/debug/browser/debugHover.ts
src/vs/workbench/parts/debug/browser/debugHover.ts
+1
-1
src/vs/workbench/parts/debug/browser/debugViewer.ts
src/vs/workbench/parts/debug/browser/debugViewer.ts
+12
-16
src/vs/workbench/parts/debug/browser/replViewer.ts
src/vs/workbench/parts/debug/browser/replViewer.ts
+2
-2
src/vs/workbench/parts/debug/common/debug.ts
src/vs/workbench/parts/debug/common/debug.ts
+1
-0
src/vs/workbench/parts/debug/common/debugModel.ts
src/vs/workbench/parts/debug/common/debugModel.ts
+7
-1
未找到文件。
src/vs/workbench/parts/debug/browser/debugHover.ts
浏览文件 @
291ac30e
...
...
@@ -150,7 +150,7 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
}
else
{
this
.
treeContainer
.
hidden
=
true
;
this
.
valueContainer
.
hidden
=
false
;
viewer
.
renderExpressionValue
(
expression
,
false
,
this
.
valueContainer
);
viewer
.
renderExpressionValue
(
expression
,
false
,
this
.
valueContainer
,
false
);
}
this
.
showAtPosition
=
position
;
...
...
src/vs/workbench/parts/debug/browser/debugViewer.ts
浏览文件 @
291ac30e
...
...
@@ -35,13 +35,13 @@ const $ = dom.emmet;
const
booleanRegex
=
/^true|false$/i
;
const
stringRegex
=
/^
([
'"
])
.*
\1
$/
;
export
function
renderExpressionValue
(
arg2
:
debug
.
IExpression
|
string
,
debugInactive
:
boolean
,
container
:
HTMLElement
):
void
{
let
value
=
typeof
arg2
===
'
string
'
?
arg2
:
arg2
.
value
;
export
function
renderExpressionValue
(
expressionOrValue
:
debug
.
IExpression
|
string
,
debugInactive
:
boolean
,
container
:
HTMLElement
,
showChanged
:
boolean
):
void
{
let
value
=
typeof
expressionOrValue
===
'
string
'
?
expressionOrValue
:
expressionOrValue
.
value
;
// remove stale classes
container
.
className
=
'
value
'
;
// when resolving expressions we represent errors from the server as a variable with name === null.
if
(
value
===
null
||
((
arg2
instanceof
model
.
Expression
||
arg2
instanceof
model
.
Variable
)
&&
!
arg2
.
available
))
{
if
(
value
===
null
||
((
expressionOrValue
instanceof
model
.
Expression
||
expressionOrValue
instanceof
model
.
Variable
)
&&
!
expressionOrValue
.
available
))
{
dom
.
addClass
(
container
,
'
unavailable
'
);
debugInactive
?
dom
.
removeClass
(
container
,
'
error
'
)
:
dom
.
addClass
(
container
,
'
error
'
);
}
else
if
(
!
isNaN
(
+
value
))
{
...
...
@@ -52,6 +52,10 @@ export function renderExpressionValue(arg2: debug.IExpression|string, debugInact
dom
.
addClass
(
container
,
'
string
'
);
}
if
(
showChanged
&&
(
<
any
>
expressionOrValue
).
valueChanged
)
{
// value changed color has priority over other colors.
container
.
className
=
'
value changed
'
;
}
container
.
textContent
=
value
;
container
.
title
=
value
;
}
...
...
@@ -62,11 +66,7 @@ export function renderVariable(tree: tree.ITree, variable: model.Variable, data:
}
if
(
variable
.
value
)
{
renderExpressionValue
(
variable
,
debugInactive
,
data
.
value
);
if
(
variable
.
valueChanged
&&
showChanged
)
{
// value changed color has priority over other colors.
data
.
value
.
className
=
'
value changed
'
;
}
renderExpressionValue
(
variable
,
debugInactive
,
data
.
value
,
showChanged
);
}
else
{
data
.
value
.
textContent
=
''
;
data
.
value
.
title
=
''
;
...
...
@@ -570,7 +570,7 @@ export class WatchExpressionsRenderer implements tree.IRenderer {
if
(
templateId
===
WatchExpressionsRenderer
.
WATCH_EXPRESSION_TEMPLATE_ID
)
{
this
.
renderWatchExpression
(
tree
,
element
,
templateData
);
}
else
{
this
.
renderExpression
(
tree
,
element
,
templateData
);
renderVariable
(
tree
,
element
,
templateData
,
this
.
debugService
.
getState
()
===
debug
.
State
.
Inactive
,
true
);
}
}
...
...
@@ -581,13 +581,9 @@ export class WatchExpressionsRenderer implements tree.IRenderer {
}
data
.
actionBar
.
context
=
watchExpression
;
this
.
renderExpression
(
tree
,
watchExpression
,
data
);
}
private
renderExpression
(
tree
:
tree
.
ITree
,
expression
:
debug
.
IExpression
,
data
:
IVariableTemplateData
):
void
{
data
.
name
.
textContent
=
`
${
expression
.
name
}
:`
;
if
(
expression
.
value
)
{
renderExpressionValue
(
expression
,
this
.
debugService
.
getState
()
===
debug
.
State
.
Inactive
,
data
.
value
);
data
.
name
.
textContent
=
`
${
watchExpression
.
name
}
:`
;
if
(
watchExpression
.
value
)
{
renderExpressionValue
(
watchExpression
,
this
.
debugService
.
getState
()
===
debug
.
State
.
Inactive
,
data
.
value
,
true
);
}
}
...
...
src/vs/workbench/parts/debug/browser/replViewer.ts
浏览文件 @
291ac30e
...
...
@@ -213,7 +213,7 @@ export class ReplExpressionsRenderer implements tree.IRenderer {
private
renderInputOutputPair
(
tree
:
tree
.
ITree
,
expression
:
debug
.
IExpression
,
templateData
:
IInputOutputPairTemplateData
):
void
{
templateData
.
input
.
textContent
=
expression
.
name
;
debugviewer
.
renderExpressionValue
(
expression
,
this
.
debugService
.
getState
()
===
debug
.
State
.
Inactive
,
templateData
.
value
);
debugviewer
.
renderExpressionValue
(
expression
,
this
.
debugService
.
getState
()
===
debug
.
State
.
Inactive
,
templateData
.
value
,
false
);
if
(
expression
.
reference
>
0
)
{
templateData
.
annotation
.
className
=
'
annotation octicon octicon-info
'
;
templateData
.
annotation
.
title
=
nls
.
localize
(
'
stateCapture
'
,
"
Object state is captured from first evaluation
"
);
...
...
@@ -406,7 +406,7 @@ export class ReplExpressionsRenderer implements tree.IRenderer {
}
// value
debugviewer
.
renderExpressionValue
(
output
.
value
,
false
,
templateData
.
value
);
debugviewer
.
renderExpressionValue
(
output
.
value
,
false
,
templateData
.
value
,
false
);
// annotation if any
if
(
output
.
annotation
)
{
...
...
src/vs/workbench/parts/debug/common/debug.ts
浏览文件 @
291ac30e
...
...
@@ -40,6 +40,7 @@ export interface IExpressionContainer extends ITreeElement {
export
interface
IExpression
extends
ITreeElement
,
IExpressionContainer
{
name
:
string
;
value
:
string
;
valueChanged
:
boolean
;
}
export
interface
IThread
extends
ITreeElement
{
...
...
src/vs/workbench/parts/debug/common/debugModel.ts
浏览文件 @
291ac30e
...
...
@@ -145,11 +145,14 @@ export class KeyValueOutputElement extends OutputElement {
}
}
// TODO@Isidor move common code for expression and variable into a super class
export
class
Expression
implements
debug
.
IExpression
{
static
DEFAULT_VALUE
=
'
not available
'
;
public
static
allValues
:
{
[
id
:
string
]:
string
}
=
{};
public
reference
:
number
;
public
available
:
boolean
;
public
valueChanged
:
boolean
;
private
_value
:
string
;
private
children
:
TPromise
<
debug
.
IExpression
[]
>
;
...
...
@@ -166,6 +169,8 @@ export class Expression implements debug.IExpression {
public
set
value
(
value
:
string
)
{
this
.
_value
=
massageValue
(
value
);
this
.
valueChanged
=
Expression
.
allValues
[
this
.
getId
()]
&&
Expression
.
allValues
[
this
.
getId
()]
!==
value
;
Expression
.
allValues
[
this
.
getId
()]
=
value
;
}
public
getId
():
string
{
...
...
@@ -341,6 +346,7 @@ export class Model extends ee.EventEmitter implements debug.IModel {
if
(
removeThreads
)
{
this
.
threads
=
{};
Variable
.
allValues
=
{};
Expression
.
allValues
=
{};
}
else
{
for
(
let
ref
in
this
.
threads
)
{
if
(
this
.
threads
.
hasOwnProperty
(
ref
))
{
...
...
@@ -612,7 +618,7 @@ export class Model extends ee.EventEmitter implements debug.IModel {
if
(
!
rsf
)
{
return
new
StackFrame
(
data
.
threadId
,
0
,
new
Source
({
name
:
'
unknown
'
}),
nls
.
localize
(
'
unknownStack
'
,
"
Unknown stack location
"
),
undefined
,
undefined
);
}
return
new
StackFrame
(
data
.
threadId
,
rsf
.
id
,
rsf
.
source
?
new
Source
(
rsf
.
source
)
:
new
Source
({
name
:
'
unknown
'
}),
rsf
.
name
,
rsf
.
line
,
rsf
.
column
);
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录