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;