vscode 使用的那些事儿

本文详细介绍如何在VSCode中配置C++开发环境,包括创建launch.json和tasks.json文件,设置gdb调试,以及利用Makefile和脚本自动化构建过程。

最近在ubuntu下使用了下vscode,感觉马马虎虎,可能对vscode还处于初级阶段,多多挖掘它的好处吧

是这样的,hello world 很新鲜,搞两下可以过了,但是一旦工程中包含的多了,那就得费一番功夫了

首先来说打开目录,然后源文件都在里边,可以搞一下,然后新建launch.json,这个是用来为执行准备环境的,

所以如下

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/main",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build"
        }
    ]
}

注意我这里输出的是main,然后新建一个task,快捷键是Ctrl + Shift + p,然后输入task即可新建一任务,这个是用来生成目标文件的,当单一文件生成时,可以执行编译执行,但是当文件多时,该怎么办?

网上无所不能的大牛立马想到了写Makefile,然后写一个脚本文件来执行,就是建一个脚本make.sh

#! /bin/bash
cd $1
make

简单,无比简单,就是根据传入的目录,定位,然后执行make指令完事。

新建的Makefile如下:

.SUFFIXES:.cc .o
CC=g++
SRCS=main.cc\
	client.cc \
	listenfd.cc
OBJS=$(SRCS:.cc=.o)
EXEC=main

build:$(OBJS)
	$(CC) -o $(EXEC) $(OBJS) -lpthread 
	@echo '---------------OK---------------'

.c.o:
	$(CC) -Wall -g -o $@ -c $< -lpthread 

clean:
	rm -f $(OBJS)
	rm -f $(EXEC)

我这里简单建立了个socket通讯的服务端来进行的测试,文件比较少,但是引用了pthread库,还好用户目录下安装了这个库,所以直接-lpthread 即可。

然后建立tasks.json进行生成,如下

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "./make.sh",
            "args": [
 //               "-o",
 //               "${workspaceFolder}/main",  
 //               "${file}",
 //               "-g"
                "${fileDirname}"
            ],
            "group": "build",
            "presentation": {
                "reveal": "always",
                "panel": "new",
            },
            "problemMatcher": "$gcc"
        }
    ]
}

此时传入参数args中,包含了当前的工作目录,此时直接执行make.sh就可以了。是不是很简单,这里又遇到了一个问题,就是不能执行可执行程序,网上搜索的结果是默认的情况下"panel":"shared",此时只要"panel":"new",即可。 

<think>好的,我现在要解决用户提出的问题:“vscode无法跳转到引用怎么回事儿”。首先,我需要回顾之前的对话历史,确保回答的一致性和连贯性。用户之前询问了“转到定义”和“转到类型定义”的区别,现在的问题是跳转到引用失败,这可能涉及相关但不同的功能。 用户可能在使用“转到引用”(Go to References)时遇到了问题,这个功能允许用户查看代码中所有引用某个符号的地方。现在需要分析可能的原因和解决方案。 首先,我要考虑常见的导致无法跳转的原因。这可能包括语言服务器的问题、文件未保存、扩展冲突、配置错误、代码结构问题或缓存问题。需要逐一分析这些可能性,并提供对应的解决方法。 接下来,我需要组织回答的结构,让用户能够逐步排查问题。可能需要分点列出原因和解决方案,每个点详细说明,并给出操作步骤。例如,检查语言支持、重启语言服务器、检查文件是否保存等。 同时,要注意用户的技术水平,使用清晰易懂的语言,避免专业术语过多。同时,结合之前的回答,保持格式的一致性,比如使用标题、列表、代码块等,提升可读性。 还需要考虑用户可能尝试过一些基本操作,比如重启VS Code,但问题依旧存在,因此需要更深入的解决方案,比如检查扩展冲突或者修改设置。 另外,可能需要提醒用户检查代码本身是否有语法错误,或者符号是否被正确引用,例如动态导入或变量名拼写错误等。 最后,总结处理步骤,让用户能够按照优先级进行排查,如果所有方法无效,建议提交issue或寻求社区帮助。 需要确保回答准确,涵盖所有可能的原因,并且每个解决方案都有可操作性。同时,避免遗漏重要点,比如缓存问题或特定语言的配置要求。</think>在 VS Code 中无法正常使用 **跳转到引用 (Go to References)** 功能时(默认快捷键 `Shift + F12`),常见原因和解决方法如下: --- ### 🔍 问题原因分析 #### 1. **语言服务器未运行/崩溃** - 现象:所有代码导航功能(定义/引用)均失效 - 触发条件:特定语言(如 Python/TypeScript)的扩展(Language Server)未启动或崩溃 #### 2. **文件未保存** - 现象:仅在未保存的临时文件(Unsaved Editors)中操作时失效 - 原因:未保存文件不会被语言服务器索引 #### 3. **符号未被正确解析** - 动态导入(如 JavaScript 的 `require()` 动态路径) - 未导出的局部变量/私有成员 - 代码存在语法错误导致解析失败 #### 4. **扩展冲突或配置错误** - 安装了多个同类语言扩展(如 Python 的 Pylance 和 Jedi 共存) - 用户设置中禁用了相关功能 --- ### 🛠️ 解决方案步骤 按优先级从高到低排查: #### 1️⃣ **重启语言服务器** - **操作**:按 `Ctrl + Shift + P` → 输入 `Restart Language Server` - **适用语言**:TypeScript、Python、Java 等 - **效果**:重置解析状态,可能立即恢复功能 #### 2️⃣ **保存当前文件** - 确保文件已保存到磁盘(文件名旁无 `●` 标记) #### 3️⃣ **检查语言扩展状态** - 打开扩展面板(`Ctrl+Shift+X`) - 确认对应语言扩展已启用且无错误(如 `Python`/`Pylance`/`TypeScript`) - **重装扩展**:禁用后重新启用,或彻底卸载再安装 #### 4️⃣ **验证代码有效性** ```javascript // 错误示例:未导出符号无法被追踪 function localFunc() {} // ❌ 局部函数 export function publicFunc() {} // ✅ 导出函数 ``` #### 5️⃣ **检查用户设置** - 打开设置(`Ctrl + ,`)→ 搜索 `references` - 确认以下配置未修改: ```json "editor.gotoLocation.multiple": "goto", // 默认值 "typescript.referencesCodeLens.enabled": true // TS 引用计数显示 ``` #### 6️⃣ **排查扩展冲突** - **临时禁用所有扩展**:通过 `--disable-extensions` 启动 VS Code - **逐个启用测试**:优先启用语言相关扩展(如 `Python` → `Pylance`) #### 7️⃣ **手动重建工作区索引** - 删除项目中的缓存文件夹(如 TypeScript 的 `node_modules/.cache`) - 重启 VS Code 并等待语言服务器重新索引 --- ### ⚙️ 特定语言处理 | 语言 | 特殊配置 | 关键扩展 | |------------|----------------------------------|---------------------| | **Python** | 确保虚拟环境已激活 | Pylance / Jedi | | **Java** | 检查 `java.project.referencedLibraries` | Red Hat Java 扩展 | | **C/C++** | 更新 `c_cpp_properties.json` | C/C++ IntelliSense | --- ### 📌 终极解决方案 如果上述方法均无效: 1. 清空 VS Code 全局缓存: - 删除 `%APPDATA%\Code\User\workspaceStorage`(Windows) - 删除 `~/Library/Application Support/Code/User/workspaceStorage`(macOS) 2. 提交 Issue 到对应语言扩展的 GitHub 仓 --- 通过逐步排查,90% 的跳转引用问题可被解决。如果问题仅出现在特定项目中,建议检查项目配置文件(如 `tsconfig.json`/`jsconfig.json`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值