【问题标题】:Viewing contents of IL2CPP's string_t in xcode's debugger在 xcode 的调试器中查看 IL2CPP 的 string_t 的内容
【发布时间】:2015-03-20 16:20:19
【问题描述】:

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 断点读取包含的字符串?

【问题讨论】:

    标签: c++ ios xcode debugging unity3d


    【解决方案1】:

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

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

    【讨论】:

    • 对我来说,我必须将 ___start_char_1 替换为 ___m_firstChar_1
    • 我在尝试这样做时收到Function il2cpp::utils::StringUtils::Utf16ToUtf8 has no address, possibly due to compiler optimizations.
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 2012-05-07
    • 2015-09-19
    • 2011-03-28
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多