跳转至

Vscode

Remote-SSH Bugs

难以解决就重装VSCODE: 奇怪的问题多是插件兼容性导致

原理

文件名da76f93349a72022ca4670c1b84860304616aaa2实际上是一个特定VS Code Server版本的唯一标识符(通常称为“提交ID”或“版本哈希”)。VS Code Server的每个版本都有一个不同的提交ID,这个ID对应于VS Code源代码仓库中的一个特定提交。

VS Code如何选择使用哪个版本

  1. 版本匹配:当VS Code尝试建立与远程环境的连接时,它会检查远程环境中安装的VS Code Server版本。VS Code客户端会根据自己的版本请求匹配的VS Code Server版本,确保二者之间的兼容性。
  2. 自动下载和安装:如果远程环境中没有找到匹配的VS Code Server版本,VS Code客户端会自动下载并安装所需的VS Code Server版本。这个过程是自动的,确保用户无需手动介入版本匹配和安装过程。
  3. 多版本共存:在远程环境中,可以存在多个不同版本的VS Code Server。这允许不同版本的VS Code客户端与远程环境连接,每个客户端使用与之兼容的VS Code Server版本。这种设计使得在同一远程环境中支持多用户或多版本使用成为可能。
  4. 版本选择:当VS Code客户端连接到远程环境时,它会基于客户端的版本信息选择合适的VS Code Server版本。如果远程环境中已经安装了多个版本的VS Code Server,VS Code会自动选择与客户端版本对应的服务器版本。

Could not establish connection. XHR failed

原因是没有网络,需要自己手动下载包

先查看包对应版本

# shaojiemike @ node5 in ~ [15:24:54] C:1
$ rm ~/.vscode-server -rf

# shaojiemike @ node5 in ~ [15:24:59]
$ ls ~/.vscode-server/bin/
784b0177c56c607789f9638da7b6bf3230d47a8c

下载对应版本,移动解压

set_proxy
# 或者 自己电脑下,然后传上去,30MB左右
wget https://update.code.visualstudio.com/commit:784b0177c56c607789f9638da7b6bf3230d47a8c/server-linux-x64/stable
mv stable ~/.vscode-server/bin/784b0177c56c607789f9638da7b6bf3230d47a8c/vscode-server-linux-x64.tar.gz
cd ~/.vscode-server/bin/784b0177c56c607789f9638da7b6bf3230d47a8c
tar -xvxf vscode-server-linux-x64.tar.gz --strip-components 1

重新连接即可

Server installation process already in progress

Server installation process already in progress - waiting and retrying
Acquiring lock on /staff/shaojiemike/.vscode-server/bin/6c3e3dba23e8fadc360aed75ce363ba185c49794/vscode-remote-lock.shaojiemike.6c3e3dba23e8fadc360aed75ce363ba185c49794
[09:25:29.643] > Installation already in progress...

just remove the locked file

过程试图写入的管道不存在

Install terminal quit with output: 过程试图写入的管道不存在。
[08:39:15.476] Received install output: 过程试图写入的管道不存在。

一般是本地的known_hosts冲突了,

  1. 删除对应项或者文件后。
  2. terminal重新连接,添加known_hosts
  3. VS Code 正常

lock on

[15:18:37.132] > Acquiring lock on /staff/shaojiemike/.vscode-server/bin/da76f93349a72022ca4670c1b84860304616aaa2/vscode-remote-lock.shaojiemike.da76f93349a72022ca4670c1b84860304616aaa2
[15:18:37.144] > \ln /staff/shaojiemike/.vscode-server/bin/da76f93349a72022ca4670c1b84860304616aaa2/vscode-remote-lock.shaojiemike.da76f93349a72022ca4670c1b84860304616aaa2.target /staff/shaojiemike/.vscode-server/bin/da76f93349a72022ca467
> 0c1b84860304616aaa2/vscode-remote-lock.shaojiemike.da76f93349a72022ca4670c1b84860304616aaa2
[15:18:37.163] > Found existing installation at /staff/shaojiemike/.vscode-server/bin/da76f93349a72022ca4670c1b84860304616aaa2...
> Checking /staff/shaojiemike/.vscode-server/.da76f93349a72022ca4670c1b84860304616aaa2.log and /staff/shaojiemike/.vscode-server/.da76f93349a72022ca4670c1b84860304616aaa2.pid for a running server
> Looking for server with pid: 1679721
[15:18:37.208] > Found running server...

this is because connect the same user in shared disk system (e.g., NFS) at the same time from snode6 and icarus0 two different machine.

So just open all fold from the same machine using VSCODE. Or kill -9 pid twice will jump to the before question.

服务器插件下载

设置代理,解决绝大部分问题

ssh 公钥的位置

cd
cat .ssh/id_rsa.pub

VSCODE C++ 自动跳转

  1. 已经安装了 C/C++和 C++ Intellisense 插件;
  2. 确认 C_Cpp: IntelliSenseEngine 的开关打开
  3. 左击插件 C/C++,选择小齿轮 -> 扩展设置。
  4. 搜索框内输入 “intell”,将 C_Cpp:Intelli Sense Engine 开关设置为 Default。
  5. “Ctrl + Shift + P”打开C/C++:Edit Configurations(JSON)创建。

另一个基于ctag+vscode的实现方法

  1. 安装插件

VScode Debug Run

数组查看技巧

参考GDB的命令

多线程进程调试c++

注意编译选项-g -O0。不然常量参数flag=1会被优化掉。

修改代码

void LaunchProcess(uint32_t procIdx) {
    int cpid = fork();
    int tsj_flag = 1;
    while(tsj_flag){
        sleep(0.5);
    }

找到运行子进程的PID

PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command                                                                                                                                                                                                                                              
243149 shaojiemi  20   0 1026M  2132  2036 S  8.4  0.0  0:07.00     └─ ./build/opt/zsim tests/pim.cfg
243150 shaojiemi  20   0 1026M   136    40 S  9.0  0.0  0:07.04        └─ ./build/opt/zsim tests/pim.cfg

VSCODE设置,连接上后需要暂停再启动一次

{
    "name": "(gdb) 附加",
    "type": "cppdbg",
    "request": "attach",
    "program": "/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator/build/debug/zsim",
    "processId":"276570",
    "MIMode": "gdb",
    "setupCommands": [
        {
            "description": "为 gdb 启用整齐打印",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        },
        {
            "description":  "将反汇编风格设置为 Intel",
            "text": "-gdb-set disassembly-flavor intel",
            "ignoreFailures": true
        }
    ]
},

多线程进程调试python

图中白色是主进程,绿色是所属同名子进程,来负责不同的功能。

对于通过subprocess.Popen(cmd).communicate()已经创建的子进程(代码中编写time.sleep(20),并在下一条指令标记断点),需要设置launch.json,在同一个VSCODE窗口下启动一个新的debug示例,然后选择其PID来监控

{
   "name": "Python: 使用 PID 连接",
   "type": "python",
   "request": "attach",
   "processId": "${command:pickProcess}"
  },

对于threading.Thread(target = fuc, args = (xxx)).start()启动的线程不需要额外监视。

最终能有如下效果:

单线程启动

{
  "name": "C++ Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/a.out",
  "args": ["arg1", "arg2"],
  "environment": [{ "name": "config", "value": "Debug" }],
  "cwd": "${workspaceFolder}"
}
{
    "configurations": [
  {
   "name": "(gdb) 启动",
   "type": "cppdbg",
   "request": "launch",
   "program": "/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator/build/opt/zsim",
            //args设置注意双引号内没有空格,也就是原本命令中的空格就是分隔符。还需要注意路径
   "args": ["/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator/tests/pim.cfg"],
            "args": ["--config", "${workspaceFolder}/Configs/host.cfg",
                "--disable-perf-scheduling","true","--mode=cpu",
                "--stats","host.stats","--trace","${workspaceFolder}/sample_traces/host/rodiniaBFS.out",
                "--core-org=outOrder","--number-cores=4","--trace-format=zsim","--split-trace=true"],
   "stopAtEntry": false,
   "cwd": "/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator",
   "environment": [{ "name":"LD_LIBRARY_PATH","value":"/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator/pin/intel64/runtime/pincrt:/home/staff/shaojiemike/github/ramulator-pim/zsim-ramulator/pin/extras/xed-intel64/lib" } ],
   "externalConsole": false,
   "MIMode": "gdb",
   "setupCommands": [
    {
     "description": "为 gdb 启用整齐打印",
     "text": "-enable-pretty-printing",
     "ignoreFailures": true
    },
    {
     "description":  "将反汇编风格设置为 Intel",
     "text": "-gdb-set disassembly-flavor intel",
     "ignoreFailures": true
    }
   ]
  }

 ]
}
g++ -g -std=c++11 SLIC.cpp -o SLIC #把调试信息加到可执行文件中,如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

参数

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "args": ["txt" "E:\\PowerShell\\github\\classin-downloader\\bb.html"],
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}

"args": [],里添加

自动格式化

"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, ColumnLimit: 0, AllowShortIfStatementsOnASingleLine: false, AllowShortLoopsOnASingleLine: false, IndentWidth: 4, PointerAlignment: Right, SpacesBeforeTrailingComments: 1 }"

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献