< 返回版块

newyjp 发表于 2019-10-27 21:52

Tags:iOS, Rust

上一篇文章我分享了如何在 iOS 平台调试 Rust,但是必须先把我们的 APP 启动起来才可以用 Clion Attach 我们的 APP,但是这种方式没法覆盖那些 APP 一启动就需要添加断点的调试场景,比方说 init 方法。这次我分享如何调试这些场景。

这里我假设上篇文章分享的 debug 方式你已经掌握,因为从我个人实践来看,在 iOS 平台上,这两种调试 Rust 的方式都是用得到的。

我们首先要思考一个问题,要 APP 一运行就能调试,那我们只能在 Xcode 做这件事情,这是绕不开的,或者你是 AppCode 用户,但是本质是一样的。所以我们必须要让 Xcode 支持 Rust 断点。好在前人已经帮我们做了。执行下面的脚本就能给 Xcode 安装好 Rust 断点工具。如果因为 Xcode 版本问题导致无效,你可以查看这里: https://github.com/newyjp/rust-xcode-plugin

#!/bin/bash

# Asking sudo
if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi

rm -r /tmp/rust-xcode-plugin
git clone https://github.com/newyjp/rust-xcode-plugin /tmp/rust-xcode-plugin
sudo cp -r /tmp/rust-xcode-plugin/Plug-ins/Rust.ideplugin ~/Library/Developer/Xcode/Plug-ins
sudo cp -r /tmp/rust-xcode-plugin/Specifications/* ~/Library/Developer/Xcode/Specifications
rm -r /tmp/rust-xcode-plugin

然后重启 Xcode,会弹出一个选框,注意要选择 load bundle,不要选择 skip bundle。

注意,我们 iOS 的 debug 项目保持 iOS 调试 Rust 调试完的状态。 仍然打开我们在上一篇文章中的 demo 项目。和在 Clion 中 debug Rust 一样,我们仍尝试在 rust_greeting 函数的入口处打一个断点。就像下面这样。

我们先在 iOS debug 项目的 didFinishLaunchingWithOptions 方法中打一个断点,然后 Command + R 运行 iOS debug 项目。

然后在 Clion 中拷贝我要添加 breakPoint 的文件的位置。

我们添加 breakPoint 的语法是:b file.rs:line-number,然后回车执行。现在我在 Xcode 控制台中添加一个 breakPoint。我执行的命令是 b /Users/newpan/Desktop/cross-platform-rust-master/basic/cargo/src/lib.rs:10,命令成功以后,控制台会输出 breakPoint 名称等信息。

然后放开之前的断点。我们在模拟器里输入自己的名字,然后点击 Greet me!

可以看到我们的程序稳稳地停在了 lib.rs 这个文件的第 10 行。

接下来,我们就可以像平时调试一样,在方法中随意添加 breakPoint 进行调试。

我们甚至可以用 frame variable 打出整个 frame 中的所有变量的值,也可以 po 出具体某个变量的值。

我们也可以删除之前添加的断点。语法为 br del breakPoint-ID

更多的 LLDB 语法参见 LLDB CookBook 的 「Breakpoint Commands」 章节 https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/gdb_to_lldb_transition_guide/document/lldb-command-examples.html 。

Enjoy! 😁

评论区

写评论

还没有评论

1 共 0 条评论, 1 页