Debugger.Launch 和 Debugger.Break 的区别
Posted
技术标签:
【中文标题】Debugger.Launch 和 Debugger.Break 的区别【英文标题】:Difference between Debugger.Launch and Debugger.Break 【发布时间】:2011-04-15 03:07:59 【问题描述】:有什么区别
Debugger.Launch();
Debugger.Break();
?
【问题讨论】:
【参考方案1】:阅读文档,如果附加了调试器,听起来Launch
什么都不做——它实际上并没有中断(尽管我还没有验证这一点)。
Break
要求启动调试器(如果未附加),确实中断。
实际上,您不太可能拥有多个Launch
点...如果那样的话。
【讨论】:
【参考方案2】:Launch 将在可用时启动一个调试器。但是,如果没有可用的,则将被忽略。如果没有可用的调试器,Break 将使程序崩溃。
【讨论】:
尤其是崩溃提示很有帮助。我刚刚发现我的发布版本应用程序由于忘记了 debug.break 而崩溃。我以为调用只会在调试版本中执行...我错了...【参考方案3】:更细微的区别:
如果已附加调试器,则 Debugger.Launch 为 nop;然而
Debugger.Break
将永远中断
进入调试器。
启动一个
调试器实际上并没有中断
进入调试器。例如,在
Visual Studio,Debugger.Launch
将附加一个
调试器到正在运行的进程,但是
那么你仍然需要做一个 Debug |
在 Visual Studio 中破解以实际破解
调试器。
【讨论】:
【参考方案4】:我不确定是否有人真正尝试过 .NET Framework 和 .NET 5 之间的区别或区别,但这是我测试时的行为:
点击 OK 后,VS 将在 Debugger.Launch()
上中断(尽管其他回答者说不会):
但是,如果 Debugger.Launch()
已经附加,调试器将不会中断。
如果我将我的项目打包为 dotnet 工具,一切都是一样的,只是它不知道在哪里中断:
TL;DR: 在 .NET 5 中:
附加调试器:
.Launch()
什么都不做
.Break()
会崩溃
没有附加调试器:
.Launch()
会要求附加一个调试器,如果你这样做了,它将在 .Launch()
处中断
.Break()
什么都不做(没有例外)
Example.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
程序.cs:
using System;
using System.Diagnostics;
Console.WriteLine("Before break");
Debugger.Break();
Console.WriteLine("After break");
Console.WriteLine("Before Launch");
Debugger.Launch();
Console.WriteLine("After Launch");
【讨论】:
我用 .NET Framework 验证了相同的“未附加调试器”行为。以上是关于Debugger.Launch 和 Debugger.Break 的区别的主要内容,如果未能解决你的问题,请参考以下文章