【问题标题】:Debugging keyboard events like 'Ctrl+Up Arrow'调试键盘事件,如“Ctrl+向上箭头”
【发布时间】:2011-01-18 20:48:03
【问题描述】:

我想调试程序的一部分,该程序旨在响应键盘输入,例如 Ctrl+

所以,我在感兴趣区域的代码中设置了一个断点。但是,一旦我按下 Ctrl 键,程序就会跳转到该断点。这发生在我按下箭头键之前,所以我发现这种情况很难调试。

那么,如何调试Ctrl+等多键输入事件呢?

【问题讨论】:

    标签: c# winforms keyboard-events


    【解决方案1】:

    如果您使用 Visual Studio 调试代码,您可以通过在断点中添加 条件 来调试这种情况。

    为此,请右键单击代码语句左侧的断点图标,然后单击 Condition... 适用于您的情况的条件示例如下:

    e.Control && e.KeyCode == Keys.Up
    

    现在您可以调试多键输入事件,例如 Ctrl+,而无需更改任何代码。

    【讨论】:

      【解决方案2】:

      您可以使用 System.Diagnostics.Debug.WriteLine 将调试信息写入 Listeners 集合中的跟踪侦听器。

      例子:

      private void Form1_KeyUp(object sender, KeyEventArgs e)
      {
          if (e.Control && e.KeyCode == Keys.Up)
              System.Diagnostics.Debug.WriteLine("Up with control have pressed");
      }
      

      在 Visual Studio 菜单栏中,选择 View->Output 以查看输出。

      【讨论】:

        【解决方案3】:

        你使用什么事件?按键?尝试使用 KeyUp。在您释放 CTRL+组合键之前它不会触发。

        【讨论】:

        • KEY-UP 解决了我的问题。但抱歉,我选择了另一个正确的答案,因为它更接近我提出的问题。但为了解决我真正的问题,我从你的帖子中得到了 Key-Up 的想法。
        • LOL 我不明白为什么标记为答案的帖子更接近您的问题,而我的想法解决了问题,但是好的 :) 顺其自然。你至少可以给我投票:)
        【解决方案4】:

        将断点放在if 子句中怎么样?这样它只有在满足条件时才会中断。

        【讨论】:

          【解决方案5】:

          看看Debug.Assert 方法。它将允许您仅根据条件进行调试。执行将继续,直到条件为假。你可以这样做(伪代码):Debug.Assert(NOT up key pressed); 这将使它忽略除向上键之外的任何按键。

          【讨论】:

            【解决方案6】:

            通常,您唯一的选择是将一些消息打印到控制台或错误日志。否则调试器 UI 会干扰您的代码。例如,Visual Studio 调试器可以在遇到断点时打印表达式的值,因此您无需编写特殊代码。

            【讨论】:

            • ",可以在断点处打印表达式的值,所以你不需要编写特殊的代码。" ... 那是什么?怎么样?
            • @BDotA 在断点上按鼠标右键,选择“当命中”,你会看到一个带有说明的窗口。点击“打印消息”和“继续执行”复选框并输入您的表达式,例如:“变量:{myVar}”,因此 myVar 的值将在命中此断点时打印到输出窗口。
            猜你喜欢
            • 2012-05-03
            • 2010-09-21
            • 2021-11-30
            • 2019-04-27
            • 1970-01-01
            • 2018-09-16
            • 1970-01-01
            • 2011-03-28
            • 2016-07-28
            相关资源
            最近更新 更多