Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
d212bf7c
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
d212bf7c
编写于
10月 07, 2019
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
simplify find port, remote hacky env variables
上级
85f70fd2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
51 deletion
+33
-51
src/vs/workbench/contrib/debug/node/debugAdapter.ts
src/vs/workbench/contrib/debug/node/debugAdapter.ts
+0
-1
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
...nch/services/extensions/electron-browser/extensionHost.ts
+33
-36
src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
...nch/services/extensions/node/extensionHostProcessSetup.ts
+0
-14
未找到文件。
src/vs/workbench/contrib/debug/node/debugAdapter.ts
浏览文件 @
d212bf7c
...
...
@@ -178,7 +178,6 @@ export class ExecutableDebugAdapter extends StreamDebugAdapter {
if
(
options
.
env
)
{
env
=
objects
.
mixin
(
env
,
options
.
env
);
}
delete
env
.
VSCODE_PREVENT_FOREIGN_INSPECT
;
if
(
command
===
'
node
'
)
{
if
(
Array
.
isArray
(
args
)
&&
args
.
length
>
0
)
{
...
...
src/vs/workbench/services/extensions/electron-browser/extensionHost.ts
浏览文件 @
d212bf7c
...
...
@@ -16,7 +16,7 @@ import * as platform from 'vs/base/common/platform';
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IRemoteConsoleLog
,
log
}
from
'
vs/base/common/console
'
;
import
{
logRemoteEntry
}
from
'
vs/workbench/services/extensions/common/remoteConsoleUtil
'
;
import
{
findFreePort
,
randomPort
}
from
'
vs/base/node/ports
'
;
import
{
findFreePort
}
from
'
vs/base/node/ports
'
;
import
{
IMessagePassingProtocol
}
from
'
vs/base/parts/ipc/common/ipc
'
;
import
{
PersistentProtocol
}
from
'
vs/base/parts/ipc/common/ipc.net
'
;
import
{
generateRandomPipeName
,
NodeSocket
}
from
'
vs/base/parts/ipc/node/ipc.net
'
;
...
...
@@ -129,10 +129,10 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
if
(
!
this
.
_messageProtocol
)
{
this
.
_messageProtocol
=
Promise
.
all
([
this
.
_tryListenOnPipe
(),
!
this
.
_environmentService
.
args
[
'
disable-inspect
'
]
?
this
.
_tryFindDebugPort
()
:
Promise
.
resolve
(
null
)
!
this
.
_environmentService
.
args
[
'
disable-inspect
'
]
?
this
.
_tryFindDebugPort
()
:
0
]).
then
(
data
=>
{
const
pipeName
=
data
[
0
];
const
port
Data
=
data
[
1
];
const
port
Number
=
data
[
1
];
const
opts
=
{
env
:
objects
.
mixin
(
objects
.
deepClone
(
process
.
env
),
{
...
...
@@ -153,16 +153,11 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
silent
:
true
};
if
(
port
Data
&&
portData
.
actual
)
{
if
(
port
Number
!==
0
)
{
opts
.
execArgv
=
[
'
--nolazy
'
,
(
this
.
_isExtensionDevDebugBrk
?
'
--inspect-brk=
'
:
'
--inspect=
'
)
+
port
Data
.
actual
(
this
.
_isExtensionDevDebugBrk
?
'
--inspect-brk=
'
:
'
--inspect=
'
)
+
port
Number
];
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
=
undefined
;
// TODO@electron pass this in as options to the extension host after verifying this actually works
...
...
@@ -221,11 +216,11 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
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
(
port
Data
)
{
if
(
this
.
_isExtensionDevHost
&&
port
Data
.
actual
&&
this
.
_isExtensionDevDebug
&&
this
.
_environmentService
.
debugExtensionHost
.
debugId
)
{
this
.
_extensionHostDebugService
.
attachSession
(
this
.
_environmentService
.
debugExtensionHost
.
debugId
,
port
Data
.
actual
);
if
(
port
Number
)
{
if
(
this
.
_isExtensionDevHost
&&
port
Number
&&
this
.
_isExtensionDevDebug
&&
this
.
_environmentService
.
debugExtensionHost
.
debugId
)
{
this
.
_extensionHostDebugService
.
attachSession
(
this
.
_environmentService
.
debugExtensionHost
.
debugId
,
port
Number
);
}
this
.
_inspectPort
=
port
Data
.
actual
;
this
.
_inspectPort
=
port
Number
;
this
.
_onDidSetInspectPort
.
fire
();
}
...
...
@@ -279,29 +274,31 @@ export class ExtensionHostProcessWorker implements IExtensionHostStarter {
/**
* Find a free port if extension host debugging is enabled.
*/
private
_tryFindDebugPort
():
Promise
<
{
expected
:
number
;
actual
:
number
}
>
{
let
expected
:
number
;
let
startPort
=
randomPort
();
if
(
typeof
this
.
_environmentService
.
debugExtensionHost
.
port
===
'
number
'
)
{
startPort
=
expected
=
this
.
_environmentService
.
debugExtensionHost
.
port
;
private
async
_tryFindDebugPort
():
Promise
<
number
>
{
if
(
typeof
this
.
_environmentService
.
debugExtensionHost
.
port
!==
'
number
'
)
{
return
0
;
}
return
new
Promise
(
resolve
=>
{
return
findFreePort
(
startPort
,
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:
'
);
}
else
{
if
(
expected
&&
port
!==
expected
)
{
console
.
warn
(
`%c[Extension Host] %cProvided debugging port
${
expected
}
is not free, using
${
port
}
instead.`
,
'
color: blue
'
,
'
color:
'
);
}
if
(
this
.
_isExtensionDevDebugBrk
)
{
console
.
warn
(
`%c[Extension Host] %cSTOPPED on first line for debugging on port
${
port
}
`
,
'
color: blue
'
,
'
color:
'
);
}
else
{
console
.
info
(
`%c[Extension Host] %cdebugger listening on port
${
port
}
`
,
'
color: blue
'
,
'
color:
'
);
}
}
return
resolve
({
expected
,
actual
:
port
});
});
});
const
expected
=
this
.
_environmentService
.
debugExtensionHost
.
port
;
const
port
=
await
findFreePort
(
expected
,
10
/* try 10 ports */
,
5000
/* try up to 5 seconds */
);
if
(
!
port
)
{
console
.
warn
(
'
%c[Extension Host] %cCould not find a free port for debugging
'
,
'
color: blue
'
,
'
color:
'
);
return
0
;
}
if
(
port
!==
expected
)
{
console
.
warn
(
`%c[Extension Host] %cProvided debugging port
${
expected
}
is not free, using
${
port
}
instead.`
,
'
color: blue
'
,
'
color:
'
);
}
if
(
this
.
_isExtensionDevDebugBrk
)
{
console
.
warn
(
`%c[Extension Host] %cSTOPPED on first line for debugging on port
${
port
}
`
,
'
color: blue
'
,
'
color:
'
);
}
else
{
console
.
info
(
`%c[Extension Host] %cdebugger listening on port
${
port
}
`
,
'
color: blue
'
,
'
color:
'
);
}
return
port
;
}
private
_tryExtHostHandshake
():
Promise
<
PersistentProtocol
>
{
...
...
src/vs/workbench/services/extensions/node/extensionHostProcessSetup.ts
浏览文件 @
d212bf7c
...
...
@@ -275,20 +275,6 @@ function connectToRenderer(protocol: IMessagePassingProtocol): Promise<IRenderer
});
}
// patchExecArgv:
(
function
()
{
// 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
;
}
}
}
})();
export
async
function
startExtensionHostProcess
():
Promise
<
void
>
{
const
protocol
=
await
createExtHostProtocol
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录