【问题标题】:How to continuously update VS2008 Watch Window (without stopping execution)?如何不断更新VS2008 Watch Window(不停止执行)?
【发布时间】:2023-04-06 20:01:01
【问题描述】:

在 Adob​​e Director 中,有一个监视窗口会在我的应用程序运行时更新。例如,如果我有一个游戏应用程序并正在观察一个球对象的实例,我可以看到它的所有值(速度、高度、状态变量等)在应用程序运行时实时更新。我还可以在窗口中添加任何其他对象,并在不停止执行的情况下深入了解它的变量。

在 C# 中的 Visual Studio(我在 2008 年)中是否有办法在我的应用程序运行时更新“调试”>“观察”窗口?换句话说,我想在应用程序运行时密切关注给定对象的不同变量,而不是冻结所有内容并在某个特定时刻检查事物的状态。

如果这不可能,是否有任何方法可以查看任意对象的值(无需预先对这些对象进行硬编码)。例如,对于坦克对象,我们有位置、方向、速度等。假设有几十个不同类型的游戏对象,每个对象都有十几个值。这些值每秒变化 60 次。

我们的目标是能够在运行时选择要“观察”的游戏对象,然后深入了解它的变量层次结构(与观察者窗格一样)。同样,此工具无法提前了解对象,因此无法针对特定对象进行硬编码。

提前致谢!

亚当

【问题讨论】:

    标签: visual-studio-2008 debugging watch


    【解决方案1】:

    如果您要监视某个变量的特定值,可以使用条件断点:http://msdn.microsoft.com/en-us/library/7sye83ce.aspx

    当然,也总是有可靠的 ASSERT() 宏。

    如果您有非常复杂的调试需求,您可能需要在应用程序中编写自定义代码来进行调试。通常,这种事情会被包装在 #ifdef _DEBUG/#endif 语句中,这样发布版本就不会受到影响。您可以支持从旧的备用日志文件调试到编写自定义监视窗口来显示您需要查看的当前值的所有内容。

    【讨论】:

    • 嗯...我正在寻找包含数十个变量的任意对象,这些变量会不断更新(如帧率),这些变量每秒会更改很多次。我想在程序运行时观察这些变化,而不是完全停止程序并在某个时刻获取事物的快照。
    • 您可以设置一些自定义性能计数器并使用 Perfmon 观察它们。或者,您可以编写一个小型自定义应用程序,使用 Names Pipes 对其进行更新,以显示您想要的任何数据。
    【解决方案2】:

    创建一个断点,右键单击它,选择命中事件,并在那里设置变量的打印。这行得通。

    【讨论】:

    • 不好。在运行过程中,我需要观察多个对象的多个变量。不过谢谢。
    • 尽管这不适用于原始问题,但我发现它很有帮助。剩余:{files.Count()-count}
    【解决方案3】:

    没有办法做到这一点。

    【讨论】:

      【解决方案4】:

      这可能会有所帮助:

      http://msdn.microsoft.com/en-us/library/z4ecfxd9.aspx

      打开或关闭自动属性评估

      1. 在“工具”菜单上,单击“选项”。
      2. 在“选项”对话框中,打开“调试”节点,然后单击“常规”。 根据您的 IDE 设置,您可能需要选择 Show all 设置以查看调试节点。
      3. 选择或清除启用属性评估和其他隐式功能 来电。
      4. 点击确定。

      【讨论】:

      • 嗯。我启用了“启用属性评估”。尽管如此,监视窗口中的元素仅在设置断点然后命中时才会更新。
      【解决方案5】:

      我不知道有一种方法可以在不进入调试器的情况下进行观察,但是您可以使用几种不同的方法。 我会亲自使用 Trace 和 Trace.Writeline 或类似的东西(我使用自定义库)。但是,您也可以使用 Tracepoints 获得快速解决方案,它是将内容输出到输出窗口的断点。

      我有一个简短的谷歌和这个article 似乎给出了如何设置它们的概述,你把你的变量名放在 { } 中,它们被输出到输出窗口,似乎没有闯入调试器(虽然在后面场景正是它所做的)

      希望有帮助

      【讨论】:

      • 不走运。这种方法每分钟将数千行跟踪文本写入输出窗口。我真的在寻找能够呈现任意对象实例的更新树视图控件的东西。
      【解决方案6】:

      我不确定是否可以像您描述的那样设置调试监视窗口不断更新。您是否考虑过使用TRACE 宏在您的应用程序运行时将内容输出到输出面板?

      TRACE(_T("m_LocationX: %d\n"), m_LocationX);
      TRACE(_T("m_LocationY: %d\n"), m_LocationY);
      

      根据TRACE 语句的执行频率,您的输出窗口可能会被淹没,但它至少应该为您提供运行时所需的信息。


      编辑 1:如果您不使用 MFC,请查看解释替代方法的 StackOverflow answer

      编辑 2: 再次查看这个问题,不清楚您使用的是 C++ 还是 .Net - 如果您使用的是 C#,那么您可以使用 @ 获得类似的结果987654327@ 和 Trace 类 - 可以在 here 找到一篇描述它们使用的好文章。

      【讨论】:

      • 嗯,将几十个对象变量的值写入以 60fps 变化的输出窗口作为在运行时监视值的方法并不实用。不过还是谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2020-04-04
      • 2018-11-24
      • 2016-09-01
      相关资源
      最近更新 更多