VSCode 调试器在 macOS 下的 System Integrity Protection (SIP) 权限突破

酷宇同学_2977

酷宇同学_2977

2026-06-28

831人浏览

原创

vscode在macos调试python报permissionerror[errno 13],根本原因是sip阻止debugpy在/usr、/system等受保护路径写临时文件或读符号表;解决关键是将脚本和python解释器移至用户目录(如~/dev/或/opt/homebrew/bin/python3),并在launch.json中显式指定python路径,避免fallback到系统路径。

vscode 调试器在 macos 下的 system integrity protection (sip) 权限突破

VSCode 调试器在 macOS 下报 PermissionError: [Errno 13] Permission denied,通常不是权限没给够,而是调试器试图访问被 SIP 锁死的路径(比如 /usr/bin/python3、/System 或某些预装工具链),或在受保护目录下创建临时调试文件。直接 sudo code 或改目录权限治标不治本,甚至可能破坏沙盒行为。真正要解决,得看清 SIP 拦在哪、为什么拦、以及哪些操作能绕过它而不关 SIP。

为什么 debugpy / ptvsd 在 SIP 下会失败

VSCode 的 Python 调试器(如 debugpy)需要:① 注入代码到目标进程;② 绑定本地端口(默认 5678);③ 在脚本所在目录写入临时 .debugpy 文件或 socket;④ 读取符号表或系统库路径。SIP 不阻止端口绑定,但会拦截第③和④步——尤其当脚本位于 /usr、/System、/bin 等受保护路径时,OS 层直接拒绝写入或读取。

常见表现:

  • 调试器启动后立刻退出,控制台显示 PermissionError: [Errno 13],但终端里 python3 script.py 正常运行
  • debugpy 进程卡在 Waiting for process to attach...,实际没监听端口(用 lsof -i :5678 验证)
  • VSCode 弹出 “无法启动调试会话” 提示,且日志里出现 Failed to create debug adapter 或 Cannot write to path

不关 SIP 的安全调试方案

完全禁用 SIP 是高危操作,仅限内核级调试或驱动开发。绝大多数 VSCode 调试场景,只需避开 SIP 限制路径即可。核心原则:所有调试目标必须放在用户可写区域。

macOS Notes
macOS Notes

通过 AppleScript 创建、读取、搜索及管理 macOS 备忘录。适用于用户要求记笔记、记录事项、保存想法、创建会议记录等场景。

下载
  • 把 Python 脚本移到 ~/Desktop、~/Documents 或项目根目录(如 ~/dev/myproject/),确保父目录有 rwx 权限(ls -ld ~/dev 查看)
  • 不要用系统 Python 解释器路径(如 /usr/bin/python3);改用 Homebrew 安装的 /opt/homebrew/bin/python3(Apple Silicon)或 /usr/local/bin/python3(Intel),这些路径不受 SIP 保护
  • 在 launch.json 中显式指定 "python" 字段,例如:"python": "/opt/homebrew/bin/python3",避免 VSCode 自动 fallback 到系统路径
  • 如果使用虚拟环境,确保 venv 创建在用户目录下(如 python3 -m venv ~/venvs/myproj),而不是 /usr/local/venv 等 SIP 受限区

需要临时禁用 SIP 的极少数场景

只有当你必须调试以下内容时,才考虑进恢复模式执行 csrutil enable --without debug:

  • 调试 Apple 自带命令行工具(如 /usr/bin/swiftc、/usr/bin/clang)的底层行为
  • 用 CodeLLDB 加载系统 dylib 符号(如 libsystem_kernel.dylib)并单步进入系统调用
  • 在 M1/M2/M3 上跑 dlv-dap 调试 Go 程序,且该程序通过 syscall.Mmap 直接映射 /System 下的只读内存页

注意:csrutil enable --without debug 不等于关 SIP,它只豁免调试器对受保护路径的 ptrace 和内存附加权限,其他 SIP 保护(如文件写入、kext 加载)仍生效。执行后需重启,且每次系统更新都可能重置该设置。

VSCode 启动方式决定调试器权限边界

VSCode 本身是否以 sandboxed 方式启动,直接影响调试器能访问的资源范围:

  • 从 Dock 或 Launchpad 启动的 VSCode 默认启用 Full Disk Access 和 Accessibility 权限,但**不自动继承终端的环境变量或 sudo 权限**
  • 用 code --no-sandbox 启动会绕过部分 Electron 沙盒,但 macOS Gatekeeper 仍会拦截对 SIP 路径的访问
  • 绝对不要用 sudo code 启动——这会导致 VSCode 进程以 root 运行,但其子进程(如 debugpy)仍受限于 SIP 规则,且可能污染用户配置
  • 正确做法:在终端中 cd 到项目目录,运行 code .,让 VSCode 继承当前 shell 的 PATH 和权限上下文

最易被忽略的一点:即使你把脚本放对了位置、用了正确的 Python 解释器,如果 VSCode 是通过双击 App 图标启动的,它可能读不到你 shell 中配置的 PATH(比如 Homebrew 路径),导致它悄悄 fallback 到系统 /usr/bin/python3——这时检查 Developer: Toggle Developer Tools 控制台里的 process.env.PATH 就很关键。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode macos

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

6259

3

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.29

3045

6

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

2025.08.29

3908

10

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.29

2725

10

vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

1355

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

2892

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1969

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

1727

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

2607

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程