调试器扩展
调试配置管理。 启动/停止和步进的调试操作。 源、函数、条件、内联断点和日志点。 堆栈跟踪,包括多线程和多进程支持。 在视图和悬停中浏览复杂的数据结构。 源中以悬停或内联形式显示的变量值。 管理手表表情。 用于自动完成交互式评估的调试控制台。
VS代码的调试体系结构
调试器支持的语言列表。 VS代码使UI能够为这些语言设置断点。 调试器引入的调试配置属性的JSON模式。 VS Code使用此模式验证launch.json编辑器中的配置,并提供IntelliSense。 请注意,JSON模式构造 $参考 和 定义 不支持。 VS Code创建的初始launch.json的默认调试配置。 调试用户可以添加到launch.json文件中的配置片段。 可以在调试配置中使用的变量的声明。
为VS Code创建的初始launch.json动态生成默认调试配置。 确定要动态使用的调试适配器。 在将调试配置传递给调试适配器之前,请验证或修改这些配置。 与调试适配器通信。 向调试控制台发送消息。
模拟调试扩展
切换到Extensions viewlet并键入“mock”以搜索mock Debug扩展, “安装”和“重新加载”扩展。
创建新的空文件夹 模拟测试 并在VS Code中打开它。 创建文件 自述.md 并输入几行任意文本。 切换到“运行和调试”视图( ⇧⌘ D类 (Windows、Linux Ctrl+Shift+D组合键 ) )并选择 创建launch.json文件 链接。 VSCode将允许您选择“调试器”以创建默认启动配置。 选择“模拟调试”。 按下绿色按钮 起点 按钮,然后 输入 确认建议的文件 自述.md .
切换到Extensions视图,单击Mock Debug扩展的gear图标。 运行“卸载”操作,然后“重新加载”窗口。
模拟调试的开发设置
git克隆 https://github.com/microsoft/vscode-mock-debug.git
光盘 vscode模块
纱线
package.json包 是模拟调试扩展的清单: 它列出了mock-debug扩展的贡献。 这个 编译 和 看 脚本用于将TypeScript源转换为 外面的 文件夹并监视后续的源代码修改。 依赖关系 vscode-debug协议 , vscode去糖适配器 、和 vscode-debugadapter测试支持 是NPM模块,可以简化基于节点的调试适配器的开发。
src/mockRuntime.ts 是一个 嘲弄 使用简单的调试API运行时。 代码 适应 调试适配器协议的运行时位于 src/mockDebug.ts 。这里是DAP各种请求的处理程序。 由于调试器扩展的实现存在于调试适配器中,因此根本不需要扩展代码(即在扩展主机进程中运行的代码)。 然而,模拟调试有一个小 src/extension.ts(源代码/扩展名.ts) 因为它说明了在调试器扩展的扩展代码中可以做什么。
{
“版本” : "0.2.0" ,
“配置” : [
{
“类型” : “模拟” ,
“请求” : “启动” ,
“名称” : “模拟测试” ,
“程序” : “${workspaceFolder}/readme.md” ,
“stopOnEntry”(停止进入) : 真的 ,
“调试服务器” : 4711
}
]
}
调试器扩展的package.json剖析
{
“名称” : “模拟调试” ,
“显示名称” : “模拟调试” ,
“版本” : "0.24.0" ,
“出版商” : "..." ,
“描述” : “用于开发VS代码调试适配器的启动程序扩展。” ,
“作者” : {
“名称” : "..." ,
“电子邮件” : "..."
},
“发动机” : {
“vscode” : "^1.17.0" ,
“节点” : "^7.9.0"
},
“图标” : “images/mock-debug-icon.png” ,
“类别” : [ “调试器” ],
“贡献” : {
“断点” : [{ “语言” : “降价” }],
“调试器” : [
{
“类型” : “模拟” ,
“标签” : “模拟调试” ,
“程序” : “./out/mockDebug.js” ,
“运行时” : “节点” ,
“配置属性” : {
“启动” : {
“必需” : [ “程序” ],
“属性” : {
“程序” : {
“类型” : “字符串” ,
“描述” : “文本文件的绝对路径。” ,
“默认” : “${workspaceFolder}/${command:AskForProgramName}”
},
“stopOnEntry”(停止进入) : {
“类型” : “布尔值” ,
“描述” : “启动后自动停止。” ,
“默认” : 真的
}
}
}
},
“initialConfigurations”(初始配置) : [
{
“类型” : “模拟” ,
“请求” : “启动” ,
“名称” : “询问文件名” ,
“程序” : “${workspaceFolder}/${command:AskForProgramName}” ,
“stopOnEntry”(停止进入) : 真的
}
],
“配置代码段” : [
{
“标签” : “模拟调试:启动” ,
“描述” : “用于启动模拟调试程序的新配置” ,
“主体” : {
“类型” : “模拟” ,
“请求” : “启动” ,
“名称” : “${2:启动程序}” ,
“程序” : "^ \"\\ ${workspaceFolder}/${1:程序} \" "
}
}
],
“变量” : {
“请求程序名” : “扩展名.mock-debug.getProgramName”
}
}
]
},
“激活事件” : [ “onDebug”(正在调试) , “onCommand:extension.mock-debug.getProgramName” ]
}
-
如果程序以独立于平台的方式实现,例如作为在所有支持的平台上可用的运行时上运行的程序,则可以通过 运行时 属性。 截至目前,VS Code支持 节点 和 单声道 运行时。 上面的模拟调试适配器使用了这种方法。 -
如果DA实现需要不同平台上的不同可执行文件 程序 属性可以用于以下特定平台: “调试器” : [{ “类型” : “gdb” , “窗口” : { “程序” : “./bin/gdbDebug.exe” , }, “osx” : { “程序” : “./bin/gdbDebug.sh” , }, “linux” : { “程序” : “./bin/gdbDebug.sh” , } }] -
两种方法的组合也是可能的。 以下示例来自Mono DA,它是作为一个需要在macOS和Linux上运行但不需要在Windows上运行的Mono应用程序实现的: “调试器” : [{ “类型” : “单声道” , “程序” : “./bin/monoDebug.exe” , “osx” : { “运行时” : “单声道” }, “linux” : { “运行时” : “单声道” } }]
. The
vscode码 . 命令 . register命令 ( '扩展名.mock-debug.getProgramName' , 配置 => {
返回 vscode码 . 窗口 . 显示输入框 ({
占位符: '请输入工作区文件夹中降价文件的名称' ,
值: '自述.md'
});
});
使用DebugConfigurationProvider
新创建的launch.json的初始调试配置可以动态生成,例如基于工作区中可用的一些上下文信息。 启动配置可以是 断然的 (或修改),然后使用它启动新的调试会话。 这允许根据工作区中可用的信息填写默认值。 两个 决定 方法存在: resolveDebugConfiguration解决债务配置 在启动配置中替换变量之前调用, 带替代变量的resolveDebugConfiguration 替换所有变量后调用。 如果验证逻辑在调试配置中插入额外的变量,则必须使用前者。 如果验证逻辑需要访问所有调试配置属性的最终值,则必须使用后者。
“激活事件” : [
“onDebug”(正在调试) ,
// ...
],
调试初始配置 就在 提供调试配置 方法 调试配置提供程序 被调用。 onDebugResolve:类型 就在 resolveDebugConfiguration解决债务配置 或 带替代变量的resolveDebugConfiguration 方法 调试配置提供程序 调用指定类型的。
发布调试器扩展
更新中的属性 package.json包 以反映调试器扩展的命名和用途。 按照中的说明上传到Marketplace 发布扩展 .
开发调试器扩展的替代方法
调试适配器可执行文件 :此对象将调试适配器描述为具有路径、可选参数和运行时的外部可执行文件。 可执行文件必须实现调试适配器协议并通过stdin/stdout进行通信。 这是VSCode的默认操作模式,如果没有,VSCode会自动使用该描述符和package.json中的相应值 调试适配器描述符工厂 已显式注册。 调试适配器服务器 :此对象描述作为服务器运行的调试适配器,该服务器通过特定的本地或远程端口进行通信。基于 vscode调试适配器 npm模块自动支持这种服务器模式。 调试适配器内联实现 :此对象将调试适配器描述为实现 vscode。 调试适配器 接口。 基于版本1.38-pre.4或更高版本的调试适配器实现 vscode去糖适配器 npm模块自动实现接口。