在 xcode 的调试器中查看 IL2CPP 的 string_t 的内容

ten*_*npn 5 c++ debugging xcode unity-game-engine ios

Unity 的 IL2CPP/LLVM 后端从 C# 生成 cpp 文件。您当然可以读取这些文件,并将断点放入其中以查看变量。但是,C# 字符串被转编译为一个名为 String_t 的自定义类。Xcode 似乎不知道如何打印这些类的内部字符串,我不确定如何读取原始字节。

这是 String_t 定义:

struct String_t  : public Object_t
{
    // System.Int32 System.String::length
    int32_t ___length;
    // System.Char System.String::start_char
    uint16_t ___start_char;
};
Run Code Online (Sandbox Code Playgroud)

...谁能弄清楚如何从 Xcode 断点读取包含的字符串?

Dan*_*iel 4

您可以使用p il2cpp::utils::StringUtils::Utf16ToUtf8。因此,如果变量的名称是L_3例如,那么您可以这样做:

p il2cpp::utils::StringUtils::Utf16ToUtf8(&L_3->___start_char_1)
Run Code Online (Sandbox Code Playgroud)