LeetCode C++ 调试助手
在 VS Code 里刷 LeetCode(力扣):关联账号、浏览 / 搜索题目、查看题面,并且可以在本地对 C++ 题解打断点调试,自定义测试用例,再一键远程测试与提交。
本插件为非官方的第三方工具,与 LeetCode / 力扣 没有隶属关系。账号 Cookie 只保存在本机 VS Code 的 SecretStorage 中,只会发送给你所选的 LeetCode 站点。
功能
| 功能 |
说明 |
| 账号关联 |
支持 leetcode.cn 与 leetcode.com,粘贴浏览器 Cookie 登录,Cookie 保存在 VS Code SecretStorage |
| 题目列表 |
侧边栏按 每日一题 / 全部 / 难度 / 已通过 / 尝试过 / 标签 分组,显示通过状态与通过率 |
| 搜索 |
LeetCode: 搜索题目,按题号、中文或英文标题即时过滤 |
| 题面 |
Webview 展示题目描述、标签、提示,跟随编辑器主题 |
| 生成题解 |
自动生成 题号.slug.cpp,含官方 C++ 模板和示例测试用例 |
| 本地运行 |
自动生成 main(),解析 LeetCode 输入格式,逐组输出结果与耗时 |
| 本地调试 |
一键编译(-g -O0)并启动调试器,断点直接打在题解文件里 |
| 自定义用例 |
题解文件末尾的用例块就是测试集,本地运行、调试、远程测试共用 |
| 远程测试 / 提交 |
调用 LeetCode 判题,展示每组用例的输出 / 预期 / 标准输出,提交结果含用时与内存排名 |
| 失败用例回填 |
提交未通过时,一键把失败用例加入本地用例块,马上本地调试 |
本地运行器支持的参数 / 返回值类型:int、long long、double、bool、char、string、任意嵌套的 vector<...>、ListNode*、TreeNode*,以及 LRUCache 这类设计题(多方法调用)。随机抽取的 54 道真实题目全部能直接生成并编译调试入口。
环境准备
- C++ 编译器(需兼容 GCC 风格参数):
- Windows:推荐 MSYS2 安装
mingw-w64-ucrt-x86_64-gcc 与 mingw-w64-ucrt-x86_64-gdb,并把 C:\msys64\ucrt64\bin 加到 PATH;或使用 WinLibs
- macOS:
xcode-select --install(clang++ / lldb)
- Linux:
sudo apt install g++ gdb
- 调试器扩展(二选一):
- C/C++(
ms-vscode.cpptools,配合 gdb / lldb)
- CodeLLDB(
vadimcn.vscode-lldb,VSCodium / Cursor 用户可选)
指定编译器(CXX)
编译器按以下优先级确定:
- 设置项
leetcodeCpp.cxx,例如 g++、clang++、C:/msys64/ucrt64/bin/g++.exe
- 环境变量
CXX(可以带参数,例如 ccache g++、zig c++)
- 平台默认:macOS 为
clang++,其余为 g++
编译参数由 leetcodeCpp.cxxFlags 控制,默认 ["-std=c++20", "-g", "-O0", "-Wall"]。编译器较老时可改为 -std=c++17。
调试器 leetcodeCpp.debugger 默认 auto:编译器是 clang 且装了 CodeLLDB 时用 CodeLLDB,否则用 C/C++ 扩展;使用 C/C++ 扩展时会优先在编译器同目录查找 gdb,也可以用 leetcodeCpp.debuggerPath 手动指定。
登录
- 点击状态栏左下角「LeetCode 未登录」或侧边栏的登录按钮
- 点输入框右上角的 🌐 按钮在浏览器里打开登录页并登录
- 按 F12 → Network,刷新页面,任选一个发往 leetcode 的请求,复制请求头里的完整
Cookie
- 粘贴到输入框回车(需包含
LEETCODE_SESSION 和 csrftoken;也支持 Cookie-Editor 导出的 JSON)
切换站点:LeetCode: 切换站点,或修改设置 leetcodeCpp.endpoint。
使用
侧边栏打开 LeetCode C++ → 点击题目查看题面 → 点「用 C++ 编写 / 调试」
生成的题解文件:
// 1. 两数之和
// https://leetcode.cn/problems/two-sum/
#include ".lccpp/leetcode.h"
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
}
};
/* @testcase
[2,7,11,15]
9
[3,2,4]
6
*/
前两行用来识别题目,请保留。和 LeetCode 网站一样,vector、algorithm 等标准库不需要再单独 include,.lccpp/leetcode.h 已经全部引入并写好了 using namespace std;。提交时会自动去掉 #include 这一行和末尾的测试用例块,其余代码原样提交。
测试用例块上方的一排按钮:本地运行(Ctrl+Alt+R)、调试(Ctrl+Alt+D)、远程测试、提交、题目描述、重置为示例用例
打断点后点「调试」,调试器会在题解文件中停下;程序输出在终端 / 调试控制台中
题解保存目录
第一次新建题解时会询问保存位置,默认是工作区下的 leetcode 文件夹
之后可用命令「LeetCode: 设置题解保存目录」(侧边栏 ⋯ 菜单里也有)修改,或直接改设置 leetcodeCpp.workspaceFolder,支持 ${workspaceFolder}/algo 这样的写法
本地调试用到的头文件和编译产物统一放在题解目录下的 .lccpp 文件夹里,不会散落到其他地方:
leetcode/
├── 1.two-sum.cpp
├── 3644.maximum-k-to-sort-a-permutation.cpp
└── .lccpp/
├── leetcode.h # 标准库 + ListNode / TreeNode
└── build/ # 自动生成的 main()、用例输入和可执行文件
旧版本(0.1.1 及以前)会在每个题解所在目录都建一个 .lccpp,题解目录以外的那些可以直接删除
自定义测试用例
文件末尾的 /* @testcase ... */ 就是测试集,本地运行、调试、远程测试都用它:
- 普通题:每个参数一行,与网页「测试用例」面板的格式相同;多组用例依次排列,空行只是为了好看
- 设计题:每组两行,第一行操作名数组,第二行参数数组
# 开头的行会被忽略,可以用来临时注释掉某组用例
- 用例块上方的
重置为示例用例 可以恢复题目自带的示例
调试时的参数从哪来
插件会生成一个 main():依次读取用例块中的每组用例,把每行解析成对应参数,新建一个 Solution 调用你的函数,再打印结果。所以:
- 断点停在你的函数里时,参数(如
nums)就是当前这组用例的数据,在「变量」面板里可以展开查看
- 每组用例开始前会打印
Case N 和 Input : ...,可以对照当前是第几组
- 用例按顺序执行,按 F5 继续就会进入下一组;只想调某一组时,用
# 把其他组注释掉
本地调试辅助
题解文件引入的 .lccpp/leetcode.h 提供了标准库、using namespace std;、ListNode / TreeNode 定义,以及一些只在本地可用的工具(需要用 LC_LOCAL 宏包起来,避免提交后编译失败):
#ifdef LC_LOCAL
lc::print(nums, root); // 按 LeetCode 格式打印任意支持的类型
TreeNode* t = lc::makeTree("[1,null,2,3]"); // 从字符串构造树 / 链表
#endif
已知限制
- 自带
Node 类型的题(N 叉树、带随机指针的链表、图的克隆等)和交互题(如 isBadVersion)暂不支持本地运行,但仍可远程测试和提交
- 不支持 MSVC(
cl.exe)命令行参数;Windows 上请使用 MinGW-w64 的 g++ / clang++
- 网络请求不走 VS Code 的代理设置;访问 leetcode.com 需要代理时,请在启动 VS Code 前设置系统代理环境
- 题面中的「提示」是 LeetCode 接口返回的原文,力扣中国站的提示目前也只有英文
开发
npm install
npm run compile
npm run package # 生成 .vsix
npm run test:format # 题解文件格式(生成 / 识别 / 提交内容)
CXX=g++ npm run test:cpp # 用真实编译器验证本地运行器
CXX=g++ npm run test:smoke # 拉取真实题目,验证生成的调试入口(需要网络)