有没有办法教 Android Studio 在将鼠标悬停在变量上时如何显示 C++ 结构?
Is there a way to teach Android Studio how to display a C++ struct when hovering over the variable?
作为一个实际的例子,假设我有一个如下所示的结构:
struct MyFoo {
std::string mValue;
bool hasValue;
MyFoo() : hasValue(false) {}
MyFoo(std::string value) : mValue(value), hasValue(true) {}
};
如果我将鼠标悬停在该结构的一个实例上,Android Studio 会显示 + ☰ {MyFoo}
。我可以展开它,并稍微向下钻取,看看内容是什么。 (我应该注意,这是一个过于简单化的示例;我的实际应用程序是一个复杂得多的结构,要查看值并不是很容易)。
有没有办法让它显示类似 + ☰ {MyFoo} <none>
或 + ☰ {MyFoo} "Hello, world"
的内容?
我可以看到 Android Studio 使用某些 STL 类型执行此操作,这表明某处有关于如何执行此操作的知识。
奖励问题:XCode怎么样?
据我所知,AndroidStudio 使用 LLDB 调试本机代码。
您可以使用 LLDB 命令添加自定义格式来显示这些变量。
参见:https://lldb.llvm.org/use/variable.html
最简单的方法 pretty-printing 是 LLDB 中的 Python 脚本(有关详细信息,请参阅 LLDB 文档 link,我将此示例作为基础)
(lldb) type summary add -P MyFoo
Enter your Python command(s). Type 'DONE' to end.
def function (valobj,internal_dict,options):
mval = valobj.GetChildMemberWithName('mValue')
hasval = valobj.GetChildMemberWithName('hasValue')
if hasval.GetValueAsUnsigned(0) == 0:
return '<none>'
else:
return mval.GetSummary()
DONE
处理 std::string
是一个真正的问题,但您可以在 上找到一些潜在的解决方案。
作为一个实际的例子,假设我有一个如下所示的结构:
struct MyFoo {
std::string mValue;
bool hasValue;
MyFoo() : hasValue(false) {}
MyFoo(std::string value) : mValue(value), hasValue(true) {}
};
如果我将鼠标悬停在该结构的一个实例上,Android Studio 会显示 + ☰ {MyFoo}
。我可以展开它,并稍微向下钻取,看看内容是什么。 (我应该注意,这是一个过于简单化的示例;我的实际应用程序是一个复杂得多的结构,要查看值并不是很容易)。
有没有办法让它显示类似 + ☰ {MyFoo} <none>
或 + ☰ {MyFoo} "Hello, world"
的内容?
我可以看到 Android Studio 使用某些 STL 类型执行此操作,这表明某处有关于如何执行此操作的知识。
奖励问题:XCode怎么样?
据我所知,AndroidStudio 使用 LLDB 调试本机代码。
您可以使用 LLDB 命令添加自定义格式来显示这些变量。
参见:https://lldb.llvm.org/use/variable.html
最简单的方法 pretty-printing 是 LLDB 中的 Python 脚本(有关详细信息,请参阅 LLDB 文档 link,我将此示例作为基础)
(lldb) type summary add -P MyFoo
Enter your Python command(s). Type 'DONE' to end.
def function (valobj,internal_dict,options):
mval = valobj.GetChildMemberWithName('mValue')
hasval = valobj.GetChildMemberWithName('hasValue')
if hasval.GetValueAsUnsigned(0) == 0:
return '<none>'
else:
return mval.GetSummary()
DONE
处理 std::string
是一个真正的问题,但您可以在