Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
d2d69a5b
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,发现更多精彩内容 >>
提交
d2d69a5b
编写于
5月 05, 2020
作者:
I
isidor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
debug: introduce debugTelemetry
上级
719ac741
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
91 addition
and
78 deletion
+91
-78
src/vs/workbench/contrib/debug/browser/debugService.ts
src/vs/workbench/contrib/debug/browser/debugService.ts
+8
-78
src/vs/workbench/contrib/debug/common/debugTelemetry.ts
src/vs/workbench/contrib/debug/common/debugTelemetry.ts
+83
-0
未找到文件。
src/vs/workbench/contrib/debug/browser/debugService.ts
浏览文件 @
d2d69a5b
...
...
@@ -15,7 +15,6 @@ import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
import
{
IExtensionService
}
from
'
vs/workbench/services/extensions/common/extensions
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
FileChangesEvent
,
FileChangeType
,
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
DebugModel
,
FunctionBreakpoint
,
Breakpoint
,
DataBreakpoint
}
from
'
vs/workbench/contrib/debug/common/debugModel
'
;
import
{
ViewModel
}
from
'
vs/workbench/contrib/debug/common/debugViewModel
'
;
import
*
as
debugactions
from
'
vs/workbench/contrib/debug/browser/debugActions
'
;
...
...
@@ -34,7 +33,7 @@ import { IAction } from 'vs/base/common/actions';
import
{
deepClone
,
equals
}
from
'
vs/base/common/objects
'
;
import
{
DebugSession
}
from
'
vs/workbench/contrib/debug/browser/debugSession
'
;
import
{
dispose
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IDebugService
,
State
,
IDebugSession
,
CONTEXT_DEBUG_TYPE
,
CONTEXT_DEBUG_STATE
,
CONTEXT_IN_DEBUG_MODE
,
IThread
,
IDebugConfiguration
,
VIEWLET_ID
,
DEBUG_PANEL_ID
,
IConfig
,
ILaunch
,
IViewModel
,
IConfigurationManager
,
IDebugModel
,
IEnablement
,
IBreakpoint
,
IBreakpointData
,
ICompound
,
I
GlobalConfig
,
IStackFrame
,
AdapterEndEvent
,
getStateLabel
,
IDebugSessionOptions
,
CONTEXT_DEBUG_UX
,
REPL_VIEW_ID
,
CONTEXT_BREAKPOINTS_EXIST
}
from
'
vs/workbench/contrib/debug/common/debug
'
;
import
{
IDebugService
,
State
,
IDebugSession
,
CONTEXT_DEBUG_TYPE
,
CONTEXT_DEBUG_STATE
,
CONTEXT_IN_DEBUG_MODE
,
IThread
,
IDebugConfiguration
,
VIEWLET_ID
,
DEBUG_PANEL_ID
,
IConfig
,
ILaunch
,
IViewModel
,
IConfigurationManager
,
IDebugModel
,
IEnablement
,
IBreakpoint
,
IBreakpointData
,
ICompound
,
I
StackFrame
,
getStateLabel
,
IDebugSessionOptions
,
CONTEXT_DEBUG_UX
,
REPL_VIEW_ID
,
CONTEXT_BREAKPOINTS_EXIST
}
from
'
vs/workbench/contrib/debug/common/debug
'
;
import
{
getExtensionHostDebugSession
}
from
'
vs/workbench/contrib/debug/common/debugUtils
'
;
import
{
isErrorWithActions
}
from
'
vs/base/common/errorsWithActions
'
;
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
...
...
@@ -46,6 +45,7 @@ import { IActivityService, NumberBadge } from 'vs/workbench/services/activity/co
import
{
IViewsService
}
from
'
vs/workbench/common/views
'
;
import
{
generateUuid
}
from
'
vs/base/common/uuid
'
;
import
{
DebugStorage
}
from
'
vs/workbench/contrib/debug/common/debugStorage
'
;
import
{
DebugTelemetry
}
from
'
vs/workbench/contrib/debug/common/debugTelemetry
'
;
export
class
DebugService
implements
IDebugService
{
_serviceBrand
:
undefined
;
...
...
@@ -57,6 +57,7 @@ export class DebugService implements IDebugService {
private
debugStorage
:
DebugStorage
;
private
model
:
DebugModel
;
private
viewModel
:
ViewModel
;
private
telemetry
:
DebugTelemetry
;
private
taskRunner
:
DebugTaskRunner
;
private
configurationManager
:
ConfigurationManager
;
private
toDispose
:
IDisposable
[];
...
...
@@ -79,7 +80,6 @@ export class DebugService implements IDebugService {
@
INotificationService
private
readonly
notificationService
:
INotificationService
,
@
IDialogService
private
readonly
dialogService
:
IDialogService
,
@
IWorkbenchLayoutService
private
readonly
layoutService
:
IWorkbenchLayoutService
,
@
ITelemetryService
private
readonly
telemetryService
:
ITelemetryService
,
@
IWorkspaceContextService
private
readonly
contextService
:
IWorkspaceContextService
,
@
IContextKeyService
contextKeyService
:
IContextKeyService
,
@
ILifecycleService
private
readonly
lifecycleService
:
ILifecycleService
,
...
...
@@ -110,6 +110,7 @@ export class DebugService implements IDebugService {
this
.
debugStorage
=
this
.
instantiationService
.
createInstance
(
DebugStorage
);
this
.
model
=
this
.
instantiationService
.
createInstance
(
DebugModel
,
this
.
debugStorage
);
this
.
telemetry
=
this
.
instantiationService
.
createInstance
(
DebugTelemetry
,
this
.
model
);
const
setBreakpointsExistContext
=
()
=>
this
.
breakpointsExist
.
set
(
!!
(
this
.
model
.
getBreakpoints
().
length
||
this
.
model
.
getDataBreakpoints
().
length
||
this
.
model
.
getFunctionBreakpoints
().
length
));
this
.
breakpointsExist
=
CONTEXT_BREAKPOINTS_EXIST
.
bindTo
(
contextKeyService
);
setBreakpointsExistContext
();
...
...
@@ -491,8 +492,6 @@ export class DebugService implements IDebugService {
// since the initialized response has arrived announce the new Session (including extensions)
this
.
_onDidNewSession
.
fire
(
session
);
await
this
.
telemetryDebugSessionStart
(
root
,
session
.
configuration
.
type
);
return
true
;
}
catch
(
error
)
{
...
...
@@ -522,6 +521,8 @@ export class DebugService implements IDebugService {
try
{
await
session
.
initialize
(
dbgr
!
);
await
session
.
launchOrAttach
(
session
.
configuration
);
await
this
.
telemetry
.
logDebugSessionStart
(
dbgr
!
,
session
.
root
);
if
(
forceFocus
||
!
this
.
viewModel
.
focusedSession
||
session
.
parentSession
===
this
.
viewModel
.
focusedSession
)
{
await
this
.
focusStackFrame
(
undefined
,
undefined
,
session
);
}
...
...
@@ -561,7 +562,7 @@ export class DebugService implements IDebugService {
this
.
extensionHostDebugService
.
close
(
extensionDebugSession
.
getId
());
}
this
.
telemetryDebugSessionStop
(
session
,
adapterExitEvent
);
this
.
telemetry
.
log
DebugSessionStop
(
session
,
adapterExitEvent
);
if
(
session
.
configuration
.
postDebugTask
)
{
try
{
...
...
@@ -819,7 +820,7 @@ export class DebugService implements IDebugService {
async
addBreakpoints
(
uri
:
uri
,
rawBreakpoints
:
IBreakpointData
[],
context
:
string
):
Promise
<
IBreakpoint
[]
>
{
const
breakpoints
=
this
.
model
.
addBreakpoints
(
uri
,
rawBreakpoints
);
breakpoints
.
forEach
(
bp
=>
aria
.
status
(
nls
.
localize
(
'
breakpointAdded
'
,
"
Added breakpoint, line {0}, file {1}
"
,
bp
.
lineNumber
,
uri
.
fsPath
)));
breakpoints
.
forEach
(
bp
=>
this
.
telemetryDebugAddBreakpoint
(
bp
,
context
));
breakpoints
.
forEach
(
bp
=>
this
.
telemetry
.
log
DebugAddBreakpoint
(
bp
,
context
));
await
this
.
sendBreakpoints
(
uri
);
this
.
debugStorage
.
storeBreakpoints
(
this
.
model
);
...
...
@@ -942,77 +943,6 @@ export class DebugService implements IDebugService {
}
});
}
//---- telemetry
private
telemetryDebugSessionStart
(
root
:
IWorkspaceFolder
|
undefined
,
type
:
string
):
Promise
<
void
>
{
const
dbgr
=
this
.
configurationManager
.
getDebugger
(
type
);
if
(
!
dbgr
)
{
return
Promise
.
resolve
();
}
const
extension
=
dbgr
.
getMainExtensionDescriptor
();
/* __GDPR__
"debugSessionStart" : {
"type": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"breakpointCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"exceptionBreakpoints": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"watchExpressionsCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"extensionName": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
"isBuiltin": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true},
"launchJsonExists": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugSessionStart
'
,
{
type
:
type
,
breakpointCount
:
this
.
model
.
getBreakpoints
().
length
,
exceptionBreakpoints
:
this
.
model
.
getExceptionBreakpoints
(),
watchExpressionsCount
:
this
.
model
.
getWatchExpressions
().
length
,
extensionName
:
extension
.
identifier
.
value
,
isBuiltin
:
extension
.
isBuiltin
,
launchJsonExists
:
root
&&
!!
this
.
configurationService
.
getValue
<
IGlobalConfig
>
(
'
launch
'
,
{
resource
:
root
.
uri
})
});
}
private
telemetryDebugSessionStop
(
session
:
IDebugSession
,
adapterExitEvent
:
AdapterEndEvent
):
Promise
<
any
>
{
const
breakpoints
=
this
.
model
.
getBreakpoints
();
/* __GDPR__
"debugSessionStop" : {
"type" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"success": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"sessionLengthInSeconds": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"breakpointCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"watchExpressionsCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugSessionStop
'
,
{
type
:
session
&&
session
.
configuration
.
type
,
success
:
adapterExitEvent
.
emittedStopped
||
breakpoints
.
length
===
0
,
sessionLengthInSeconds
:
adapterExitEvent
.
sessionLengthInSeconds
,
breakpointCount
:
breakpoints
.
length
,
watchExpressionsCount
:
this
.
model
.
getWatchExpressions
().
length
});
}
private
telemetryDebugAddBreakpoint
(
breakpoint
:
IBreakpoint
,
context
:
string
):
Promise
<
any
>
{
/* __GDPR__
"debugAddBreakpoint" : {
"context": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"hasCondition": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"hasHitCondition": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"hasLogMessage": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugAddBreakpoint
'
,
{
context
:
context
,
hasCondition
:
!!
breakpoint
.
condition
,
hasHitCondition
:
!!
breakpoint
.
hitCondition
,
hasLogMessage
:
!!
breakpoint
.
logMessage
});
}
}
export
function
getStackFrameThreadAndSessionToFocus
(
model
:
IDebugModel
,
stackFrame
:
IStackFrame
|
undefined
,
thread
?:
IThread
,
session
?:
IDebugSession
):
{
stackFrame
:
IStackFrame
|
undefined
,
thread
:
IThread
|
undefined
,
session
:
IDebugSession
|
undefined
}
{
...
...
src/vs/workbench/contrib/debug/common/debugTelemetry.ts
0 → 100644
浏览文件 @
d2d69a5b
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
IDebugModel
,
IDebugSession
,
AdapterEndEvent
,
IBreakpoint
,
IGlobalConfig
}
from
'
vs/workbench/contrib/debug/common/debug
'
;
import
{
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IConfigurationService
}
from
'
vs/platform/configuration/common/configuration
'
;
import
{
Debugger
}
from
'
vs/workbench/contrib/debug/common/debugger
'
;
export
class
DebugTelemetry
{
constructor
(
private
readonly
model
:
IDebugModel
,
@
ITelemetryService
private
readonly
telemetryService
:
ITelemetryService
,
@
IConfigurationService
private
readonly
configurationService
:
IConfigurationService
)
{
}
logDebugSessionStart
(
dbgr
:
Debugger
,
root
:
IWorkspaceFolder
|
undefined
):
Promise
<
void
>
{
const
extension
=
dbgr
.
getMainExtensionDescriptor
();
/* __GDPR__
"debugSessionStart" : {
"type": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"breakpointCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"exceptionBreakpoints": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"watchExpressionsCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"extensionName": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" },
"isBuiltin": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true},
"launchJsonExists": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugSessionStart
'
,
{
type
:
dbgr
.
type
,
breakpointCount
:
this
.
model
.
getBreakpoints
().
length
,
exceptionBreakpoints
:
this
.
model
.
getExceptionBreakpoints
(),
watchExpressionsCount
:
this
.
model
.
getWatchExpressions
().
length
,
extensionName
:
extension
.
identifier
.
value
,
isBuiltin
:
extension
.
isBuiltin
,
launchJsonExists
:
root
&&
!!
this
.
configurationService
.
getValue
<
IGlobalConfig
>
(
'
launch
'
,
{
resource
:
root
.
uri
})
});
}
logDebugSessionStop
(
session
:
IDebugSession
,
adapterExitEvent
:
AdapterEndEvent
):
Promise
<
any
>
{
const
breakpoints
=
this
.
model
.
getBreakpoints
();
/* __GDPR__
"debugSessionStop" : {
"type" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"success": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"sessionLengthInSeconds": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"breakpointCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"watchExpressionsCount": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugSessionStop
'
,
{
type
:
session
&&
session
.
configuration
.
type
,
success
:
adapterExitEvent
.
emittedStopped
||
breakpoints
.
length
===
0
,
sessionLengthInSeconds
:
adapterExitEvent
.
sessionLengthInSeconds
,
breakpointCount
:
breakpoints
.
length
,
watchExpressionsCount
:
this
.
model
.
getWatchExpressions
().
length
});
}
logDebugAddBreakpoint
(
breakpoint
:
IBreakpoint
,
context
:
string
):
Promise
<
any
>
{
/* __GDPR__
"debugAddBreakpoint" : {
"context": { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"hasCondition": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"hasHitCondition": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"hasLogMessage": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }
}
*/
return
this
.
telemetryService
.
publicLog
(
'
debugAddBreakpoint
'
,
{
context
:
context
,
hasCondition
:
!!
breakpoint
.
condition
,
hasHitCondition
:
!!
breakpoint
.
hitCondition
,
hasLogMessage
:
!!
breakpoint
.
logMessage
});
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录