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

时间:2015-03-20 16:20:19

标签: c++ ios xcode debugging unity3d

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

...任何人都可以弄清楚如何从Xcode断点读取包含的字符串吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

如果右键单击本地窗口中的字符串并选择View Memory of "*foo",则可以在内存中看到该字符串。然后字符串开始输入12个字节。由于IL2CPP的16位字符,字符串在其间打印有点。这可能对unicode字符不起作用!

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