非 Linux 系统如何借 Multipass 安全使 GDB

· · 科技·工程

0x-1 前言

本人用 2017 破 macbook,想装个 GDB,调试进程被 SIP[^1] 直接杀死,关了一次 SIP 又觉不妥。虽然 MacOS 有更加强大的 LLDB,但是考场用不了啊!

正好笔者前些年用 Multipass 试图部署 StableDiffusionWebUI 无果,现重拾此物,使其为 OI 效力。

0x00 下载、安装 Multipass

Multipass 是 Ubuntu 旗下的一个命令行虚拟机软件,可以在主机终端运行 Ubuntu 虚拟机。

访问官网,点击下载,静待即可。必要可食用七根棍。

0x00.5 官方 Windows 安装教程

下载适用于 Windows 的 Multipass

需要 Windows 10 专业版/企业版/教育版 v1803 或更高版本, 或者任意 Windows 10 搭配 VirtualBox。

确保网络为专用网络

请确认本地网络被设置为 专用网络, 否则 Windows 会阻止 Multipass 启动。

运行安装程序

你需要允许安装程序获取 管理员权限

0x00.A 官方 MacOS 安装教程

下载适用于 macOS 的 Multipass

或者,请参考我们的文档,了解如何使用 brew 进行安装。

运行安装程序

你需要在具有 管理员权限 的账户下运行安装程序。

0x01 创建虚拟机

以 MacOS 为例,首先打开应用,会有这样的界面:

我们找到最新的 25.04,点击下面中间的齿轮进去:

设置虚拟机名称,CPU 数量(推荐 2 个),内存(一般需要 4G,炸了就老实了),磁盘(16GB 足够)。

然后是关键一步:设置链接目录

这样你就可以在主机写代码,交送虚拟机进行运行了。

往下翻,翻到 Mount 一项,点击 Add Mount,前为主机目录,后为在虚拟机的目录,可添加多个。

接下来,点击启动 Launch。

(新版的比以前好用多了!)

等右下角出现绿色提示,就可以点击中间的 Open Shell 按钮打开命令行。

现在发现一个问题,就是它无法访问挂载的文件夹中的文件,原因是权限不够。这样,我们打开系统设置 \to 隐私与安全 \to 完全磁盘访问权限,勾选 Multipassd 这一项:

但你会问了,这样我怎样高效使用呢?别急,我来教你使用主机命令行访问虚拟机。

0x02 主机命令行访问虚拟机

关闭刚刚的窗口,打开终端,依次输入

multipass start <你的虚拟机名>
multipass shell <你的虚拟机名>

即可进入虚拟机终端。

0x03 实战

也可使用 vscode 等。

0x03.3 配置环境

我们的虚拟机默认是没有 g++、gdb 的,所以我们要安装,方法也很简单,运行

sudo apt install g++
sudo apt install gdb

0x03.7 在 Xcode 中编写程序,虚拟机中运行

因为 Apple clang 比较的神奇,会有一些 bug。

那我们就在主机写程序,放到虚拟机去运行。

确保你挂载了 Xcode 目录

打开虚拟机,进入终端,访问 Xcode 项目目录,例如我这个只需要 cd dev 即可。

然后 g++ 编译、gdb 调试即可:

也可 time 查看时间

0x03.B 在 Vscode 中编写程序,虚拟机运行

与上面一样,不过终端可以换成 Vscode 带的。

0x~1 结语

本文介绍了如何使用 Multipass 来在非 Linux 平台上获得 Linux 环境(如 gdb 等),希望对大家有所帮助!

(顺便提一嘴,如果要 debug,g++ 编译命令中 -g 要在 -o 前面否则编译不成)

完结撒花,求赞!

0x~0 解释说明

[^1]: 「SIP」系统保护进程,类似杀毒软件的存在,但是关闭启用必须在恢复模式(就像安装 Ubuntu 时的那个界面)下进行。