vscode本地无源码远程调试c++项目的插件实现方案

举报
Amrf 发表于 2020/10/16 13:42:41 2020/10/16
【摘要】 目标是希望自定义scheme实现跳转远程文档例如:sourcefilemap:{"/":"XXX:/"} 方案一:采用vscode.TextDocumentContentProvider验证效果:方案可行,可以正常跳转,但是文件编辑过程体验不佳;实现参考:(采用ssh2读取远程文件)https://code.visualstudio.com/api/extension-guides/virt...


目标是希望自定义scheme实现跳转远程文档

例如:sourcefilemap:{"/":"XXX:/"} 

方案一:采用vscode.TextDocumentContentProvider

  • 验证效果:

方案可行,可以正常跳转,但是文件编辑过程体验不佳;

  • 实现参考:(采用ssh2读取远程文件)

https://code.visualstudio.com/api/extension-guides/virtual-documents

Editable TextDocumentContentProvider for extensions 

https://github.com/microsoft/vscode/issues/10547


方案二:采用vscode.FileSystemProvider

  • 验证效果:

由于调试插件cpp-tools或者gdb的source路径会被转义\被转义为%5C,不能正常识别scheme;但是可以通过修改vscode workbench修补这个问题;例如用c/c++写个控制台程序,插件active时调用一下即可

具体的就是修改workbench.desktop.main.js中的getUriFromSource的实现,将%5C替换回/,即

function getUriFromSource(raw, path, sessionId) {

        try{

        if(path.startsWith('XXX')){

        path = path.replace(/%5C/g,'/');

        raw.path = path;

        }

        }catch(err){

        console.log(err);

        }

        ...

同时移除product.json中的,vs/workbench/workbench.desktop.main.js checksum校验节点;

当然在插件中修改应用这样的操作有些太直接太imba,也可以修改后自行编译vscode版本;

  • 实现参考:(采用ssh2读写远程文件)

Why TextDocumentContentProvider dont call provideTextDocumentContent on update when query params changes?

https://stackoverflow.com/questions/47888617/why-textdocumentcontentprovider-dont-call-providetextdocumentcontent-on-update-w

How to work with FileSystemProvider file systems in Visual Studio Code

https://stackoverflow.com/questions/50198150/how-to-work-with-filesystemprovider-file-systems-in-visual-studio-code

https://github.com/carreath/VSCode-Extension-Showcase/blob/f6b3a1b57bf71d42e4d65e8487bfe11ba660aa8c/fsprovider-sample/src/fileSystemProvider.ts


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。