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枚以上の写真をアップロードするコンポーネントを実装します

推薦する

ウェブページをデザインするには?ウェブページを作成するには?

Web デザインの理解に関しては、多くの人がまだ Web ページ制作のレベルにとどまっているようで...

Linux telnetコマンドの使用

1. はじめにtelnet コマンドは、リモート ホストにログインするために使用されます。これは、T...

js を使用して QR コードを生成するサンプル コード

以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...

reactにおけるstateの略語の詳細な説明

序文国家とは何か私たちは皆、React はステート マシンであると言います。それはどのように反映され...

MySQLが2つのテーブルを関連付ける際のエンコードの問題と解決策

Mysqlが2つのテーブルを関連付けると、次のエラーメッセージが生成されます:照合順序の不正な組み合...

CSS 3.0とビデオを組み合わせることでクリエイティブなオープニング効果を実現

CSS 3.0 とビデオを組み合わせて実現したクリエイティブなオープニングをご紹介します。効果は次の...

JavaScriptはスクロールバーの位置を取得し、ページをアンカーポイントまでスライドします。

序文この記事は、私が最近仕事で遭遇した問題を記録したものです。アプリネイティブとフロントエンドのh5...

Vue要素のバックグラウンド認証プロセスの分析

序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...

Nginx 構成の場所の一致ルールの例の説明

nginx の設定命令のスコープは、main、server、location の 3 種類に分けられ...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

ネイティブ JavaScript を使用して計算機のサンプル コードを開発する

計算機の主な機能は数値計算を実行することです。計算機機能の Web インスタンスを開発すると、js ...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

JS正規RegExpオブジェクトについての簡単な説明

目次1. RegExpオブジェクト2. 文法2.1 定義2.2 修飾子2.3 角括弧2.4 メタ文字...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...