C# Debugger.Launch和Debugger.Break之间的差异
两者之间有什么区别C# Debugger.Launch和Debugger.Break之间的差异,c#,.net,debugging,system.diagnostics,C#,.net,Debugging,System.diagnostics,两者之间有什么区别 Debugger.Launch(); Debugger.Break(); ?阅读文档时,如果附加了调试器,Launch听起来好像什么都不做-它实际上没有中断(尽管我还没有验证这一点) Break请求启动调试器(如果未连接),并执行中断操作 实际上,您不太可能有多个Launch点。。。如果是这样。启动将在调试器可用时启动调试器。但如果没有可用的,则忽略。如果没有可用的调试器,Break将使程序崩溃。更微妙的区别: 如果已附加调试器,则debugger.Launch为;鉴于 D
Debugger.Launch();
Debugger.Break();
?阅读文档时,如果附加了调试器,
Launch
听起来好像什么都不做-它实际上没有中断(尽管我还没有验证这一点)
Break
请求启动调试器(如果未连接),并执行中断操作
实际上,您不太可能有多个
Launch
点。。。如果是这样。启动将在调试器可用时启动调试器。但如果没有可用的,则忽略。如果没有可用的调试器,Break将使程序崩溃。更微妙的区别:
Debugger.Break
将始终中断
进入调试器Debugger.Launch
将附加一个
将调试器添加到正在运行的进程,但
然后您仍然需要进行调试|
在VisualStudio中中断以实际中断
调试器我不确定是否有人真的尝试过.NET Framework和.NET 5之间有什么区别,或者有什么不同,但这是我测试它时的行为: 单击“确定”后,VS将在
调试器.Launch()
上中断(尽管其他回答者说不会):
但是,如果调试器已连接,则调试器不会在debugger.Launch()
上中断
如果我将我的项目打包为一个dotnet工具,那么一切都是一样的,只是它不知道从哪里中断:
TL;DR:在.NET 5中:
已附加调试器:
将不起任何作用.Launch()
将中断.Break()
将要求附加调试器,如果附加调试器,它将在.Launch()
.Launch()
将不起任何作用(无例外).Break()
示例.csproj:
Exe
net5.0
Program.cs:
使用系统;
使用系统诊断;
控制台。写入线(“中断前”);
Debugger.Break();
控制台。写入线(“中断后”);
Console.WriteLine(“发射前”);
Debugger.Launch();
控制台。WriteLine(“启动后”);
特别是对崩溃的提示很有帮助。我刚刚发现我的发布版本应用程序由于忘记了debug.break而崩溃。我以为调用只会在调试版本中执行…我错了。。。