【问题标题】:How to see method return value which is not being stored with the debugger如何查看未使用调试器存储的方法返回值
【发布时间】:2016-03-21 02:02:52
【问题描述】:

在 Visual Studio 2013 中,我如何找出未存储在任何地方的方法返回的值。

让我们假设这些方法位于我没有源代码的 DLL 中,因此我无法在返回行设置断点。

示例用例 1:

if(GetEnumResponse() == MyEnums.MyValue)
{
   // Do Stuff
}

示例用例 2:

var Response = (MyResponse)GetResponse();

在示例 1 中,如果我期望条件为真但它为假,我如何使用调试器找出 GetEnumResponse() 的结果是什么?

在示例 2 中,如果转换导致无效转换异常,我如何查看 GetResponse() 的结果是什么?

【问题讨论】:

  • @Frédéric - 我不认为stackoverflow.com/questions/9375551/debug-return-value 是重复的。 OP 看不到他们试图查看返回值的方法的来源,因此他们无法在返回时设置断点。
  • @ChrisF,根据来自副本的this link,提问者应该能够观察到“自动”窗格中的中间函数返回的值,即使它们不能在return 语句中中断函数本身。我错过了什么吗?
  • @FrédéricHamidi。唔。棘手。问题本身并不相同,解决方案的主要部分无济于事,但这方面确实有帮助。不确定正确的解决方案是什么。
  • 你应该看看OzCode

标签: c# visual-studio debugging visual-studio-2013 visual-studio-debugging


【解决方案1】:

最简单的解决方案是更改调用方法的方式,将返回值放入可以查询的局部变量中。

案例一:

var result = GetEnumResponse();
if (result == MyEnums.MyValue)
{
   // Do Stuff
}

案例 2:

var result = GetResponse();
var Response = (MyResponse)result;

如果您愿意,您甚至可以将此代码留在生产环境中,因为它在功能上与您现在拥有的相同。

【讨论】:

  • 是的,这当然是显而易见的解决方案,但在这种情况下,我正在通过一个巨大的项目进行调试。如果每次我想看到它的价值时都进行这样的更改,那么我需要构建并部署到我的测试环境中,这需要大约 10 分钟的时间。
【解决方案2】:

您可以在 Visual Studio 中使用即时(调试 -> Windows -> 即时)。 在这里您可以评估表达式并查看结果。

函数的返回值显示在“自动”选项卡中,或者您可以在函数返回时在即时窗口中使用$ResultValue

See points 6 and 7 on this blog post about seeing function return values in the debugger

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2014-02-14
    相关资源
    最近更新 更多