Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
ec211900
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,体验更适合开发者的 AI 搜索 >>
提交
ec211900
编写于
1月 08, 2020
作者:
A
Andre Weinand
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improved error DA error reporting; fixes #87196
上级
f14dd3f7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
82 addition
and
74 deletion
+82
-74
src/vs/workbench/api/common/extHostDebugService.ts
src/vs/workbench/api/common/extHostDebugService.ts
+82
-74
未找到文件。
src/vs/workbench/api/common/extHostDebugService.ts
浏览文件 @
ec211900
...
...
@@ -337,7 +337,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
}
// make sure that only one factory for this type is registered
if
(
this
.
getAdapterFactoryByType
(
type
))
{
if
(
this
.
getAdapter
Descriptor
FactoryByType
(
type
))
{
throw
new
Error
(
`a DebugAdapterDescriptorFactory can only be registered once per a type.`
);
}
...
...
@@ -412,89 +412,92 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
const
session
=
await
this
.
getSession
(
sessionDto
);
return
this
.
getAdapterDescriptor
(
this
.
getAdapterFactoryByType
(
session
.
type
),
session
).
then
(
daDescriptor
=>
{
return
this
.
getAdapterDescriptor
(
this
.
getAdapter
Descriptor
FactoryByType
(
session
.
type
),
session
).
then
(
daDescriptor
=>
{
const
adapter
=
this
.
convertToDto
(
daDescriptor
);
if
(
!
daDescriptor
)
{
throw
new
Error
(
`Couldn't find a debug adapter descriptor for debug type '
${
session
.
type
}
' (extension might have failed to activate)`
);
}
const
adapterDescriptor
=
this
.
convertToDto
(
daDescriptor
);
const
da
:
AbstractDebugAdapter
|
undefined
=
this
.
createDebugAdapter
(
adapter
,
session
);
const
da
=
this
.
createDebugAdapter
(
adapterDescriptor
,
session
);
if
(
!
da
)
{
throw
new
Error
(
`Couldn't create a debug adapter for type '
${
session
.
type
}
'.`
);
}
const
debugAdapter
=
da
;
if
(
debugAdapter
)
{
this
.
_debugAdapters
.
set
(
debugAdapterHandle
,
debugAdapter
);
this
.
_debugAdapters
.
set
(
debugAdapterHandle
,
debugAdapter
);
return
this
.
getDebugAdapterTrackers
(
session
).
then
(
tracker
=>
{
return
this
.
getDebugAdapterTrackers
(
session
).
then
(
tracker
=>
{
if
(
tracker
)
{
this
.
_debugAdaptersTrackers
.
set
(
debugAdapterHandle
,
tracker
);
}
if
(
tracker
)
{
this
.
_debugAdaptersTrackers
.
set
(
debugAdapterHandle
,
tracker
);
}
debugAdapter
.
onMessage
(
async
message
=>
{
debugAdapter
.
onMessage
(
async
message
=>
{
if
(
message
.
type
===
'
request
'
&&
(
<
DebugProtocol
.
Request
>
message
).
command
===
'
handshake
'
)
{
if
(
message
.
type
===
'
request
'
&&
(
<
DebugProtocol
.
Request
>
message
).
command
===
'
handshake
'
)
{
const
request
=
<
DebugProtocol
.
Request
>
message
;
const
request
=
<
DebugProtocol
.
Request
>
message
;
const
response
:
DebugProtocol
.
Response
=
{
type
:
'
response
'
,
seq
:
0
,
command
:
request
.
command
,
request_seq
:
request
.
seq
,
success
:
true
};
const
response
:
DebugProtocol
.
Response
=
{
type
:
'
response
'
,
seq
:
0
,
command
:
request
.
command
,
request_seq
:
request
.
seq
,
success
:
true
};
if
(
!
this
.
_signService
)
{
this
.
_signService
=
this
.
createSignService
();
}
if
(
!
this
.
_signService
)
{
this
.
_signService
=
this
.
createSignService
();
}
try
{
if
(
this
.
_signService
)
{
const
signature
=
await
this
.
_signService
.
sign
(
request
.
arguments
.
value
);
response
.
body
=
{
signature
:
signature
};
debugAdapter
.
sendResponse
(
response
);
}
else
{
throw
new
Error
(
'
no signer
'
);
}
}
catch
(
e
)
{
response
.
success
=
false
;
response
.
message
=
e
.
message
;
try
{
if
(
this
.
_signService
)
{
const
signature
=
await
this
.
_signService
.
sign
(
request
.
arguments
.
value
);
response
.
body
=
{
signature
:
signature
};
debugAdapter
.
sendResponse
(
response
);
}
else
{
throw
new
Error
(
'
no signer
'
);
}
}
else
{
if
(
tracker
&&
tracker
.
onDidSendMessage
)
{
tracker
.
onDidSendMessage
(
message
);
}
// DA -> VS Code
message
=
convertToVSCPaths
(
message
,
true
);
mythis
.
_debugServiceProxy
.
$acceptDAMessage
(
debugAdapterHandle
,
message
);
}
catch
(
e
)
{
response
.
success
=
false
;
response
.
message
=
e
.
message
;
debugAdapter
.
sendResponse
(
response
);
}
});
debugAdapter
.
onError
(
err
=>
{
if
(
tracker
&&
tracker
.
onError
)
{
tracker
.
onError
(
err
);
}
this
.
_debugServiceProxy
.
$acceptDAError
(
debugAdapterHandle
,
err
.
name
,
err
.
message
,
err
.
stack
);
});
debugAdapter
.
onExit
((
code
:
number
|
null
)
=>
{
if
(
tracker
&&
tracker
.
onExit
)
{
tracker
.
onExit
(
withNullAsUndefined
(
code
),
undefined
);
}
else
{
if
(
tracker
&&
tracker
.
onDidSendMessage
)
{
tracker
.
onDidSendMessage
(
message
);
}
this
.
_debugServiceProxy
.
$acceptDAExit
(
debugAdapterHandle
,
withNullAsUndefined
(
code
),
undefined
);
});
if
(
tracker
&&
tracker
.
onWillStartSession
)
{
tracker
.
onWillStartSession
();
}
// DA -> VS Code
message
=
convertToVSCPaths
(
message
,
true
);
return
debugAdapter
.
startSession
();
mythis
.
_debugServiceProxy
.
$acceptDAMessage
(
debugAdapterHandle
,
message
);
}
});
debugAdapter
.
onError
(
err
=>
{
if
(
tracker
&&
tracker
.
onError
)
{
tracker
.
onError
(
err
);
}
this
.
_debugServiceProxy
.
$acceptDAError
(
debugAdapterHandle
,
err
.
name
,
err
.
message
,
err
.
stack
);
});
debugAdapter
.
onExit
((
code
:
number
|
null
)
=>
{
if
(
tracker
&&
tracker
.
onExit
)
{
tracker
.
onExit
(
withNullAsUndefined
(
code
),
undefined
);
}
this
.
_debugServiceProxy
.
$acceptDAExit
(
debugAdapterHandle
,
withNullAsUndefined
(
code
),
undefined
);
});
}
return
undefined
;
if
(
tracker
&&
tracker
.
onWillStartSession
)
{
tracker
.
onWillStartSession
();
}
return
debugAdapter
.
startSession
();
});
});
}
...
...
@@ -663,13 +666,18 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
});
}
public
async
$provideDebugAdapter
(
adapter
Provider
Handle
:
number
,
sessionDto
:
IDebugSessionDto
):
Promise
<
IAdapterDescriptor
>
{
const
adapter
Provider
=
this
.
getAdapterProviderByHandle
(
adapterProvider
Handle
);
if
(
!
adapter
Provider
)
{
return
Promise
.
reject
(
new
Error
(
'
no
handler found
'
));
public
async
$provideDebugAdapter
(
adapter
Factory
Handle
:
number
,
sessionDto
:
IDebugSessionDto
):
Promise
<
IAdapterDescriptor
>
{
const
adapter
DescriptorFactory
=
this
.
getAdapterDescriptorFactoryByHandle
(
adapterFactory
Handle
);
if
(
!
adapter
DescriptorFactory
)
{
return
Promise
.
reject
(
new
Error
(
'
no
adapter descriptor factory found for handle
'
));
}
const
session
=
await
this
.
getSession
(
sessionDto
);
return
this
.
getAdapterDescriptor
(
adapterProvider
,
session
).
then
(
x
=>
this
.
convertToDto
(
x
));
return
this
.
getAdapterDescriptor
(
adapterDescriptorFactory
,
session
).
then
(
adapterDescriptor
=>
{
if
(
!
adapterDescriptor
)
{
throw
new
Error
(
`Couldn't find a debug adapter descriptor for debug type '
${
session
.
type
}
'`
);
}
return
this
.
convertToDto
(
adapterDescriptor
);
});
}
public
async
$acceptDebugSessionStarted
(
sessionDto
:
IDebugSessionDto
):
Promise
<
void
>
{
...
...
@@ -709,7 +717,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
// private & dto helpers
private
convertToDto
(
x
:
vscode
.
DebugAdapterDescriptor
|
undefined
):
IAdapterDescriptor
{
private
convertToDto
(
x
:
vscode
.
DebugAdapterDescriptor
):
IAdapterDescriptor
{
if
(
x
instanceof
DebugAdapterExecutable
)
{
return
<
IDebugAdapterExecutable
>
{
...
...
@@ -734,7 +742,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
}
}
private
getAdapterFactoryByType
(
type
:
string
):
vscode
.
DebugAdapterDescriptorFactory
|
undefined
{
private
getAdapter
Descriptor
FactoryByType
(
type
:
string
):
vscode
.
DebugAdapterDescriptorFactory
|
undefined
{
const
results
=
this
.
_adapterFactories
.
filter
(
p
=>
p
.
type
===
type
);
if
(
results
.
length
>
0
)
{
return
results
[
0
].
factory
;
...
...
@@ -742,7 +750,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
return
undefined
;
}
private
getAdapter
Provider
ByHandle
(
handle
:
number
):
vscode
.
DebugAdapterDescriptorFactory
|
undefined
{
private
getAdapter
DescriptorFactory
ByHandle
(
handle
:
number
):
vscode
.
DebugAdapterDescriptorFactory
|
undefined
{
const
results
=
this
.
_adapterFactories
.
filter
(
p
=>
p
.
handle
===
handle
);
if
(
results
.
length
>
0
)
{
return
results
[
0
].
factory
;
...
...
@@ -804,7 +812,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
});
}
private
async
getAdapterDescriptor
(
adapter
Provider
:
vscode
.
DebugAdapterDescriptorFactory
|
undefined
,
session
:
ExtHostDebugSession
):
Promise
<
vscode
.
DebugAdapterDescriptor
|
undefined
>
{
private
async
getAdapterDescriptor
(
adapter
DescriptorFactory
:
vscode
.
DebugAdapterDescriptorFactory
|
undefined
,
session
:
ExtHostDebugSession
):
Promise
<
vscode
.
DebugAdapterDescriptor
|
undefined
>
{
// a "debugServer" attribute in the launch config takes precedence
const
serverPort
=
session
.
configuration
.
debugServer
;
...
...
@@ -824,9 +832,9 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
});
}
if
(
adapter
Provider
)
{
if
(
adapter
DescriptorFactory
)
{
const
extensionRegistry
=
await
this
.
_extensionService
.
getExtensionRegistry
();
return
asPromise
(()
=>
adapter
Provider
.
createDebugAdapterDescriptor
(
session
,
this
.
daExecutableFromPackage
(
session
,
extensionRegistry
))).
then
(
daDescriptor
=>
{
return
asPromise
(()
=>
adapter
DescriptorFactory
.
createDebugAdapterDescriptor
(
session
,
this
.
daExecutableFromPackage
(
session
,
extensionRegistry
))).
then
(
daDescriptor
=>
{
if
(
daDescriptor
)
{
return
daDescriptor
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录