LinuxとVsCodeでC# GUIアプリをデバッグする

### VsCodeでGtkアプリ C#をデバッグするまで

前回の続き

https://qiita.com/iota_11/items/5d805775ac2a42358427

### 必要なもの

#### マイクロソフト公式のC＃拡張機能　

デバッグ機能が利用できるようになります。

https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp

    .NET Coreのための軽量な開発ツール。
    シンタックスハイライト、インテリセンス、定義へ移動、すべての参照の検索など、優れたC#編集サポート。
    .NET Core (CoreCLR)のデバッグをサポート。注：Monoデバッグはサポートされていません。デスクトップCLRのデバッグは限定的なサポートとなります。
    Windows、macOS、Linuxのproject.jsonとcsprojのプロジェクトをサポートします。

#### launch.json

「実行とデバッグ」で生成できます。
.NET Core Launch (console)を選択します。

programのところをC#アプリまでのフルパスに書き換えます。

```launch.json
{ 
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "dllファイルまでのパスを記入する",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "console": "internalConsole"
        }  
    ]
}
```

#### ~~ビルドしたアプリ~~

~~事前にプロジェクトをビルドしアプリを生成しておきます。~~

~~フルパスをlaunch.jsonのprogramのところに書きます。~~

##### proxy環境が必要な場合

proxyが必要な環境で利用する時、VsCodeのnugetのバグでうまくビルドが動作しないことがあります。proxy設定はしているがnugetがうまく通らない場合はターミナル側でビルドやrestoreするとよいです。その後VSCodeで作業します

## 追記

#### パスを2行足すだけでアプリを毎回手動でビルドしなくても、自動でビルドした後にデバッグできるようになる

```launch.json
"program": "dllファイルまでのパスを記入",
"args": ["--project","プロジェクトファイルまでのパス"],
```
dllファイルまでのパスを記入。環境変数を確認　直接書いたほうが良い
argsに引数に--projetとprojectファイルまでのパスを**2行**足すだけでデバッグできることがわかりました。

```launch.json

{ 
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "dllファイルまでのパスを記入する",
            "args": ["--project","プロジェクトファイルまでのパス"],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "console": "internalConsole"
        }  
    ]
}

```

### 流れ

#### Gtkプロジェクトを作成

フォルダを作成します。VSCodeからフォルダを開きます。
<img width="300" alt="Screenshot from 2022-12-12 21-01-57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1a18164d-78dc-5678-f8a8-2044aa17d0c5.png">

拡張機能「[vscode-solution-explorer](https://marketplace.visualstudio.com/items?itemName=fernandoescolar.vscode-solution-explorer)」でソリューションを作成します。
<img width="300" alt="Screenshot from 2022-12-12 21-02-08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/51746b36-59a2-1d87-c92a-ebebbed33fbc.png">

拡張機能「[vscode-solution-explorer](https://marketplace.visualstudio.com/items?itemName=fernandoescolar.vscode-solution-explorer)」でGTKアプリプロジェクトを生成します。
<img width="300" alt="Screenshot from 2022-12-12 21-06-48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/8f291764-a6f4-7275-d89b-8cbba65c6ecf.png">

#### launch.jsonを作成

「実行とデバッグ」「launch.jsonファイルを作成する」を押します。デバッカーの選択は「.net6 and .net core」を選びます。
<img width="800" alt="Screenshot from 2022-12-12 21-03-02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/2eea8865-9579-a934-3ddb-e8ef6d400956.png">

launch.jsonの構成の追加は「.NET Core Launch (console)」を選択します。
<img width="800" alt="Screenshot from 2022-12-12 21-06-25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/a368a190-3299-a955-c4f0-1763373b3768.png">

launch.jsonの「program」にC#アプリのパスを記入します。
<img width="500" alt="Screenshot from 2022-12-12 21-07-31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/36d81016-0280-d78f-4849-3949e4af1269.png">

#### デバッグ

launch.jsonを作成すると「実行とデバッグ」からGTKアプリがデバッグできるようになります。
<img width="500" alt="Screenshot from 2022-12-12 21-09-00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/d138f3eb-567d-91cd-f142-9847314acfab.png">

ブレイクポイントで停止できます。
<img width="500" alt="Screenshot from 2022-12-12 21-10-39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/2c819110-5a6f-7d76-1df2-b0151c50e65c.png">

[その２](https://qiita.com/iota_11/items/51136caa5c424f8fa946)へ続く