VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以下のとおりです、見てみましょう!

最近、Linux 上でプログラムをデバッグしていますが、直感的なグラフィカル インターフェイスがないため、gdb の使用に関してはまだ初心者レベルです。ネットで検索したら、2つの選択肢が見つかりました。1つはVisualStudio2019のリモートデバッグ機能を使う方法です。最近はVScodeを使っているので試していません。時間があるときに試してみます。もう 1 つの解決策は、VScode のリモート開発プラグイン (Microsoft が公式に提供) を使用してリモート デバッグを実行することです。この記事ではこのソリューションを紹介します。
このプロセスを紹介する他の記事もオンラインではありますが、それらはすべて成功した状況を説明しているだけで、プロセス中に遭遇した問題については説明されておらず、一部はあまり明確ではありません。それで、書いてみようと思いました。また、このドキュメントではリモート コンパイルではなくリモート デバッグについて紹介していることに注意してください。VScode のリモート デバッグもサポートされていますが、現時点では必要ありません。必要に応じて後で設定します。さらに、私のプロジェクトは g++ で直接ではなく、cmake と make を使用してコンパイルする必要があるため、まだ設定を開始していません。
VScode のリモート デバッグは、gdbserver メカニズムを使用して実行されます。一般的な原則は、Windows またはその他のグラフィカル システムで VScode を使用し、リモート開発プラグインを使用して SSH でリモート Linux に接続し、gdbserver によって提供される接続を介してリモート デバッグを実行することです。具体的な設定方法については、以下に記載します。

必要なソフトウェアとプラグイン

まず、gdb と gdbserver をインストールする必要があります。これらは、リモート システムの種類に応じてインストールできます。私はデフォルトでインストールされているUbuntuを使用します。コマンドは次のとおりです。

sudo apt install gdb
sudo apt install gdbserver

次に、公式の C/C++ プラグインである VScode のリモート開発プラグインをインストールする必要があります。この C/C++ プラグインを Linux にリモート接続した後、リモート Linux にもインストールする必要があります。以下のスクリーンショットでは、プラグインのアンインストール ボタンの横に「SSH で拡張機能が有効になっています: xxxx」と表示されており、すでにインストールされていることがわかります。インストール方法は接続成功後に後ほど紹介します。

リモート開発C++

リモート接続

Remote Development プラグインをインストールすると、Linux にリモート接続できるようになります。SSH 経由で接続する方法は 2 つあります。1 つはアカウントとパスワードを使用する方法です。もう 1 つのタイプは、公開鍵と秘密鍵の接続です。ここで接続するには公開鍵と秘密鍵を使用することをお勧めします。リモートデバッグのプロセスでは、後で複数の場所に接続するため、パスワードを何度も入力するのは面倒です。公開鍵と秘密鍵を使用すると、一度設定するだけで済むため、非常に便利です。アカウントとパスワードを使用して接続することを選択した場合は、この手順をスキップできます。 ssh リモートの設定方法は比較的簡単ですが、Windows では大きな問題があります。

まず、リモート Linux 上で公開鍵と秘密鍵のペアを生成します。

# 次のコマンドを実行し、プロンプトに従って公開鍵と秘密鍵のペアを生成します。
ssh-keygen -t rsa

# 公開鍵は生成されたパスに直接保存され、authorized_keysに転送されます
# ユーザーの .ssh ディレクトリに保存します。通常、生成時のデフォルト パスはユーザーの .ssh ディレクトリです。# 生成された公開キーが「vscode_rsa.pub」であると仮定します。最後に、権限設定に注意してください。デフォルトでは変更する必要はありません。
cat /home/user/.ssh/vscode_rsa.pub >> /home/user/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys

# 秘密鍵を Windows マシンにダウンロードします # パスは「D:/.ssh/vscode_rsa」と仮定します

ここまでは問題はありません。次に、VScode で接続を構成する必要があります。
リモート開発プラグインをインストールすると、下の図に示すように、VScode の左端にリモート リソース マネージャー アイコンが表示されます。次に、SSH ターゲットを選択し、プラス記号をクリックして、user@ip の形式で追加すると、プロンプトに従ってリモート接続の構成ファイルが表示されます。または、以下のインターフェイスのプラス記号の横にある歯車をクリックして構成ファイルを直接開き、次の形式に従って追加し、IdentityFile の後に秘密キーのパスを追加することもできます。

ここに画像の説明を挿入

ホスト xxxx
 ホスト名 xxxx
 ユーザーのユーザー名
 アイデンティティファイル D:/.ssh/vscode_rsa

その後、元のファイル参照インターフェイスでリモート フォルダーを開くことができます。しかし、接続が構成されると、VScode ターミナルはエラーを報告します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告: 保護されていない秘密鍵ファイルです! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'vscode_rsa' の権限が開放されすぎています。
秘密鍵ファイルは他人がアクセスできないようにする必要があります。
この秘密鍵は無視されます。
ロードキー「vscode_rsa」: 不正な権限

根本的な原因は秘密鍵の権限の問題です。これを Linux で行う場合は、chmod を使用して直接 644 に変更できますが、Windows の場合は少し面倒です。

解決:

秘密キーを右クリックして「プロパティ」を選択し、「セキュリティ」タブを選択して、下の「詳細設定」ボタンをクリックし、新しいポップアップウィンドウの下部にある「継承を無効にする」をクリックし、継承ボタンの上にある「追加」ボタンをクリックして、現在のウィンドウのログインユーザーを秘密キーの所有者として再設定し、すべての権限を確認します。最終的には、以下のようになるはずです。

ここに画像の説明を挿入

このとき、VScode リモート接続を再度開くと問題は発生しません。

リモートデバッグ

VScodeの設定

まず、上記の C/C++ プラグインをリモート Linux にインストールする必要があります。インストール方法は簡単です。プラグインをクリックします。インストールされたプラグインの中に、緑色のプロンプト [SSH の場合: IP] があるプラグインがあることがわかります。C/C++ プラグインを見つけて、緑色のプロンプトをクリックし、リモート Linux にインストールします。インストール後、VScode を再起動します。リモート Linux も起動していなかったので再起動した方が良いです。後で操作したところ、VScode は選択したデバッガーの種類が見つからないというメッセージを表示し、選択したデバッガーに基づいて launch.json ファイルを自動的に生成しませんでした。しかし、再起動せずに成功できるのであれば、それが最善でしょう。
次に、左上にあるファイルを参照する VScode リソース マネージャーを開きます。リモート フォルダーを開くように求められます。このとき、プロンプトに従って、デバッグするプログラムが配置されているフォルダーを開きます。

次に、メニューバーで「実行」->「構成の追加」を選択すると、デバッグ環境を選択するためのプロンプトがポップアップ表示されます。[C++ GDB/LLDB]を選択すると、launch.json ファイルが自動的に生成されます。次のように:

{
 // IntelliSense を使用して関連するプロパティについて学習します。 
 // マウスをホバーすると、既存のプロパティの説明が表示されます。
 // 詳細については、https://go.microsoft.com/fwlink/?linkid=830387 をご覧ください。
 "バージョン": "0.2.0",
 「構成」: [
 {
  "name": "(gdb) 開始",
  "タイプ": "cppdbg",
  「リクエスト」: 「起動」、
  "プログラム": "${ワークスペースフォルダー}/プログラム",
  "引数": [],
  "stopAtEntry": true、
  "cwd": "${ワークスペースフォルダー}",
  "環境": []、
  "外部コンソール": false,
  "MIモード": "gdb",
  「セットアップコマンド」: [
  {
   "description": "gdb のプリティープリントを有効にする",
   "テキスト": "-enable-pretty-printing",
   "失敗を無視": true
  }
  ]
 }
 ]
}

自動生成されない場合は、VScode が環境を認識しておらず、インストールしたプラグインが有効になっていないため、VScode とリモート Linux を再起動する必要があります。
生成された launch.json ファイルで変更する必要があるのは、プログラム フィールドだけです。${workspaceFolder} は、先ほど開いたリモート フォルダーを参照します。デバッグするプログラムの名前を指定するだけで済みます。 stopAtEntry フィールドはデフォルトで false に設定されており、デバッグの開始時にブレークポイントがメイン関数にあるかどうかを示します。これを true に変更します。その他の設定については、デフォルトの設定をそのまま使用し、何も追加する必要はありません。

リモートLinuxがgdbserverを起動する

次のようにして、リモート Linux で gdbserver を起動します。

#gdbserver localhost:<ポート> <プログラム> <引数>
gdbserver localhost:2333 /path/to/myprogram arg1 arg2

これは VScode が接続するときにデフォルトで使用されるポート番号なので、ポート番号を変更しないように注意してください。次に、VScode で F5 キーを押してデバッグすると、gdb によってソース コードが自動的に表示されるので、デバッグするプログラムのデバッグ バージョンを使用するのが最適です。

参考記事:

https://warmgrid.github.io/2019/05/21/remote-debug-in-vscode-insiders.html

https://superuser.com/questions/1296024/windows-ssh-permissions-for-private-key-are-too-open

VScode 構成のリモート デバッグ Linux プログラムの問題を解決するこの記事はこれで終わりです。より関連性の高い VScode リモート デバッグ Linux プログラムのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • vscode を使用したリモート Linux 開発の実装
  • VSCode の Remote-SSH を使用して Linux に接続し、リモート開発を行う
  • Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

<<:  MySQLでビューを作成する方法

>>:  Vant Uploaderは1枚以上の写真をアップロードするコンポーネントを実装します

推薦する

一般的な Nginx のテクニックと例の概要

1. 複数サーバーの優先順位たとえば、各サーバー ブロックがポート 80 をリッスンする場合、www...

HTML のボタン タグをクリックしてページにジャンプする 3 つの方法

方法1: onclickイベントを使用する <input type="button&...

MySql データベースのサブクエリと高度なアプリケーションの簡単な分析

MySql データベースのサブクエリ:サブクエリ: 選択クエリ ステートメント内に別の選択ステートメ...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

2列の水平タイムラインを実装するためのVueサンプルコード

目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

nginx のロケーションで URI の傍受を実装する方法

例:場所のルートとエイリアスルートディレクティブは、ルートによって設定されたディレクトリに検索ルート...

Enterキーを押すとフォームが自動的に送信されます。予期せぬ発見

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

MySQL5.7.17 winx64 インストール バージョン構成方法 Windows Server 2008 R2 でのグラフィック チュートリアル

参考までに、Winでmysql5.7をインストールします。具体的な内容は次のとおりです。 @Auth...

Windows および Linux での Redis のインストールとデーモン設定

# Windows および Linux 上の Redis のインストール デーモン構成Redis の...

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

HTMLページの読み込み速度を上げる方法

(1)HTTPリクエストを減らす。 (リソース ファイルをマージし、イメージ スプライトを使用します...

ウェブサイトのカラースキーム ウェブサイトに適した色の選択

色はウェブサイト訪問者に影響を与えますか?数年前までは、ウェブサイトはまだ贅沢品でしたが、今ではほと...

MySQL でスロークエリログ機能を有効にする方法

MySQL スロー クエリ ログは、問題のあるクエリを追跡するのに非常に役立ちます。現在のプログラム...