代码之家  ›  专栏  ›  技术社区  ›  Nissim

之间的差异调试器。启动以及调试器.中断

  •  28
  • Nissim  · 技术社区  · 14 年前

    两者有什么区别

    Debugger.Launch();
    Debugger.Break();
    

    ?

    3 回复  |  直到 9 年前
        1
  •  21
  •   Marc Gravell    14 年前

    阅读文档,听起来像 Launch 如果附加了调试器,则不会执行任何操作—实际上它不会 (尽管我还没有证实这一点)。

    Break 启动调试器(如果未连接),以及 休息一下。

    实际上,你不太可能拥有不止一个 指向。。。如果那样的话。

        2
  •  19
  •   Hans Passant    14 年前

    Launch将在调试器可用时启动调试器。但如果没有可用的,则忽略。如果没有可用的调试器,Break将使程序崩溃。

        3
  •  10
  •   Peter Mortensen icecrime    9 年前

    更微妙的区别:

    1. nop ;鉴于 Debugger.Break 进入调试器。

    2. 启动 调试器实际上并没有中断 进入调试器。例如,在 Visual Studio, Debugger.Launch 调试器,但是 调试器。

        4
  •  1
  •   Oskar    4 年前

    我不确定是否有人真的尝试过.NET Framework和.NET 5之间有什么区别,或者有什么不同,但这是我测试它时的行为:

    result when running the example

    单击“确定”后,VS将打开 Debugger.Launch() (尽管其他回答者表示不会):

    enter image description here

    但是调试器将 如果已经附加。

    enter image description here

    TL;DR: 在.NET 5中:

    • .Launch() 什么也做不了
    • .Break() 会破裂

    • .Launch() 将要求附加调试器,如果这样做,它将在 .Launch()
    • .Break()

    <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");