【问题标题】:Is it possible to execute this debugging code while program is paused in .NET IDE?当程序在 .NET IDE 中暂停时,是否可以执行此调试代码?
【发布时间】:2011-04-30 07:49:52
【问题描述】:

我的 VB.NET 应用程序中有几个导致问题的海量数据结构。在引发异常并且应用程序暂停后,我想运行一些代码,例如:

For Each o As MyClass In myObjects
  If o.property = "value" Then debug.print(o.id)
Next

诊断问题。

问题是即时窗口不允许我执行循环,并且myObjects 集合包含太多对象,我无法手动找到我想要的违规对象。

调试器暂停时如何找到该对象?这在 .NET IDE 中是否可行?

【问题讨论】:

    标签: .net visual-studio-2010 debugging ide visual-studio-debugging


    【解决方案1】:

    您应该能够使用 IDE 中的即时模式窗口来执行类似的命令,但数据必须在调试器的当前范围内可用。

    【讨论】:

    • 您不能在即时窗口中运行循环。
    • 没错,但您可以使用 .ForEach 并调用一个操作方法来打印出每个项目。
    • myObjects 可以使用字典吗?
    • 是的,没错。 @Andrew:我相信这里提到的 ForEach 方法是出现在这篇文章的第二个答案中的方法:stackoverflow.com/questions/101265/…。您可以在字典上使用它,但是您的操作方法应该收到一个 KeyValuePair(IDictionary(Of TKey, TValue) 是一个 IEnumerable(Of KeyValuePair(Of TKey, TValue))。您仍然必须停止运行并重新编译以添加当然是那种方法。
    • @Omer Raviv - 如果您正在进行 32 位开发,那么您可以使用编辑并继续添加方法而无需停止调试。
    【解决方案2】:

    不,您不能直接从 IDE 执行此操作。不幸的是,解决它的最简单方法是停止调试,将循环写入一个公共静态方法中,该方法返回您正在查找的对象,重新编译并运行,然后从立即或监视窗口调用该公共静态方法.

    另一个更直接(但令人讨厌)的技巧是在即时窗口中写入“? myObjects”,将结果复制粘贴到记事本中,然后在记事本中使用文本搜索 (Ctrl+F) 来查找您的对象。

    【讨论】:

    • 谢谢。有没有办法让? myObjects 给我超过 100 条记录?此外,有问题的集合是一个字典,其中包含另一个类的值,在没有任何相关信息的情况下以 MyApp.MyClass 出现 - 是否有解决方法?
    • 第一个问题 - 我不知道,抱歉。您也可以将观察窗口中的粘贴复制到记事本中。第二个问题 - 是的,您应该在 MyClass 上放置一个 [DebuggerDisplay("ID: {id}")]。有关详细信息,请参阅msdn.microsoft.com/en-us/library/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多