最近在用 C++ 做 PAT 的题目。
而我的华硕笔记本摔地上打不开了,于是只好拿 MacBook Pro 来做。
我开始以为用 macOS 系统写 C/C++ 应该方便简单,毕竟类 Unix 系统,对 C/C++ 应该很支持。
然而,碰到了一堆乱七八糟的问题,耽误了我合计 20 多个小时的时间。
我中途试过了几乎 Mac 下所有的 C++ 开发工具,XCode、CodeLite、CodeBlocks、Sublime……开始决定直接装一个虚拟机,里面放个 Windows 算了。
而且,macOS 装开发工具太麻烦了,感觉处处要科学上网,速度还很慢,耽误了我太多时间,各种问题层出不穷。
试了一堆方法之后,我还是决定用最不折腾的办法:iTerm2 + vim + g++ + lldb
。
iTerm2 的配置:没啥要配置的。
vim 的配置:
修改(如果没有就新建) vim 的配置文件 vi ~/.vimrc
syntax on
set mouse=a
set cindent
set tabstop=4
set shiftwidth=4
set nu
g++ 和 lldb 的配置:打开 XCode,他会升级一些开发工具,升级结束这些就自动有了。
用 g++ -v
和 lldb -v
可以查看到当前版本。
➜ advanced g++ -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
➜ advanced lldb -v
lldb-900.0.64
Swift-4.0
配置就是这些,下面说一下操作步骤。
首先,把代码要存放的目录安排好。我的存放逻辑是,~/code/pat/ 作为根目录,下面分别是 basic 和 advanced 两个目录,接着按分值再设置 15、20、25 三个目录。
/Users/tian/code/pat/basic/25
接下里开始做题,比如要做乙级的 1005 题。就在 /pat/basic/25/ 下,新建 1005 目录。进入目录后,新建一个 in
文件,把题目的样例输入复制粘贴进来,方便调试的时候不用每次都手动输入数据。
接着就用 vi main.cpp
来写代码了。
写完以后,在 normal 模式下,:w
保存。
接着 cmd+d,切分屏幕窗口。输入 g++ main.cpp -g
来编译。
如果程序有问题,可以根据他提示的行号修改。
如果没问题,就可以输入 lldb a.out
,a.out 是编译自动生成的文件。
进入了 lldb 调试模式以后,按 r,如果程序正常运行,这样就会出现运行结果,例如:
➜ 1006 lldb a.out
(lldb) target create "a.out"
rCurrent executable set to 'a.out' (x86_64).
(lldb) r
Process 9113 launched: '/Users/tian/code/pat/advanced/1006/a.out' (x86_64)
SC3021234 CS301133Process 9113 exited with status = 0 (0x00000000)
(lldb)
补充:
一、lldb 常用调试命令。
详细的 lldb 命令可以看这篇文章。
我常用的是下面这些:
- r:运行,不加断点的话就直接运行结束。
- b 33:在 33 行打断点,接着输入 r,程序就会在 33 行停下来。
- n:程序运行到下一行。
- c:程序运行到下一个断点。
- p num:打印 num 变量的内容
- br l:显示当前的所有断点及其id
- br de 1:根据断点 id 来删除断点,而不是行号