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

Viewing contents of IL2CPP's string_t in xcode's debugger

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

这是 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;
};

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

在localswindow和selectView Memory of "*foo"中右击字符串可以看到内存中的字符串。然后字符串从 12 个字节开始。由于 IL2CPP 的 16 位字符,字符串之间用点打印。这可能不适用于 unicode 字符!

如果有人有更强大的解决方案,我很乐意接受他们的回答。

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

p il2cpp::utils::StringUtils::Utf16ToUtf8(&L_3->___start_char_1)