【问题标题】:How can I monitor a variable in the watch window throughout a winforms application?如何在整个 winforms 应用程序的监视窗口中监视变量?
【发布时间】:2016-07-14 04:04:23
【问题描述】:

我有一个表格

我在类级别声明了变量“a”。

  public partial class Form1 : Form
    {
        int a;
        public Form1()
        {
            InitializeComponent();
        }
        ..........
    }

我有按钮点击事件,一个按钮增加'a',另一个减少'a'

我想在监视窗口中查看“a”,理想情况下,一旦加载表单,这应该是可能的,因为程序不仅会在那里终止,但无论如何,我似乎必须在某处按顺序放置断点要查看“a”,所以我在表单加载处放置一个断点并点击“播放”并查看“a”。

我单击“继续”,并且希望在单击按钮时查看“a”的值。

但它似乎只在断点上执行。一旦我点击一个按钮,除非我添加断点,否则它不会显示值。

我真的不想为了查看程序中任何位置的变量值而设置断点。而且,当我真正尝试导航 GUI 并在这样做时查看变量的值时,我也不想跳入我的代码。

目前看来,我能做的最好的事情是在第一个表单加载的大括号和可能影响值的相关事件的结束大括号处放置断点。但似乎没有必要这样做,如果试图在 gui 周围单击,让它继续跳入代码,这会有点分心。在更复杂的 GUI 中,我可能想单击一下以查看是否可以创建与变量相关的不一致状态,每次单击时都像这样暂停似乎是不必要的,而且会稍微分散注意力。

我想在整个程序中监控变量,而不仅仅是在特定点。如果没有这样做的选项,或者可能有但我看不到,我会感到有点惊讶。

【问题讨论】:

  • 除了手动调用System.Diagnostics.Debug.WriteLine,我什么都不知道。
  • 不清楚你在问什么。设计的调试器监视窗口仅在进程暂停时显示数据。其他人建议您可以将值写入调试输出。但这真的是你想要的吗?在我看来,如果您希望能够与程序交互并不断监控变量值,您应该将其构建到您的程序中;要么在某处的主窗口中显示值,要么创建一个单独的“调试控制台”窗口,您的程序本身将在其中显示值。无论哪种方式,您都可以将这些功能设为可选和/或仅在调试版本中。
  • @PeterDuniho 有我自己的程序显示它看起来有点像文本框的消息框,或者稍微提升一点。还有一个按钮,用于将值放入文本框中或显示值。我认为 Visual Studio 可能更高级一些,并且在其调试工具中具有这种功能,监视窗口几乎在那里,只是不完全。在列表的情况下,监视窗口显示得非常好,只是在任何地方都没有。我需要相当多的控件来轻松调试显示第一个计数和任何元素。
  • Visual Studio 的调试器怎么不“有点像消息框”?这是一个显示价值的单独窗口。无论如何,就像我说的:在调试器中,您只能在程序暂停时查看值,这是设计使然。以任何其他方式做这件事是不切实际的。程序中的仅调试功能是一种常见且被广泛接受的方式来执行您要求执行的操作。
  • @PeterDuniho 你如何在只出现在程序调试版本中的表单上制作文本框?

标签: c# winforms visual-studio debugging


【解决方案1】:

我认为您必须将其写入输出窗口:

a++;
System.Diagnostics.Debug.WriteLine(a);

不是最优的,但比断点好。

【讨论】:

  • 虽然你必须知道变量在哪里发生变化,/所有可能发生变化的地方,我想也许应该知道,但有点费力
  • @barlop:见我上面的其他评论。对于这种情况,您应该确保无论您要显示什么值,都有一个方法(独立或属性设置器)在该值更改时总是 被调用。这样一来,您的调试输出就被隔离到一个地方,而不需要在整个代码中进行更改。
  • @PeterDuniho 当然很好,但是你仍然必须在它改变的每个地方调用该方法,这就是我在你上面的评论中所说的,我认为你正在回复
  • @barlop:如果您将其设为属性,那么您甚至不必更改使用它的代码。语法完全相同。但是,即使使用专用的 setter 方法将其保留为一个字段也将是一次性更改,具有很高的价值。如果这些都不适合您,您可以使用计时器轮询该值以进行更新。
  • @PeterDuniho 如果没有计时器或专用设置器,您正在更改使用它的代码,您正在复制/粘贴调用.. 计时器或专用设置器非常好,没有复制/粘贴一个电话。尽管监视窗口可以让您评估任何变量或表达式,但事实如何呢?使用监视窗口我可以执行 lst.Count() 或 lst[4] 并查看值。我想使用这种方法,我需要添加一个组合框来显示整个列表,一个标签来显示计数,一个文本框来输入要查看的元素的索引,以及一个按钮来让它显示。和一个标签来显示它。
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多