- 1. 构建LLVM
- 2. 通过LLVM 调试命令 -nm
- 3.通过LLVM编译调试strip
- 1) 打开LLVM.xcodeproj工程,在
Target中搜索strip
,找到llvm-strip
,这是一个脚本 - 2) 创建一个Scheme,(Product -> Scheme -> Manage Schemes —-> 在弹出界面中点击左下角”+”),选择
llvm-strip
的Target - 3) 编译
llvm-strip
, 并在Target中找到llvm-objcopy
,拷贝创建llvm-objcopy的副本target
,改名为strip
- 4) 创建一个
strip的Scheme
,指定其Target为strip
,编译strip - 5)找到strip编译的源文件
llvm-objcopy.cpp
,在llvm-objcopy.cpp的main函数中断点
- 6)从文件中 读取断点信息
- 7) 断点默认是没有开启的,将断点放入strip组里( Xcode的终端中输入
br list strip
),开启组里的断点(br enable strip
) - 8) 给strip传参
- 9) 导出手动在代码中下的断点
- 1) 打开LLVM.xcodeproj工程,在
1. 构建LLVM
获取源码
git clone --depth 1 https://github.com/llvm/llvm-project.git
配置和构建LLVM和Clang
进入终端执行
echo 'export OSX_COMMANDLINE_SDKROOT="/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"' >> ~/.zshrc
然后执行
source ~/.zshrc
使⽤ brew 安装 cmake
brew install cmake
开始构建
开始电脑性能检测,电脑寿命缩短构建:
1. cd llvm-project
2. mkdir build
3. cd build
4. cmake -G
cmake -G Xcode -j 6 -DLLVM_ENABLE_PROJECTS='libcxx;libc++;clang;lldb' -DLLDB_USE_SYSTEM_DEBUGSERVER=ON -DLLDB_TEST_COMPILER=clang++ -DCMAKE_OSX_SYSROOT=$OSX_COMMANDLINE_SDKROOT ../llvm
Xcode 相关配置
进⼊到 build ⽬录下,打开 LLVM.xcodeproj ,选择【Manually Manage Schemes】
注意⚠ ⚠ ⚠ : 不要选择 Automatically Create Schemes 。选择 Manually Manage Schemes
然后,Product -> Scheme -> Manage Schemes,在 Target 中选择 lldb 可执⾏⽂件
然后编译源码,当显示⿊⾊的 (lldb) 字样,编译成功啦:
2. 通过LLVM 调试命令 -nm
添加llvm-nm的Scheme:
Product -> Scheme -> Manage Schemes
锁定llvm-nm的源码,在main函数中断点
定位llvm-nm的Target,找Build Phases,自llvm-nm.cpp的main函数中断点
给llvm -nm 的main函数传参数
3.通过LLVM编译调试strip
1) 打开LLVM.xcodeproj工程,在 Target中搜索strip
,找到 llvm-strip
,这是一个脚本
2) 创建一个Scheme,(Product -> Scheme -> Manage Schemes —-> 在弹出界面中点击左下角”+”),选择llvm-strip
的Target
3) 编译llvm-strip
, 并在Target中找到 llvm-objcopy
,拷贝创建 llvm-objcopy的副本target
,改名为 strip
4) 创建一个 strip的Scheme
,指定其 Target为strip
,编译strip
5)找到strip编译的源文件 llvm-objcopy.cpp
,在llvm-objcopy.cpp的main函数中断点
6)从文件中 读取断点信息
- 拷贝 断点信息的文件路径 :/Users/mac/Desktop/strip_lldb.m
- 直接运行strip(Product->Perform Action -> Run Without Building),断点在main函数中断住
- 在Xcode的调试终端中输入命令
br read -f /Users/mac/Desktop/strip_lldb.m
7) 断点默认是没有开启的,将断点放入strip组里( Xcode的终端中输入 br list strip
),开启组里的断点( br enable strip
)
8) 给strip传参
第一个参数:
- -x : non_global
- 无参数: 代表全部符号
- -S : 剥离调试符号
9) 导出手动在代码中下的断点
在某个断点处断住,在Xcode终端中输入 br write -f PATH