【发布时间】:2011-01-18 20:48:03
【问题描述】:
我想调试程序的一部分,该程序旨在响应键盘输入,例如 Ctrl+↑。
所以,我在感兴趣区域的代码中设置了一个断点。但是,一旦我按下 Ctrl 键,程序就会跳转到该断点。这发生在我按下箭头键之前,所以我发现这种情况很难调试。
那么,如何调试Ctrl+↑等多键输入事件呢?
【问题讨论】:
标签: c# winforms keyboard-events
我想调试程序的一部分,该程序旨在响应键盘输入,例如 Ctrl+↑。
所以,我在感兴趣区域的代码中设置了一个断点。但是,一旦我按下 Ctrl 键,程序就会跳转到该断点。这发生在我按下箭头键之前,所以我发现这种情况很难调试。
那么,如何调试Ctrl+↑等多键输入事件呢?
【问题讨论】:
标签: c# winforms keyboard-events
如果您使用 Visual Studio 调试代码,您可以通过在断点中添加 条件 来调试这种情况。
为此,请右键单击代码语句左侧的断点图标,然后单击 Condition... 适用于您的情况的条件示例如下:
e.Control && e.KeyCode == Keys.Up
现在您可以调试多键输入事件,例如 Ctrl+↑,而无需更改任何代码。
【讨论】:
您可以使用 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 以查看输出。
【讨论】:
你使用什么事件?按键?尝试使用 KeyUp。在您释放 CTRL+组合键之前它不会触发。
【讨论】:
将断点放在if 子句中怎么样?这样它只有在满足条件时才会中断。
【讨论】:
看看Debug.Assert 方法。它将允许您仅根据条件进行调试。执行将继续,直到条件为假。你可以这样做(伪代码):Debug.Assert(NOT up key pressed);
这将使它忽略除向上键之外的任何按键。
【讨论】:
通常,您唯一的选择是将一些消息打印到控制台或错误日志。否则调试器 UI 会干扰您的代码。例如,Visual Studio 调试器可以在遇到断点时打印表达式的值,因此您无需编写特殊代码。
【讨论】: