DebugBreak()在C#中等效

Abr*_*mJP 28 .net c# debugging

在C#中有任何语句等同于DebugBreak().我希望在满足特定条件时调用调试器.

请帮忙

ang*_*son 38

您可以在System.Diagnostics命名空间中使用Debugger类的Break方法:

Debugger.Break();
Run Code Online (Sandbox Code Playgroud)

现在,您还可以通过不同的方式添加条件断点,而无需在项目中添加代码.

这当然只有在已经通过调试器运行程序时才有效

您可以做的是首先在您希望调试器停止的位置添加常规断点,然后右键单击断点的红点:

断点右键菜单

然后编辑条件以满足您的需求:

断点条件对话框

然后在断点点内用小+表示符号:

条件断点

  • Debugger.Break的好处是它即使没有附加调试器也能正常工作. (2认同)

Joe*_* B. 15

关于其他答案,我更喜欢使用Debugger.Launch().如果应用程序尚未在调试器中运行,则Launch()将调用调试器对话框,允许您将Visual Studio(或其他调试器)附加到进程.但是,如果您已经在调试,它将直接通过Debugger.Launch()调用.另一方面,Break()将充当断点 - 每次碰到该点时都会断开(如果尚未附加进程,则调用调试器对话框).

请务必小心不要在代码中留下任何一个语句.使用调试器调用生产代码可以暂停您的应用程序或创建非常难以追踪错误.(上个月的糟糕经历)

  • Joe,感谢您详细说明Debug.Launch()和Debug.Break()之间的区别 (3认同)

Wra*_*ath 5

System.Diagnostics.Debugger.Break();

//Lauches the JIT debug window
System.Diagnostics.Debugger.Launch();
Run Code Online (Sandbox Code Playgroud)

这在调试服务时特别有用,因为您获得了Just In Time调试器窗口,然后可以选择visual studio窗口来调试服务

  • 第一个(显然).`if(Debugger.IsAttached){Debugger.Break(); }`是一个有用的模式,有一个永久断点(不依赖于调试器保存状态),我通常将它包含在`#if DEBUG`中的最后机会异常处理程序中. (4认同)
  • 如果你只想在连接调试器时触发它,可以检查`Debugger.IsAttached`. (2认同)