发布于
737 字 · 4 分钟

VSCode使用技巧与问题排解

AI 摘要

作者
  • avatar
    姓名
    Corner430
    社交账号
题图

本文汇集了 VSCode 日常使用中几个实用的技巧和问题解决方案。

1 自定义 CSS/JS 修改不生效

安装 Custom CSS and JS Loader 插件后修改了自定义样式或动画,但界面没有变化?这是因为 VSCode 需要手动触发重新加载。

解决方案:打开命令面板(Ctrl+Shift+P),执行:

Reload Custom CSS and JS

执行后 VSCode 会重新加载自定义文件,修改立即生效。

参考:r/vscode

2 连接 Google Colab 的 GPU 资源

通过 colab-connect 可以将 VSCode 连接到 Google Colab 的运行时,免费使用 Colab 提供的 GPU 算力。

2.1 在 Colab Notebook 中安装

!pip install -U git+https://github.com/amitness/colab-connect.git

2.2 启动连接

from colabconnect import colabconnect

colabconnect()

执行后会输出一个 SSH 连接地址。在 VSCode 中安装 Remote-SSH 插件,通过该地址连接即可使用 Colab 的计算资源进行开发。

参考:amitness/colab-connect

3 调试第三方库代码

在 VSCode 中调试 Python 时,默认无法步入(Step Into)第三方库中的函数。调试器会直接跳过外部代码。

解决方案:修改项目的 .vscode/launch.json,将 justMyCode 设为 false

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "justMyCode": false
    }
  ]
}

注意:确保调试面板下拉菜单中选中的是项目级别的调试配置。如果使用全局配置,这里的修改不会生效。

4 模拟 Visual Studio 的内存查看窗口

Visual Studio 提供了强大的内存查看窗口,可以直观地查看变量在内存中的存储情况:

Visual Studio 内存窗口

VSCode 没有原生的内存查看功能,但可以通过一个 C++ 工具函数实现类似效果。以下 print_memory 函数按每行 4 字节显示内存的十六进制值及对应的 ASCII 字符:

#include <stdio.h>
#include <stdint.h>

// 打印内存区域的十六进制内容和 ASCII 字符
// 不可打印字符显示为 '.'
void print_memory(const void* start_addr, size_t num_bytes) {
    const uint8_t* data = (const uint8_t*)start_addr;
    const uintptr_t start_address = (uintptr_t)start_addr;
    const uintptr_t end_address = start_address + num_bytes;
    const size_t bytes_per_row = 4;
    char ascii[bytes_per_row + 1];
    ascii[bytes_per_row] = '\0';

    for (uintptr_t i = start_address; i < end_address; i++) {
        if ((i - start_address) % bytes_per_row == 0) {
            printf("%p  ", (void*)i);
        }
        printf("%02X ", data[i - start_address]);
        ascii[i % bytes_per_row] =
            (data[i - start_address] >= 32 && data[i - start_address] <= 126)
                ? data[i - start_address]
                : '.';
        if ((i - start_address + 1) % bytes_per_row == 0) {
            printf(" %s\n", ascii);
        }
    }

    // 处理最后一行不满 4 字节的情况
    if ((end_address - start_address) % bytes_per_row != 0) {
        for (size_t i = (end_address - start_address) % bytes_per_row; i < bytes_per_row; i++) {
            printf("   ");
            ascii[i] = ' ';
        }
        printf(" %s\n", ascii);
    }
}

int main() {
    int32_t arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    print_memory(arr, sizeof(arr));
    return 0;
}

运行效果:

内存打印输出

每行显示地址、4 字节十六进制值和 ASCII 字符,在调试数据结构、网络协议解析等场景下非常实用。

版权声明

除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。