之间有什么区别
Debugger.Launch();
Debugger.Break();
答案 0 :(得分:19)
阅读文档时,如果附加调试器,Launch
听起来没有任何作用 - 它实际上并没有中断(尽管我还没有验证过这一点)。
Break
要求启动调试器(如果没有附加), 执行中断。
实际上,你不太可能有Launch
点......如果那样的话。
答案 1 :(得分:15)
启动时将启动一个调试器。但如果没有可用的话,就会被忽略。如果没有可用的调试器,Break将使程序崩溃。
答案 2 :(得分:8)
更微妙的差异:
如果已附加调试器,则Debugger.Launch为nop;而
Debugger.Break
将永远破裂
进入调试器。
启动一个
调试器实际上并没有破坏
进入调试器。例如,在
Visual Studio Debugger.Launch
将附加一个
调试程序到正在运行的进程,但是
那你还需要做一个Debug |
在Visual Studio中打破以实际打破
调试器。
答案 3 :(得分:3)
我不确定是否有人真正尝试过 .NET Framework 和 .NET 5 之间的区别或区别,但这是我测试时的行为:
点击确定后 VS 将在 Debugger.Launch()
上中断(尽管其他回答者说不会):
但是,如果调试器已经连接,它不会在 Debugger.Launch()
上中断。
如果我将我的项目打包为 dotnet 工具,一切都一样,只是它不知道在哪里中断:
TL;DR:在 .NET 5 中:
附加调试器:
.Launch()
什么都不做.Break()
会中断没有附加调试器:
.Launch()
会要求附加调试器,如果你这样做了,它会在 .Launch()
.Break()
什么都不做(没有例外)示例.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Program.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");