背景
我正在用 C# 编写一个 Visual Studio 扩展,它在调试另一个应用程序时在即时窗口中执行代码。该表达式返回一个值,该值可以是 int、字符串文字、类等。我正在调试的应用程序是用 C++ 编写的。
编码
要执行即时窗口命令,我使用这行代码:
var expression = dte.Debugger.GetExpression("funcname()");
并检索我使用的结果:
string val = expression.Value;
和:
var children = expression.DataMembers;
这是我正在调试的应用程序中的 myFunc() :
std::vector<int> myFunc()
{
return { 1, 2, 3, 4, 5 };
}
问题
当我在即时窗口中手动运行表达式时,返回的对象将被转储,正如我在观察窗口中看到的那样(参见此处)。我设法找到了所有孩子的名字,但是缺少这些值(请参见此处)。
我想要的是实现 DisplayString ( { size=5 }
),但我还没有发现任何有用的东西。
如何从 Debugger.GetExpression 获取 DisplayString 字段?
编辑:我不必使用这个 API。如果您知道另一种可以返回此刺痛的方法,请提出建议。一种想法可能是检索即时窗口的完整输出字符串(见右侧),然后对其进行解析。
EDIT2:看这个视频可以更好地解释这个问题