日本マイクロソフト株式会社
カスタマーサービス&サポート本部
エスカレーションエンジニア
牧 大介
帰ってきたハードコアデバッギング
~.NET6 を添えて~
ちょっと
ハードコア デバッギングとは…
• de:code 2017~2019 に行われた、
上級サポートエンジニアによるゴリゴリのデバッグセッション
このセッションは…
ハードコア!
ヘンタイがおくる、ヘンタイの為のセッション
ちょっと
はじめるまえに…
考えるな、
感じろ。
はじめに
本セッションのテーマ
• “デバッガーで覗き見る .NET 6”
• お題として二種類のシナリオを用意しました
• コンソール アプリケーション
• .NET Framework 4.8 と比較
• ASP.NET Core アプリケーション
• .NET 5 と比較
さっそく始めましょう
(コンソールアプリ)
.NET Framework と .NET 6
• .NET Framework
• ランタイムは clr.dll(C:WindowsMicrosoft.NETFrameworkv4.0.30319)
• C:WindowsSystem32mscoree.dll から、適切なバージョンのランタイムが呼び出される
• Windows システムに完全に依存している
• ReadFile() Win32 API が mscorlib.dll から呼び出される
• .NET 6
• ランタイムは coreclr.dll(C:ProgramFilesdotnetsharedMicrosoft.NETCore.App6.0.1)
• apphost からホスティング API を経由し、適切なバージョンのランタイムが呼び出される
• apphost は CPU や OS 毎に用意されている
• ReadFile() Win32 API が System.Console の ConsolePal+WindowsConsoleStreamから呼び
出される。Unix などの実装も用意されている
続いて見てみましょう
(ASP.NET Core アプリ)
ASP.NET Core 5 と ASP.NET Core 6
• ASP.NET Core 5
• 既定のデバッグホストは IISEXPRESS
• ASP.NET Core 6
• 既定のデバッグホストは Kestrel
• Kestrel は apphost に ASP.NET Core をホスティングしたもの
• ホットリロードが使用可能
• プロセスの再起動、モジュールの再ビルド、AppDomain の再起動、アセンブリの再読み込みといったことを
行わず、IL のアドレスを差し替える(オンメモリパッチのように置き換えを行う)
• Visual Studio 2022 でも CLI でも使用可能(dotnet watch)
まとめ
• .NET 6 では、
• (一部のプロジェクトで) ソースコードが非常に短くなります
• 最上位レベルのステートメント
• 暗黙的な using ディレクティブ
• もちろん(.NET Framework とは異なり)クロスプラットフォーム対応
• Visual Studio 2022 では、
• ASP.NET Core の既定のホストが Kestrel Web サーバーに
• ホットリロードにより(リビルドせずに)ソースコードの変更を反映
...という世界を、デバッガーというレンズを通して見てみました
◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に
対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。
◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。
◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと
は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり
ません。
◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ
れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。
◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。
その他、記載されている会社名および製品名は、一般に各社の商標です。

【BS5】帰ってきたハードコアデバッギング ~.NET6 を添えて~

  • 1.
  • 2.
    ハードコア デバッギングとは… • de:code2017~2019 に行われた、 上級サポートエンジニアによるゴリゴリのデバッグセッション
  • 3.
  • 4.
  • 5.
  • 6.
    本セッションのテーマ • “デバッガーで覗き見る .NET6” • お題として二種類のシナリオを用意しました • コンソール アプリケーション • .NET Framework 4.8 と比較 • ASP.NET Core アプリケーション • .NET 5 と比較
  • 7.
  • 8.
    .NET Framework と.NET 6 • .NET Framework • ランタイムは clr.dll(C:WindowsMicrosoft.NETFrameworkv4.0.30319) • C:WindowsSystem32mscoree.dll から、適切なバージョンのランタイムが呼び出される • Windows システムに完全に依存している • ReadFile() Win32 API が mscorlib.dll から呼び出される • .NET 6 • ランタイムは coreclr.dll(C:ProgramFilesdotnetsharedMicrosoft.NETCore.App6.0.1) • apphost からホスティング API を経由し、適切なバージョンのランタイムが呼び出される • apphost は CPU や OS 毎に用意されている • ReadFile() Win32 API が System.Console の ConsolePal+WindowsConsoleStreamから呼び 出される。Unix などの実装も用意されている
  • 9.
  • 10.
    ASP.NET Core 5と ASP.NET Core 6 • ASP.NET Core 5 • 既定のデバッグホストは IISEXPRESS • ASP.NET Core 6 • 既定のデバッグホストは Kestrel • Kestrel は apphost に ASP.NET Core をホスティングしたもの • ホットリロードが使用可能 • プロセスの再起動、モジュールの再ビルド、AppDomain の再起動、アセンブリの再読み込みといったことを 行わず、IL のアドレスを差し替える(オンメモリパッチのように置き換えを行う) • Visual Studio 2022 でも CLI でも使用可能(dotnet watch)
  • 11.
    まとめ • .NET 6では、 • (一部のプロジェクトで) ソースコードが非常に短くなります • 最上位レベルのステートメント • 暗黙的な using ディレクティブ • もちろん(.NET Framework とは異なり)クロスプラットフォーム対応 • Visual Studio 2022 では、 • ASP.NET Core の既定のホストが Kestrel Web サーバーに • ホットリロードにより(リビルドせずに)ソースコードの変更を反映 ...という世界を、デバッガーというレンズを通して見てみました
  • 12.
    ◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoftの見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に 対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。 ◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。 ◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり ません。 ◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。 ◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。 その他、記載されている会社名および製品名は、一般に各社の商標です。