【问题标题】:Visual Studio .NET Debugging: Test new code block using variables in existing stack trace when on breakpointVisual Studio .NET 调试:在断点上使用现有堆栈跟踪中的变量测试新代码块
【发布时间】:2012-03-23 20:16:05
【问题描述】:

我经常使用 Visual Studio 中的 Watch Window 进行调试。但这需要您将所有代码放入单个语句(不带分号)中才能获得结果。有没有办法可以使用现有变量(在范围内)并编写代码块(多行代码)并在调试时对其进行内联测试?


在 Microsoft 做出改进之前回答:
不,我猜这是不可能的——在调试期间运行多行(代码块)。

【问题讨论】:

    标签: .net visual-studio debugging multiline breakpoints


    【解决方案1】:

    是的,您可以将Immediate Window 用于此类目的。

    因此,例如,当程序执行在断点处停止时,您想查看当前执行范围内的变量状态,甚至评估延迟的 LINQ 查询。只需输入变量名并按 ENTER - 变量的值将被打印出来。为了评估 LINQ 查询,我使用 ToList() 然后索引器来访问任何特定项目,例如您有这样的查询:

    var items = input.Where(i => i.SomeCondition).Take(2);
    

    现在只需在即时窗口中执行此操作:

    // Count of the items will be printed
    items.ToList().Count()
    
    // see first element, element type/name/value/properties/etc will be printed
    items.ToList()[0]
    

    重要提示:您一次只能评估单行代码。

    更高级的用法:Immediate Window Commands

    【讨论】:

    • +1。请注意,您可以做的事情仍然有很多限制 - 即它不允许有新的 lambda、多行语句/新方法/类。
    • 是的,lambda-restriction 很奇怪,基本上我以一种非常简单的方式使用它 - 只需打印一些变量等。也许还有更有趣的用例?
    • @AlexeiLevenkov 所以这对于多行是不可能的?我试了又试,还是不行。
    • 据我所知...我从不觉得需要在即时窗口中使用复杂的东西,因为我太害怕丢失一些我可以在多行中编写的复杂代码:),所以我没有看过其他方式来做到这一点。
    • 我的问题是在调试时如何运行一段源代码(意味着多行)。 #1:听起来你一次只能运行一行。您基本上必须将所有行合并为一条。那是对的吗? #2:如果您确实运行多行,它们都是相互独立的,这意味着如果您在即时窗口的一行中设置变量 x,例如,如果您使用 x 作为代码的一部分运行新行,则不会保留 x ,对吗?
    猜你喜欢
    • 2016-02-19
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多