要将 VS Code 附加到 Mac 上已在运行的进程,请使用支持该进程所用语言的调试器:对于 Node.js,从命令面板中选择 Attach to Node Process(附加到 Node 进程);对于 C#,选择 Debug: Attach to a .NET 5+ or .NET Core process;对于 C/C++,使用 LLDB 或 GDB 创建附加配置。这些途径因运行时或扩展而异。没有单一的 VS Code 命令可以附加到所有类型的进程。
附加之前:识别进程与调试器
首先确认进程运行的内容:Node.js、.NET、原生 C/C++ 还是其他运行时。VS Code 内置的 Node 调试器及其语言扩展提供了不同的附加功能;macOS 活动监视器中显示的进程并不意味着每个调试器都能附加到它上面。您还需要对应语言的相应扩展。对于 macOS 上的原生 C/C++,Microsoft 提供了通过 C/C++ 扩展支持 LLDB 或 GDB 的文档。VS Code: Debug C++
打开与正在运行的程序相对应的项目或源文件。附加操作会将调试器连接到进程;它不会启动应用程序、不会重新构建应用,也不能保证断点一定能绑定。匹配的源代码和可用的调试符号至关重要,特别是对于原生程序和优化过的构建版本。
附加到正在运行的 Node.js 进程
在 VS Code 中,按 ⇧⌘P 打开命令面板,运行 Debug: Attach to Node Process,然后从快速选取(Quick Pick)列表中选择目标进程。选取器会列出候选进程,并显示它们的进程 ID 和调试端口。VS Code 记录了这种途径,既适用于未在调试模式下启动的 Node 进程,也适用于使用 inspect 选项的进程。VS Code: Node.js debugging
如果进程未列出,或者您需要一个可复用的配置,请打开或创建 .vscode/launch.json 并添加附加配置。对于未处于调试模式下且已在运行的进程,请使用进程 ID 选取器变量:
{
"name": "Attach to Node process",
"type": "node",
"request": "attach",
"processId": "${command:PickProcess}"
}
在运行和调试中选择此配置,然后按 F5 开始调试。对于已通过 --inspect 启动的 Node 进程,请改用带有其调试端口的附加配置;Node 的默认端口是 9229。不要同时使用 processId 和 port:通过进程 ID 附加时,VS Code 会自动确定端口。Node.js 调试配置详情
附加到正在运行的 .NET 进程
安装 Microsoft C# 扩展,并使用 ⇧⌘P 打开命令面板。运行 Debug: Attach to a .NET 5+ or .NET Core process,然后从列表中选择目标进程。这是 VS Code 中官方记录的 C# 进程附加途径;请使用此方法,不要假定 Node 的进程选取器或配置字段适用于 .NET。VS Code: C# debugging
附加后,在匹配的源代码中设置断点,并让应用程序执行到该代码处。如果断点保持未绑定状态,请检查进程运行的构建版本是否与您打开的源代码一致,以及是否有可用的符号。C# 调试器的精准源文件设置和符号选项可能会影响调试,并且附加操作无法追溯性地更改已加载模块的编译方式。C# 调试器设置
附加到原生 C 或 C++ 进程
安装 Microsoft C/C++ 扩展,并在 .vscode/launch.json 中使用附加配置。该配置需要可执行文件路径以便调试器加载符号、一个 attach 请求以及一个进程 ID。C/C++ 配置参考文档将 ${command:pickProcess} 列为默认的进程选取器,并将 LLDB 列为 macOS 上的可用调试器。C/C++ 启动配置参考
macOS 上的最低配置结构为:
{
"name": "Attach to native process",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/path/to/executable",
"processId": "${command:pickProcess}",
"MIMode": "lldb"
}
将 path/to/executable 替换为运行中进程所使用的实际可执行文件。在此 LLDB 示例中,保持 MIMode 设置为 lldb;GDB 在 macOS 上有单独的设置要求。调试器需要可执行文件的位置来加载符号,因此凭空猜测或不相关的路径会导致源码级调试无法使用。C/C++ 配置参考
如果附加失败或断点未命中
请检查您是否选择了正确的进程、是否安装了相关扩展,以及进程与调试器的架构是否兼容。在 Apple 芯片上,架构不匹配被明确记录为导致 C# 附加错误的可能原因。对于 C/C++,请确认可执行文件路径和可用符号与运行中的构建版本相匹配。如果进程属于其他用户或受 macOS 保护,操作系统权限也可能会阻止附加;请使用有权限的进程并遵守适用的 macOS 安全策略,而不是尝试绕过它。
对于 Node.js,请使用特定语言的进程选取器或配置 inspect 端口;通用的 C/C++ 附加配置无法替代。对于 C#,请使用 .NET 附加命令。对于原生 C/C++,请使用带有 LLDB 的 cppdbg 或单独配置的 GDB 安装。当通用的“附加”说明不适用于目标时,这些区别有助于明确下一步操作。
完成后,使用 Debug: Stop 断开连接。在 Node.js 附加模式下,VS Code 说明停止操作会断开调试器连接,而目标进程会继续运行。如果保持进程运行很重要,请确认您的扩展针对其他运行时的行为;附加会话和启动会话的停止行为不一定相同。VS Code: Node.js debugging
来源
VS Code 中的 Node.js 调试 — Microsoft
调试 — Microsoft
可配置选项列表 — Microsoft
配置 C/C++ 调试 — Microsoft
在 Visual Studio Code 中调试 C++ — Microsoft