Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
1738c3e6
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1738c3e6
编写于
12月 06, 2017
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix #39569
上级
99352b66
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
51 addition
and
24 deletion
+51
-24
src/vs/workbench/node/extensionHostProcess.ts
src/vs/workbench/node/extensionHostProcess.ts
+17
-0
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
...nch/services/extensions/electron-browser/extensionHost.ts
+34
-24
未找到文件。
src/vs/workbench/node/extensionHostProcess.ts
浏览文件 @
1738c3e6
...
...
@@ -120,6 +120,8 @@ function connectToRenderer(protocol: IMessagePassingProtocol): TPromise<IRendere
});
}
patchExecArgv
();
createExtHostProtocol
().
then
(
protocol
=>
{
// connect to main side
return
connectToRenderer
(
protocol
);
...
...
@@ -129,3 +131,18 @@ createExtHostProtocol().then(protocol => {
onTerminate
=
()
=>
extensionHostMain
.
terminate
();
return
extensionHostMain
.
start
();
}).
done
(
null
,
err
=>
console
.
error
(
err
));
function
patchExecArgv
()
{
// when encountering the prevent-inspect flag we delete this
// and the prior flag
if
(
process
.
env
.
VSCODE_PREVENT_FOREIGN_INSPECT
)
{
for
(
let
i
=
0
;
i
<
process
.
execArgv
.
length
;
i
++
)
{
if
(
process
.
execArgv
[
i
].
match
(
/--inspect-brk=
\d
+|--inspect=
\d
+/
))
{
process
.
execArgv
.
splice
(
i
,
1
);
break
;
}
}
}
}
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
浏览文件 @
1738c3e6
...
...
@@ -131,10 +131,9 @@ export class ExtensionHostProcessWorker {
}
if
(
!
this
.
_messageProtocol
)
{
this
.
_messageProtocol
=
TPromise
.
join
<
any
>
([
this
.
_tryListenOnPipe
(),
this
.
_tryFindDebugPort
()]).
then
((
data
:
[
string
,
number
])
=>
{
this
.
_messageProtocol
=
TPromise
.
join
([
this
.
_tryListenOnPipe
(),
this
.
_tryFindDebugPort
()]).
then
(
data
=>
{
const
pipeName
=
data
[
0
];
// The port will be 0 if there's no need to debug or if a free port was not found
const
port
=
data
[
1
];
const
portData
=
data
[
1
];
const
opts
=
{
env
:
objects
.
mixin
(
objects
.
deepClone
(
process
.
env
),
{
...
...
@@ -152,12 +151,22 @@ export class ExtensionHostProcessWorker {
// We detach because we have noticed that when the renderer exits, its child processes
// (i.e. extension host) are taken down in a brutal fashion by the OS
detached
:
!!
isWindows
,
execArgv
:
port
?
[
'
--nolazy
'
,
(
this
.
_isExtensionDevDebugBrk
?
'
--inspect-brk=
'
:
'
--inspect=
'
)
+
port
]
:
undefined
,
execArgv
:
<
string
[]
>
undefined
,
silent
:
true
};
if
(
portData
.
actual
)
{
opts
.
execArgv
=
[
'
--nolazy
'
,
(
this
.
_isExtensionDevDebugBrk
?
'
--inspect-brk=
'
:
'
--inspect=
'
)
+
portData
.
actual
];
if
(
!
portData
.
expected
)
{
// No one asked for 'inspect' or 'inspect-brk', only us. We add another
// option such that the extension host can manipulate the execArgv array
opts
.
env
.
VSCODE_PREVENT_FOREIGN_INSPECT
=
true
;
}
}
const
crashReporterOptions
=
this
.
_crashReporterService
.
getChildProcessStartOptions
(
'
extensionHost
'
);
if
(
crashReporterOptions
)
{
opts
.
env
.
CRASH_REPORTER_START_OPTIONS
=
JSON
.
stringify
(
crashReporterOptions
);
...
...
@@ -208,16 +217,16 @@ export class ExtensionHostProcessWorker {
this
.
_extensionHostProcess
.
on
(
'
exit
'
,
(
code
:
number
,
signal
:
string
)
=>
this
.
_onExtHostProcessExit
(
code
,
signal
));
// Notify debugger that we are ready to attach to the process if we run a development extension
if
(
this
.
_isExtensionDevHost
&&
port
)
{
if
(
this
.
_isExtensionDevHost
&&
port
Data
.
actual
)
{
this
.
_broadcastService
.
broadcast
({
channel
:
EXTENSION_ATTACH_BROADCAST_CHANNEL
,
payload
:
{
debugId
:
this
.
_environmentService
.
debugExtensionHost
.
debugId
,
port
port
:
portData
.
actual
}
});
}
this
.
_inspectPort
=
port
;
this
.
_inspectPort
=
port
Data
.
actual
;
// Help in case we fail to start it
let
startupTimeoutHandle
:
number
;
...
...
@@ -261,26 +270,27 @@ export class ExtensionHostProcessWorker {
/**
* Find a free port if extension host debugging is enabled.
*/
private
_tryFindDebugPort
():
TPromise
<
number
>
{
const
extensionHostPort
=
this
.
_environmentService
.
debugExtensionHost
.
port
;
if
(
typeof
extensionHostPort
!==
'
number
'
)
{
return
TPromise
.
wrap
<
number
>
(
0
);
private
_tryFindDebugPort
():
TPromise
<
{
expected
:
number
;
actual
:
number
}
>
{
let
expected
:
number
;
let
startPort
=
9333
;
if
(
typeof
this
.
_environmentService
.
debugExtensionHost
.
port
===
'
number
'
)
{
startPort
=
expected
=
this
.
_environmentService
.
debugExtensionHost
.
port
;
}
return
new
TPromise
<
number
>
((
c
,
e
)
=>
{
return
findFreePort
(
extensionHos
tPort
,
10
/* try 10 ports */
,
5000
/* try up to 5 seconds */
).
then
(
port
=>
{
return
new
TPromise
((
c
,
e
)
=>
{
return
findFreePort
(
star
tPort
,
10
/* try 10 ports */
,
5000
/* try up to 5 seconds */
).
then
(
port
=>
{
if
(
!
port
)
{
console
.
warn
(
'
%c[Extension Host] %cCould not find a free port for debugging
'
,
'
color: blue
'
,
'
color: black
'
);
return
c
(
void
0
);
}
if
(
port
!==
extensionHostPort
)
{
console
.
warn
(
`%c[Extension Host] %cProvided debugging port
${
extensionHostPort
}
is not free, using
${
port
}
instead.`
,
'
color: blue
'
,
'
color: black
'
);
}
if
(
this
.
_isExtensionDevDebugBrk
)
{
console
.
warn
(
`%c[Extension Host] %cSTOPPED on first line for debugging on port
${
port
}
`
,
'
color: blue
'
,
'
color: black
'
);
}
else
{
console
.
info
(
`%c[Extension Host] %cdebugger listening on port
${
port
}
`
,
'
color: blue
'
,
'
color: black
'
);
if
(
expected
&&
port
!==
expected
)
{
console
.
warn
(
`%c[Extension Host] %cProvided debugging port
${
expected
}
is not free, using
${
port
}
instead.`
,
'
color: blue
'
,
'
color: black
'
);
}
if
(
this
.
_isExtensionDevDebugBrk
)
{
console
.
warn
(
`%c[Extension Host] %cSTOPPED on first line for debugging on port
${
port
}
`
,
'
color: blue
'
,
'
color: black
'
);
}
else
{
console
.
info
(
`%c[Extension Host] %cdebugger listening on port
${
port
}
`
,
'
color: blue
'
,
'
color: black
'
);
}
}
return
c
(
port
);
return
c
(
{
expected
,
actual
:
port
}
);
});
});
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录