Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#无论如何,在点击按钮后自动中断_C#_Winforms - Fatal编程技术网

C#无论如何,在点击按钮后自动中断

C#无论如何,在点击按钮后自动中断,c#,winforms,C#,Winforms,如果我有一个项目,但我不知道设计如何与代码相对应,那么有没有办法让调试器在每次按下任何按钮时都中断,这样我就可以快速导航到代码中的正确位置,还是我在这里要求太多?您可以调用System.Diagnostics.debugger.break()告诉任何连接的调试器在该行中断 如果未连接任何调试器,Windows将尝试启动任何已注册的调试器。如果未注册,则会出现应用程序异常/崩溃。因此,不要将其留在生产代码中:) e、 g.(根据icemanind的评论) 如果你想在点击任何一个按钮时打破它,它会变

如果我有一个项目,但我不知道设计如何与代码相对应,那么有没有办法让调试器在每次按下任何按钮时都中断,这样我就可以快速导航到代码中的正确位置,还是我在这里要求太多?

您可以调用
System.Diagnostics.debugger.break()
告诉任何连接的调试器在该行中断

如果未连接任何调试器,Windows将尝试启动任何已注册的调试器。如果未注册,则会出现应用程序异常/崩溃。因此,不要将其留在生产代码中:)

e、 g.(根据icemanind的评论)

如果你想在点击任何一个按钮时打破它,它会变得有点棘手。最简单的方法是编写一个
按钮
包装类,覆盖
OnClick
并将中断调用放在其中。例如:

public class ButtonWedge : Button
{
    protected override void OnClick(System.EventArgs e)
    {
        Debugger.Break();
        base.OnClick(e);
    }
}
添加该类后,可以将其拖放到设计图面上。但是,如果您已经获得了代码,则可以编辑designer.cs文件并将
System.Windows.Forms.Button
替换为
ButtonWedge

一旦进入
OnClick
,您可以通过使用
控件查看基类
Events
数组来查看
Click
事件的位置。EventClick
键。它将包含一个多播委托,您可以查看
方法
目标
属性,以了解订阅此
单击
事件的内容。换句话说,运行时单击处理程序的名称为:

string handlerName = base.Events[Control.EventClick].Target.GetType().FullName + '.'
   + base.Events[Control.EventClick].Method.Name;

它不会在特定的
点击事件中设置断点,但会让您知道发生了什么以及发生了什么…

如果您指的是项目中程序上的按钮,请使用Peter的答案。如果您询问是否可以使键盘或鼠标上的按钮导致执行中断或暂停,可以按Ctrl+Alt+pause。

为什么不能在设计模式下双击该按钮。它在处理单击事件的函数上的代码中打开

为了安全起见,最好将
System.Diagnostics.Debugger.Break()
环绕在
#if DEBUG
#endif
指令周围,这样您就不必为了调试/发布版本而不断删除和添加它们。您还可以将建议的代码环绕在if(Debugger.IsAttached){…}将行为限制为仅在附加调试器时(如果调试器在IsAttached检查之后和调用Break()之前分离,则存在微小的争用条件除外)。我将System.Diagnostics.debugger.Break()放在何处如果我不知道按钮触发的事件,如果我不知道按钮名称?@NickolayKondratyev这有点棘手,我在答案中添加了一些细节。
string handlerName = base.Events[Control.EventClick].Target.GetType().FullName + '.'
   + base.Events[Control.EventClick].Method.Name;